官网 jenkins.io
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
1.安装准备
装备1台服务器 关闭selinux和防火墙
内存2G 50G+硬盘
jenkins 10.0.0.101
2.安装JDK运行环境和jenkins服务
上传JDK和jenkins rpm安装包,使用rpm ‐ivh进行安装,安装完JDK运行java测试是否安装成功
rpm ‐ivh jdk‐8u181‐linux‐x64.rpm
rpm ‐ivh jenkins‐2.99‐1.1.noarch.rp
3.配置jenkins
启动用户修改为root
JENKINS_USER="root"
[root@CentOS7 ~]# systemctl start jenkins
[root@CentOS7 ~]# systemctl enable jenkins
ps:启动Jenkins时,默认启动方式在配置文件中是Jenkins普通用户身份,本次测试环境在内网使用,不使用普通用户,则需要改为root用户。
[root@Jenkins ~]rpm -ql jenkins
/etc/init.d/jenkins
/etc/logrotate.d/jenkins
/etc/sysconfig/jenkins
/usr/lib/jenkins
/usr/lib/jenkins/jenkins.war
/usr/sbin/rcjenkins
/var/cache/jenkins
/var/lib/jenkins
/var/log/jenkins
[root@Jenkins ~]vim /etc/sysconfig/jenkins
[root@Jenkins ~]netstat -tnulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1145/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1236/master
tcp6 0 0 :::8080 :::* LISTEN 16717/java
tcp6 0 0 :::22 :::* LISTEN 1145/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1236/master
[root@Jenkins ~]systemctl enable jenkins
jenkins.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig jenkins on
访问页面进行配置
http://10.0.0.101:8080
4.插件安装(跳过安装插件,直接上传插件到目录)、修改登录密码及使用
1.自动安装可选插件
2.手动下载插件上传安装
3.插件放入插件目录
[root@Jenkins ~]cd /var/lib/jenkins/
[root@Jenkins jenkins]ll #jobs为每次构建后构建的结果目录,plugins为插件目录
总用量 36
-rw-r--r-- 1 root root 1644 11月 28 21:02 config.xml
-rw-r--r-- 1 root root 156 11月 28 20:50 hudson.model.UpdateCenter.xml
-rw------- 1 root root 1712 11月 28 20:50 identity.key.enc
-rw-r--r-- 1 root root 7 11月 28 21:02 jenkins.install.InstallUtil.lastExecVersion
-rw-r--r-- 1 root root 7 11月 28 21:02 jenkins.install.UpgradeWizard.state
-rw-r--r-- 1 root root 171 11月 28 20:50 jenkins.telemetry.Correlator.xml
drwxr-xr-x 2 root root 6 11月 28 20:50 jobs
drwxr-xr-x 3 root root 19 11月 28 20:50 logs
-rw-r--r-- 1 root root 907 11月 28 20:50 nodeMonitors.xml
drwxr-xr-x 2 root root 6 11月 28 20:50 nodes
drwxr-xr-x 2 root root 6 11月 28 20:50 plugins
-rw-r--r-- 1 root root 64 11月 28 20:50 secret.key
-rw-r--r-- 1 root root 0 11月 28 20:50 secret.key.not-so-secret
drwx------ 4 root root 4096 11月 28 20:54 secrets
drwxr-xr-x 2 root root 67 11月 28 20:56 updates
drwxr-xr-x 2 root root 24 11月 28 20:50 userContent
drwxr-xr-x 3 root root 55 11月 28 20:50 users
上传插件包解压到plugins下执行重启 systemctl restart jenkins
4.jenkins主要的目录
/usr/lib/jenkins/:jenkins安装目录,WAR包会放在这里
/etc/sysconfig/jenkins:jenkins配置文件,“端口”,“JENKINS_HOME”等都可以在这里配置
/var/lib/jenkins/:默认的JENKINS_HOME
/var/log/jenkins/jenkins.log:Jenkins日志文件
5.创建一个自由风格的项目freestyle‐job
丢失旧的构建
6.jenkins获取git源码,这里我们由码云导入一个HTML页面的监控平台到gitlab仓库
jenkins端配置从git获取代码,由于我们dev用户是配置在jenkins上,所以无需认证即可下载代码
7.执行立即构建获取到代码
此时代码被拉到Jenkins服务器本地中
[root@Jenkins ~]cd /var/lib/jenkins/workspace/freestyle_job
[root@Jenkins freestyle_job]ll
总用量 1364
-rw-r--r-- 1 root root 1208 11月 29 14:52 404.html
-rw-r--r-- 1 root root 27249 11月 29 14:52 alerts.html
drwxr-xr-x 5 root root 64 11月 29 14:52 assets
-rw-r--r-- 1 root root 34972 11月 29 14:52 buttons.html
-rw-r--r-- 1 root root 38472 11月 29 14:52 calendar.html
-rw-r--r-- 1 root root 36402 11月 29 14:52 charts.html
-rw-r--r-- 1 root root 87824 11月 29 14:52 components.html
-rw-r--r-- 1 root root 68329 11月 29 14:52 content-widgets.html
drwxr-xr-x 2 root root 4096 11月 29 14:52 css
-rw-r--r-- 1 root root 24976 11月 29 14:52 deviceManager.html
-rw-r--r-- 1 root root 34930 11月 29 14:52 dianfei.html
-rw-r--r-- 1 root root 33003 11月 29 14:52 efficiencyAnalysis.html
-rw-r--r-- 1 root root 27158 11月 29 14:52 energy_consumption.html
-rw-r--r-- 1 root root 25419 11月 29 14:52 file-manager.html
drwxr-xr-x 6 root root 240 11月 29 14:52 fonts
-rw-r--r-- 1 root root 62928 11月 29 14:52 form-components.html
-rw-r--r-- 1 root root 33233 11月 29 14:52 form-elements.html
-rw-r--r-- 1 root root 40152 11月 29 14:52 form-examples.html
-rw-r--r-- 1 root root 48175 11月 29 14:52 form-validation.html
-rw-r--r-- 1 root root 78059 11月 29 14:52 images-icons.html
drwxr-xr-x 16 root root 4096 11月 29 14:52 img
-rw-r--r-- 1 root root 68654 11月 29 14:52 index.html
drwxr-xr-x 8 root root 4096 11月 29 14:52 js
-rw-r--r-- 1 root root 56647 11月 29 14:52 keyInfo.html
w-r--r-- 1 root root 25676 11月 29 14:52 labels.html
-rw-r--r-- 1 root root 18041 11月 29 14:52 LICENSE
-rw-r--r-- 1 root root 38366 11月 29 14:52 list-view.html
-rw-r--r-- 1 root root 4155 11月 29 14:52 login.html
drwxr-xr-x 2 root root 35 11月 29 14:52 media
-rw-r--r-- 1 root root 32897 11月 29 14:52 media.html
-rw-r--r-- 1 root root 40070 11月 29 14:52 messages.html
-rw-r--r-- 1 root root 335 11月 29 14:52 mstp_105_SuperAdmin.iml
-rw-r--r-- 1 root root 29295 11月 29 14:52 mstp_map.html
-rw-r--r-- 1 root root 41855 11月 29 14:52 other-components.html
-rw-r--r-- 1 root root 51611 11月 29 14:52 profile-page.html
-rw-r--r-- 1 root root 335 11月 29 14:52 QHME.iml
-rw-r--r-- 1 root root 843 11月 29 14:52 readme.md
-rw-r--r-- 1 root root 33594 11月 29 14:52 real-time.html
-rw-r--r-- 1 root root 58365 11月 29 14:52 sa.html
-rw-r--r-- 1 root root 24713 11月 29 14:52 tables.html
-rw-r--r-- 1 root root 41609 11月 29 14:52 typography.html
-rw-r--r-- 1 root root 22720 11月 29 14:52 userMng.html
8.写一个脚本把从git仓库里获取的代码上传到web服务器站点目录下
[root@Jenkins ~]mkdir /server/scripts -p
[root@Jenkins ~]cd /server/scripts
[root@Jenkins scripts]vim deploy.sh
#!/bin/sh
DATE=$(date +%Y-%m-%d-%H-%M-%S)
CODE_DIR="/var/lib/jenkins/workspace/freestyle_job"
WEB_DIR="/usr/share/nginx/"
get_code_tar(){
cd $CODE_DIR && tar zcf /opt/web-${DATE}.tar.gz ./*
}
scp_code_web(){
scp /opt/web-${DATE}.tar.gz 10.0.0.20:$WEB_DIR
}
code_tarxf(){
ssh 10.0.0.20 "cd $WEB_DIR &&mkdir web-${DATE} && tar xf web-${DATE}.tar.gz -C web-${DATE}"
}
ln_html(){
ssh 10.0.0.20 "cd $WEB_DIR && rm -rf html && ln -s web-${DATE} html && rm -rf web-${DATE}.tar.gz"
}
main(){
get_code_tar;
scp_code_web;
code_tarxf;
ln_html;
}
main
9.使用jenkins调用部署脚本(此处写脚本全路径脚本名称)测试
执行脚本需要Jenkins10.0.0.101远程连接web10.0.0.20,故需要与web服务器做免密码认证
[root@Jenkins ~]ssh-copy-id -i .ssh/id_rsa.pub 10.0.0.20
在Jenkins中立即构建,显示执行成功此时访问10.0.0.20web服务器,页面访问如下,即Jenkins成功将代码推送到web服务器中。
10.配置自动触发构建、需要设置安全令牌Secret token
11.克隆代码到master上更改代码后进行推送测试是否自动触发
[root@Gitlab ~]git clone git@10.0.0.100:test/monitor.git
[root@Gitlab ~]ll
总用量 4
drwxr-xr-x 3 root root 34 11月 28 15:03 git_data
drwxr-xr-x 9 root root 4096 11月 29 20:51 monitor
[root@Gitlab ~]cd monitor/
[root@Gitlab monitor]vim index.html
[root@Gitlab monitor]git add .
[root@Gitlab monitor]git commit -m "modify index.html v1.1"
[root@Gitlab monitor]git push -u origin master
克隆并更改代码进行推送,刷新web发现代码更改信息已成功,即自动化构建配置完成。12.配置jenkins返回构建状态到gitlab
系统管理‐系统设置选项下进行认证配置进入gitlab点击用户设置找到访问令牌Access Tokens
5.jenkins集成微信
工作中档git有新代码提交会触发钩子自动完成上线,运维和开发人员不须时刻盯着jenkins,通过微信的方式显示给运维和开发人员
①. 注册微信企业公众号
搜索微信公众平台->注册->选择企业微信注册成功登陆后点击应用管理->创建应用
更改py脚本内对应的内容-touser为账号名称
[root@Jenkins freestyle_job]cd /server/scripts/
[root@Jenkins scripts]# ll
总用量 4
-rw-r--r-- 1 root root 611 11月 29 20:11 deploy.sh
[root@Jenkins scripts]rz -E
rz waiting to receive.
[root@Jenkins scripts]ll
总用量 8
-rw-r--r-- 1 root root 611 11月 29 20:11 deploy.sh
-rw-r--r-- 1 root root 2008 11月 17 18:49 jenkins_notify.py
[root@Jenkins scripts]# vim jenkins_notify.py
配置jenkins
1.由于jenkins没有官网的插件来完成此功能,所以我们只能用网络上一些开源的插件(已集合在plugins)
github下载代码
https://github.com/daniel-beck/changelog-environment-plugin
解压到某个目录-》进入目录执行以下操作
cd 到 changelog-environment-plugin-master 下,执行
mvn verify
时间较长,会在changelog-environment-plugin-master/target/下有个changelog-environment.hpi文件,上传到
jenkins即可使用
2.配置jenkins
jenkins进入到项目中->构建环境多了Add Changelog Information to Environment->点击选择
构建后操作选择Post build task (需要安装插件,之前已经安装好了)如果没有此选择请安装Hudson Post build task 插件,SCM_CHANGELOG须安装changelog插件,上传py脚本->jenkins服务器上安装python requests模块
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install python-pip
pip2.7 install requests
echo {JOB_NAME}_change.log
python /server/scripts/jenkins_notify.py {JOB_NAME}_change.log {JOB_NAME}_change.log
[root@Jenkins scripts]# yum -y install python-pi
[root@Jenkins scripts]# pip2.7 install requests
6.参数化构建,通过tag传递参数达到发布和代码回滚的操作
接下来测试一下设置的变量,执行的界面自动变成参数化执行
注: 接下来安装插件、在可选插件中搜索Git Parameter 直接安装即可,已安装则忽略次步骤
进入到项目把前面的参数化去掉重新选择使用git parameter
下一步把git拉取代码的master更改为$git_version变量
添加两个参数选项变量deploy和rollback选项
下一步修改脚本的传参
[root@Jenkins scripts]# cat deploy.sh
!/bin/sh
DATE=WORKSPACE
WEB_DIR="/usr/share/nginx/"
get_code_tar(){
cd {DATE}.tar.gz ./*
}
scp_code_web(){
scp /opt/web-WEB_DIR
}
code_tarxf(){
ssh 10.0.0.20 "cd {DATE} && tar xf web-{DATE}"
}
ln_html(){
ssh 10.0.0.20 "cd {DATE} html && rm -rf web-${DATE}.tar.gz"
}
main(){
get_code_tar;
scp_code_web;
code_tarxf;
ln_html;
}
if [ deploy_env == "rollback" ];then
ln_html
fi
当重复执行构建后会生成多个相同版本的文件,利用jenkins变量值解决重复性构建问题
jenkins变量
- GIT_COMMIT 当前版本提交产生的哈希唯一值
- GIT_PREVIOUS_SUCCESSFUL_COMMIT 已经提交过的版本的哈希唯一值
使用以上两个值做比较,如果已提交则退出,如果没有提交过则继续执行构建,更改脚本做判断
if [ $deploy_env == "deploy" ];then
if [ $GIT_COMMIT == "$GIT_PREVIOUS_SUCCESSFUL_COMMIT" ];then
echo "$git_version 此版本已经提交 禁止重复构建"
else
main
fi
elif
[ $deploy_env == "rollback" ];then
ln_html
fi