实战一:基于Jenkins搭建触发器
构建触发器介绍
构建触发器( 有的人称为钩子 实际上是 一个HTTP回调其用于在开发人员向gitlab提交代码后能够触发jenkins自动执行代码构建操作。
以下为新建一个开发分支,只有在开发人员向开发 develop 分支提交代码的时候才会触发代码构建,而向主分支提交的代码不会自动构建,需要运维人员手动部署代码到生产环境。
1、在Gitlab创建develop分支
1、在Gitlab网页上创建的web1项目内创建一个develop分支
2、开始创建develop分支
2、在Jenkins上安装插件并进行配置
1、在jenkins网页的jenkins---->系统管理---->插件管理,进行安装gitlab相关插件。
2、修改jenkins登陆认证方式:系统管理---->全局安全配置,修改完成后,需要在linux系统上重启jenkins服务:systemctl restart jenkins,由于jenkins非常消耗内存,生产中最少8G起步。
注意事项:https://jenkins.io/security/advisory/2018-05-09/#SECURITY-263
- 认证改为登陆用户可以做任何事
- 取消跨站请求伪造保护
- Gitlab Hook Plugin 以纯文本形式存储和显示 GitLab API 令牌
3、在Jenkins网页上创建一个develop job项目,也可以使用之前的的linux-jobs项目,在jenkins主页--->New任务进行创建新的项目。
4、创建源代码管理,可伶gitlab主机的代码及develop分支
5、配置构件Jenkins触发器,生成自定义的token值
(1)先随机生成12位的随机数
[root@gitlab ~]# openssl rand -hex 12 046e1cb057bce8073a7eddca
(2)将生成的随机数填到jenkins指定的配置触发器,先设置一个测试的执行shell命令
6、此时过滤一下之前自定义的token值,就可以看到在指定的/var/lib/jenkins/jobs/linux-job1-develop/config.xml文件中存放
[root@jenkins ~]# grep 046e1cb057bce8073a7eddca /var/lib/jenkins/ -R grep: /var/lib/jenkins/jobs/linux-jobs/builds/lastUnstableBuild: No such file or directory grep: /var/lib/jenkins/jobs/linux-job1-develop/builds/lastSuccessfulBuild: No such file or directory grep: /var/lib/jenkins/jobs/linux-job1-develop/builds/lastStableBuild: No such file or directory grep: /var/lib/jenkins/jobs/linux-job1-develop/builds/lastFailedBuild: No such file or directory grep: /var/lib/jenkins/jobs/linux-job1-develop/builds/lastUnstableBuild: No such file or directory grep: /var/lib/jenkins/jobs/linux-job1-develop/builds/lastUnsuccessfulBuild: No such file or directory /var/lib/jenkins/jobs/linux-job1-develop/config.xml: <authToken>046e1cb057bce8073a7eddca</authToken>
7、在jenkins主机上执行命令测试,或者在网页上访问,然后在jenkins控制台查看job是否正常执行,此时是蓝色,说明正常运行,如果是红色,说明运行失败
[root@jenkins ~]# curl http://192.168.7.101:8080/job/linux-job1-develop/build?token=046e1cb057bce8073a7eddca
3、在gitlab网页上创建系统钩子
1、在gitlab网页上创建钩子
2、对创建的钩子进行测试,返回201,说明创建的系统钩子没问题
3、返回值为HTTP 201,说明正常
4、开始测试Jenkins在Gitlab拉取代码到后端服务器
1、先将jenkins拉取gitlab网站代码的shell脚本添加到 linux-job1-develop项目下,后端服务器是192.168.7.104,/data/tomcat/tomcat_appdir目录下存放的是压缩文件,/data/tomcat/tomcat_webdir/myapp目录下存放的问访问代码:
cd /var/lib/jenkins/workspace/linux-job1-develop tar cf code.tar.gz index.html scp code.tar.gz www@192.168.7.104:/data/tomcat/tomcat_appdir/ ssh www@192.168.7.104 "/apps/tomcat/bin/shutdown.sh && rm -rf /data/tomcat/tomcat_webdir/myapp/* && cd /data/tomcat/tomcat_appdir/ && tar xf code.tar.gz -C /data/tomcat/tomcat_webdir/myapp/" ssh www@192.168.7.104 "/apps/tomcat/bin/startup.sh"
2、先在gitlab主机上将develop分支的代码拉取下来进行修改,然后再传到gitlab仓库
[root@gitlab ~]# git clone -b develop http://192.168.7.100/linux_gitlab/web1.git # -b 指定要拉取代码的分支,克隆http的地址才能将代码提交,而克隆git代码是不能提交待gitlab仓库的 [root@gitlab web1]# cd web1/ # 切换到拉取代码的目录下 [root@gitlab web1]# cat index.html #将代码文件进行修改 linux web 192.168.7.100 linux web 192.168.7.100 [root@gitlab web1]# git config --global user.name "root" #第一次提交代码时,需要指定登陆用户名,后面提交可不需要登录 [root@gitlab web1]# git config --global user.email 974212253@qq.com # 第一次需要指定邮箱地址 [root@gitlab web1]# git add index.html # 添加代码 [root@gitlab web1]# git commit -m "v2" #将代码提交gitlab仓库上 [root@gitlab web1]# git push # 将代码上传待gitlab上 warning: push.default is unset; its implicit value is changing in Git 2.0 from 'matching' to 'simple'. To squelch this message and maintain the current behavior after the default changes, use: git config --global push.default matching To squelch this message and adopt the new behavior now, use: git config --global push.default simple See 'git help config' and search for 'push.default' for further information. (the 'simple' mode was introduced in Git 1.7.11. Use the similar mode 'current' instead of 'simple' if you sometimes use older versions of Git) Username for 'http://192.168.7.100': root Password for 'http://root@192.168.7.100': Counting objects: 5, done. Writing objects: 100% (3/3), 254 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) remote: remote: To create a merge request for develop, visit: remote: http://192.168.7.100/linux_gitlab/web1/merge_requests/new?merge_request%5Bsource_branch%5D=develop remote: To http://192.168.7.100/linux_gitlab/web1.git 429d346..1b28d52 develop -> develop # 一开始克隆的是develop分支,默认提交的就是develop分支
3、在gitlab网页上查看此时传到develop分支的代码信息
4、当我们将代码传待gitlab时,此时jenkins就会自动拉取gitlab网站上的代码,打开jenkins控制台,可以看到jenkins的shell脚本全部执行完毕
5、访问此时keepalived的VIP地址192.168.7.248/myapp,此时可以访问到jenkins拉取gitlab的代码内容
构建后项目关联(根据需求来操作)
用于多个job相互关联,需要执行多个job的场景,例如以下:将linux-job1-develop当做测试环境,linux-jobs当做是生产环境,当测试环境执行成功之后,直接就会拉取代码到生产环境中
1、配置构建后的操作,当linux-job1-develop项目执行完毕后,就会执行添加的linx-jobs项目,且执行的命令都会发送到自己添加的邮箱中。
2、开始测试效果,当执行了linux-job1-develop项目成功之后,就会自定构建linux-jobs项目
3、此时访问后端服务器网页:192.168.7.248/myapp,访问的就是linux-jobs拉取的代码内容
Jenkins分布式
1、Jenkins分布式介绍
在众多Job的场景下,单台 jenkins master同时执行代码clone、编译、打包及构建其性能可能会出现瓶颈从而会影响代码部署效率,官方提供了jenkins分布式构建,将众多job分散运行到不同的jenkins slave节点,大幅提高并行job的处理能力。
2、安装部署jenkins-slave服务器
1、安装并配置jenkins服务:详情见:https://www.cnblogs.com/struggle-1216/p/12387377.html
Jenkins官方下载地址:https://jenkins.io/zh/
官方下载JDK地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
[root@jenkins-slave src]# yum install jenkins-2.164.3-1.1.noarch.rpm -y # vim /etc/sysconfig/jenkins # 修改jenkins配置文件 JENKINS_USER="root" #将jenkins以root身份启动 JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -server -Xms1g -Xmx1g -Xss512k -Xmn1g -XX:CMSInitiatingOccupancyFraction=65 -XX:+UseFastAccessorMethods -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=10 -XX:NewSize=2048M -XX:MaxNewSize=2048M -XX:NewRatio=2 -XX:PermSize=128m -XX:MaxPermSize=512m -XX:CMSFullGCsBeforeCompaction=5 -XX:+ExplicitGCInvokesConcurrent -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -Djava.awt.headless=true -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname="192.168.7.103"" #写入本机的I地址
2、启动jenkins-slave服务
[root@jenkins-slave ~]# systemctl start jenkins
3、开始访问jenkins-slave网页进行初始化的操作配置:192.168.7.103:8080,创建一个登陆jenkins登陆账号,具体安装部署步骤见:https://www.cnblogs.com/struggle-1216/p/12387377.html
3、配置JAVA的jenkins-slave节点的java环境
1、配置 Jenkins-slave节点java环境
(1)Slave 服务器创建工作目录 如果slave需要执行编译job,则也需要配置java环境并且安装 git、svn、maven 等 与 master 相同的基础运行环境,另外也要创建 与 master 相同的数据目录,因为脚本中调用的路径只有相对一 master 的一个路径,此路径在master 与各 node 节点必须保持一致。
[root@jenkins-slave ~]# mkdir /var/lib/jenkins -p # 在jenkins从服务器上创建和主服务器拉取代码目录一致 [root@jenkins src]# scp jdk-8u212-linux-x64.tar.gz 192.168.7.103:/usr/local/src #将主jenkins服务器的JDK文件传到从服务器上 [root@jenkins-slave src]# tar xvf jdk-8u212-linux-x64.tar.gz # 在jenkins从服务器上将JDK包解压 [root@jenkins-slave src]# ln -sv /usr/local/src/jdk1.8.0_212/ /usr/local/jdk # 在从服务器上对JDK创建软链接 ‘/usr/local/jdk’ -> ‘/usr/local/src/jdk1.8.0_212/’ [root@jenkins-slave src]# ln -sv /usr/local/jdk/bin/java /usr/bin/java # 将java执行程序也创建一个软链接,否则jenkins无法启动
(2)定义JAVA环境变量/etc/profile
export HISTTIMEFORMAT="%F %T `whoami`" export export LANG="en_US.utf-8" export JAVA_HOME=/usr/local/jdk export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin [root@jenkins-slave src]# . /etc/profile # 使环境变量生效 [root@jenkins-slave src]# java -version # 查看此时的JAVA版本,能运行java命令即可 java version "1.8.0_212" Java(TM) SE Runtime Environment (build 1.8.0_212-b10) Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
4、开始添加jenkins-slave节点
1、在jenkins--->系统管理--->节点管理---->新建节点,创建一个jenkins-node1名称
2、添加jenkins-slave信息
3、添加jenkins的凭证提供者
5、jenkins-slave主机的最终信息
6、查看jenkins-node1节点的日志,此时可以看到slave节点的jenkins已经正常运行了。
7、查看slave同步状态,已经同步正常
8、解决jenkins-slave运行的日志未发现java目录问题,在jenkins-slave机器上创建目录
[root@jenkins-slave ~]# mkdir /var/lib/jenkins/jdk/bin -p # 创建一个目录 [root@jenkins-slave ~]# ln -s /usr/local/jdk/bin/java /var/lib/jenkins/jdk/bin # 将存放java的文件目录创建软链接指向新建的目录即可
9、此时再次看jenkins-node1日志,此处找不到目录就已经解决了。
10、如果再想添加一个新的node节点,只需要复制jenkins-node1的模板即可,在里边修改IP地址和名称等信息即可,在这里就不再演示了。