资源下载/网站排名优化首页
Java调优进阶总目录
持续集成Jenkins环境搭建
Jenkins基于Java开发,服务器必须是要有Java的运行环境!
自动化构建、测试、打包、发布:将本地开发环境基本移植到云端!
git、maven、wget、axel【多线程下载工具,下载快】、跨服务区异步文件同步rsync!tree。
一、 Jenkins环境搭建
Jenkins支持主从模式,这将会把构建任务分发到多个从节点去执行,这样就可以支撑起多个项目的大量 构建任务,提升构建效率。同时,你可以提供多种环境(如:开发环境、生产环境)来对同一个项目进行测试和构建。
Jenkins的部署方式主要有三种:这里采用第一种方式
- 服务器直接运行war
- 服务器通过 yum命令下载jenkins安装包进行安装运行
- docker容器运行
1.1 安装前置组件步骤
1. 切换管理员,安装组件及Java。
sudo -s
yum install -y git sshpass wget rsync tree
java -version
yum install java-1.8.0-openjdk-devel.x86_64 -y
echo $JAVA_HOME# 配置JAVA_HOME环境变量
vim /etc/profile
source /etc/profile
配置JAVA_HOME环境变量,vim /etc/profile,最后加上,JAVA_HOME路径需确认。
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10- 1.el7_9.x86_64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
2. 安装axel
axel多线程下载工具。 rpm卸载命令:rpm -e --nodeps 要卸载的软件包
# 下载 axel rpm包
wget http://download- ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/a/axel-2.4-9.el7.x86_64.rpm
# 安装axel
rpm -ivh axel-2.4-9.el7.x86_64.rpm
# 查看版本
axel --version
3. 安装maven
axel -n 20 https://archive.apache.org/dist/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz tar zxvf apache-maven-3.6.1-bin.tar.gz mv apache-maven-3.6.1 /usr/local/vim /etc/profile
source /etc/profile
# 测试maven安装是否成功
mvn -v
# 创建maven本地仓库目录
mkdir -p /data/maven_repository
# 如果用户没有当前目录权限,则给用户授权
chown -R hky-student:hky-student /data/maven_repository/
# 修改maven中仓库的位置
vim /usr/local/apache-maven-3.6.1/conf/settings.xml
export MAVEN_HOME=/usr/local/apache-maven-3.6.1
export PATH=${MAVEN_HOME}/bin:${PATH}
找到对应标签,将其中内容替换为新建的仓库位置。在其中添加如下内容
<localRepository>/data/maven_repository</localRepository><mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url>
</mirror>
1.2 安装Jenkins软件
1. 下载jenkins安装包
jenkins.war 没有下载完成会出现该错误。 Error: Invalid or corrupt jarfile jenkins.war
axel -n 20 http://ftp-chi.osuosl.org/pub/jenkins/war/latest/jenkins.war# 创建jenkins新的工作目录
mkdir -p /data/jenkins_data
2.在~下新建脚本:vim jenkins.sh
#!/bin/bash
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64
export JENKINS_SERVER_PATH=/root
export JENKINS_HOME=/data/jenkins_datacd ${JENKINS_SERVER_PATH}
nohup java -jar jenkins.war --httpPort=80 >jenkins.log 2>&1 &
# 2>&1 日志格式化的方式
# 在上面的例子中,0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error)
# 2>&1是将标准错误(2)重定向到标准输出(&1),标准输出(&1)再被重定向输入到jenkins.log文件中。
以上内容编辑后保存退出
3. 添加脚本执行权限,启动jenkins
这里使用sh 脚本启动Jenkins, 也可以直接使用 nohup java -jar jenkins.war 命令启动。
chmod +x jenkins.sh
# 启动jenkins
/root/jenkins.sh# 修改jenkins配置(插件站点更新,加速联网)
vim /data/jenkins_data/hudson.model.UpdateCenter.xml
将XML内的url的值替换为:http://mirror.xmission.com/jenkins/updates/update-center.json
4. Jenkins开机自启动
在root用户下,设置开机执行:vim /etc/rc.d/rc.local,在最后添加如下启动命令
重启后。浏览器访问或者通过jps命令查看。
vim /etc/rc.d/rc.local
# 最后添加启动命令 /root/jenkins.sh
chmod +x /etc/rc.d/rc.local
# 重启机器
reboot# 查看启动的相关Java程序
jps
# 查看程序进程 及其 端口号
netstat -anp
ps -e|grep java
# 杀死进程
kill pid
5. Jenkins 启动相关的问题记录
- 使用/root/jenkins.sh 无法启动, 直接使用命令nohup启动。端口在命令中。通过端口映射,实现外网的页面的访问。
nohup java -jar jenkins.war --httpPort=8080 > jenkins.log 2>&1# 查看java相关程序是否运行
jps -l
1.3 、 测试Jenkins可用性
1 浏览器访问jenkins
提示输入密码,根据页面提示查看密码的方式获取密码并登录,一般用cat命令查看
cat /data/jenkins_data/secrets/initialAdminPassword# 或者在日志中查看
tail -100f ./jenkins.log
2 创建pipeline方式的测试job
在高级项目选项中,配置流水线脚本。
pipeline {agent any stages {stage('Hello') {steps {echo 'Hello World'}}}}
二、 Jenkins管理界面&&核心配置介绍
小结重点介绍核心配置:用户管理、角色管理、分组管理、插件管理、全局工具配置等。
1 角色管理
- 之所以提到角色管理,是由于跟用户权限控制有关,在jenkins中控制用户权限需要选择安全策略,比如有:安全矩阵策略、项目矩阵策略、基于角色的策略等,而企业最常用的就是基于角色的策略,本文也是以角色管理为主。
- 在Jenkins中角色管理分为两种:一种是全局角色,此角色与具体的job无关,是一种全局权限的控制,比如控制用户能不能查看job,能不能配置job;还有一种是项目角色,此角色与具体job有关,可以精细化控制到用户具体能拥有哪些job的哪些权限。
注意:如果想要配置角色管理,必须安装插件才行。
1、安装插件,插件名:Role-based Authorization Strategy
2 全局工具配置:JDK、Git、MVN
非pipeline的Java项目如果要构建成功,全局工具的环境需要配置好
- 配置入口:Manage Jenkins->Global Tool Configuration
- 配置方式:指定服务器上已经安装好的服务位置(不需要勾选自动安装)
- 配置前提:服务器已经安装好jdk1.8、maven3.6.1、git1.8.3.1
三、 Jenkins原理分析-jenkins如何存储数据
本质:就是将本地的构建过程搬到云端:CI/CD。Jenkins核心操作,对应的数据两个部分;jobs存储了构建的相关信息。存储从代码仓库拉取下来的所有代码,workspace。
- jobs --> 任务:日志、构建基本元数据【存放构建过程】
- workspace --> 工作空间【存放代码】
在Jenkins中,所有的数据默认都以文件形式存储在$JENKINS_HOME【/data/jenkins_data】目录下。
占用空间最大的目录就是jobs目录和workspace目录。
- jobs目录:项目在jenkins上的配置、构建日志、构建结果等所在目录
- workspace目录:项目在jenkins上配置的源码仓库地址下载的源码所在目录,Java中maven的构建操作在此目录下进行。
四、Jenkins Job备份恢复
1 备份需求
- 只备份重要的信息,保证恢复时除了构建历史,重要配置和job都在,排除掉build目录
- 备份要周期性的执行,保证至少每天备份一次
2 备份实现
thin backup插件实现备份到备份服务器
2.1 插件设置备份内容
创建备份目标目录, 安装Thin Backup插件, 找到备份管理页面Manage Jenkins->ThinBackUp,进入后选择Settings进行配置。构建的最大备份文件个数为-1表示不限制,备份中排除了build的结果。
mkdir /data/jenkins_backup
配置信息:
# 配置好了每天21:00执行一次
H 21 * * *# 特殊配置了备份时需要将凭证目录secrets下的所有文件进行备份,通过正则表达式
^(secrets|.*)$
2.2 rsync增量同步备份文件
使用rsync命令可以实现在每天jenkins完毕后,将当天新增的同步内容,增量同步到备份服务器上在master上切换到jenkins用户,执行rsync备份命令。
- 特殊说明:执行sshpass命令前先在CI服务器上执行一次rsync命令(仅需一次即可),只有这次执行通过后,后续再执行sshpass带密码才可使用。后续再执行sshpass前都无需单独再执行rsync命令。
sshpass -p ****** rsync -avz /data/jenkins_backup/ root@39.103.222.177:/data/jenkins_backup/
sshpass -p ****** rsync -avz /data/jenkins_backup/ root@39.103.182.34:/root/jenkins_backup/
2.3 脚本自动执行同步【重要】
将rsync做成脚本自动执行,比如jenkins配置的是每天22:31执行同步,那么rsync可以在每天22:35再自动执行登录到部署机上,执行如下操作。
vim /root/backup_jenkins.sh
# 在脚本内填入如下内容
sshpass -p ****** rsync -avz /data/jenkins_backup/root@39.103.182.34:/root/jenkins_backup/# 给脚本添加执行权限
chmod +x /root/backup_jenkins.sh# 添加到系统crontab文件中,切换到root用户
vim /etc/crontab
# 添加内容
35 22 * * * root /bin/bash /root/backup_jenkins.sh &>/dev/null
# 保存完后,重启contab
systemctl restart crond.service
3. 恢复备份文件
- 使用thinbackup插件,插件安装完毕后,重启jenkins ,然后登录找到hinBackup的配置,点击Settings,配置备份目录,然后恢复的时候就能从备份目录中,找到之前备份的那些文件了。
- 选择要恢复的备份文件,选择最新的备份文件,点击开始恢复
- 恢复过程页面是不会有恢复完成提示的,等待几分钟后,执行jenkins的重启链接即可