一、Jenkins发布与回滚
Jenkins的回滚有两种方式
1、通过git来回滚
Git 可以通过代码提交的ID号(前12位),就可以回到之前的状态(注意:需要安装gogs插件)
流程图:发布过程与回滚过程
重新配置上次的 web-job 项目
设置构建历史保留数量(general => 丢弃旧的构建),这里设置为保留最近20个
设置参数化构建过程
设置构建脚本该脚本是确认是否回滚,如果回滚的话调用回滚命令
#注意脚本的大小写
——————————————————————
case $status in
Rollback)
echo "-----本次操作为回滚,版本号为$version-----"
git reset --hard $version
echo "-----回滚完成,打包中-----"
;;
*)
exit
esa
scp /var/lib/jenkins/workspace/web-job/index.html root@192.168.2.16:/var/www/html
配置完成 保存 应用
在gitlab上新建一个index.html
开始构建
构建成功 访问测试:192.168.2.16
进行回滚操作,回滚时,去gitlab上查看commit_id
回滚完成,再次进行访问测试:192.168.2.16
2、通过发布时备份,回滚时选定备份文件进行回滚
流程图:发布与回滚流程(注意:该方法会比较耗磁盘存储,因为要备份)
使用上次的 web-job 项目进行配置
2.1、配置
case $status in
Deploy)
echo "-----发布前进行打包备份-----"
echo "status:$status"
BACK_DIR=/var/lib/jenkins/workspace
path="${BACK_DIR}/bak"
if [ -d $path ];
then
echo "The files is already exists "
else
mkdir -p $path
fi
cd ${BACK_DIR}/${JOB_NAME}
#${JOB_NAME}=项目名称(test)
#${BUILD_NUMBER}=第几次构建
tar czf ${JOB_NAME}-${BUILD_NUMBER}.tar.gz *
mv ${JOB_NAME}-${BUILD_NUMBER}.tar.gz ${BACK_DIR}/bak
scp ${WORKSPACE}/* root@192.168.2.16:/var/www/html/
echo "Completin!"
;;
Rollback)
BACK_DIR=/var/lib/jenkins/workspace
cd ${BACK_DIR}/bak
tar xf ${JOB_NAME}-${version}.tar.gz
scp ${BACK_DIR}/bak/index.html root@192.168.2.16:/var/www/html/
rm -rf ${JOB_NAME}
;;
*)
exit
;;
esac #注意修改地址或路径
设置完成 >> 应用 >>完成
先进行发布
发布前准备
[root@jenkins aaa]# git clone git@192.168.2.14:zs/web.git
[root@jenkins aaa]# cd web
[root@jenkins web]# git rm -rf test1
......
[root@jenkins web]# git add .
[root@jenkins web]# git commit -m "删除文件夹 "
.....
[root@jenkins web]# git push -u origin main
进行发布
[root@jenkins ~]# cd /var/lib/jenkins/workspace/bak #在此路径中可以查看备份的文件,回滚会使用这里备份的文件
[root@jenkins bak]# ls
web-job-65.tar.gz
在此在修改index.html文件在进行发布
中间发布过程省略(同之前的发布)
进行回滚
进行访问
二、Jenkins邮箱报警
1.、配置邮件报警
给 admin 设置一个邮箱
测试完成会发送一个邮件
测试完成 >>应用 >>保存
Disable Extended Email Publisher:勾选后,邮件就不发送,看自己的情况喽,如果你想调试某些东西,又不想发邮件出去就可以勾选这个
Project Recipient List:收件人地址;多个收件人邮件地址用逗号进行分割;想使用全局默认配置的话,可以使用$DEFAULT_RECIPIENTS
Project Reply-To List:允许回复人的地址;想使用系统设置中的默认值的话,可以使用$DEFAULT_REPLYTO
Content Type:邮件文档的类型,可以设置HTML等格式
Default Subject:默认主题,也就是邮件标题;同理可以使用$DEFAULT_SUBJECT
Default Content:默认邮件内容;这里是关键
Attach Build Log:发送的邮件是否包含日志
保存前修改一下脚本;正常发布是没有邮件的,修改完后保存
三、Jenkins远程管理部署节点
Jenkins的远程管理方式有:Shell shh、SSH Plugin、Ansible、Saltstack
1、Shell shh
在项目构建时,jenkins使用了Execute Shell直接对远程主机操作
如图
2.、SSH Plugin
用SSH 的插件 SSH、publish over ssh
系统管理 >> 系统配置 >> SSH remote hosts,配置好远程主机
测试成功后保存
3、publish over ssh
系统管理 >> 系统配置 >>
设置完成后保存
先进行访问
修改index.html文件
再次访问
4、Ansible
安装ansible
下载ansible:ansible.rar-其它文档类资源-CSDN下载
[root@jenkins ~]# vim /etc/yum.repos.d/centOS7.repo
.......
[ansible]
name=ansible
baseurl=file:///root/ansible
enabled=1
gpgcheck=0
保存
[root@jenkins ~]# yum -y install ansible
....
[root@jenkins ~]# vim /etc/ansible/hosts
........... 添加到最后
...
[client]
192.168.2.16
保存
注意:如果没有做免登,需要免登做,从安装Ansible的那台机器往15和16做免登
[root@jenkins ~]# ansible client -m ping #查看是否可以通信
192.168.2.16 | SUCCESS => {
"changed": false,
"ping": "pong"
}
新建一个测试的ansible-playbook
[root@jenkins ~]# mkdir -p /data/Ansible-playbook
[root@jenkins ~]# vim /data/Ansible-playbook/jenkins-mkdir.yml
---
- hosts: client
gather_facts: no
tasks:
- name: 创建alex目录
file: path=/data/alex state=directory
保存
需要安装插件: Ansible、Ansible Tower
新建一个项目
保存完成后进行构建
在Apache上查看
[root@Apache data]# ls
alex
问题:jenkins如何远程管理 节点1、节点2、节点3?
1、ssh(在服务器上做免登)
2、在jenkins服务器上安装ssh插件
3、在jenkins服务器上安装ansible或saltstack插件,实现远程管理
5、jenkins集群
jenkins作为一款实用且广泛实用的CI/CD工具,为大多数中小公司拿来即用。可当我们的业务和工程逐渐增多,它在构建和自动化任务方面的压力也越来越大
1、jenkins单节点的压力大
2、jenkins缺乏自动扩缩容,需要容器化部署
3、需要支持多环境的发布场景,把开发环境和测试环境集成在一个jenkins集群
4、管理Job不够灵活
需要安装 ssh、ssh agent、ssh build agents 插件
同步时间
[root@node1 ~]# yum -y install ntpdate
.....
[root@node1 ~]# ntpdate 192.168.2.14
16 Feb 22:02:51 ntpdate[5898]: step time server 192.168.2.14 offset -28799.374101 sec
安装JDK
[root@node1 ~]# tar zxvf jdk-8u202-linux-x64.tar.gz
[root@node1 ~]# mv jdk1.8.0_202 /usr/local/java/
[root@node1 ~]# vim /etc/profile
....
...... 最后添加
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPAT
保存
[root@node1 ~]# source /etc/profile
[root@node1 ~]# java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
安装Maven:
[root@node1 ~]# tar xf apache-maven-3.8.4-bin.tar.gz
[root@node1 ~]# mv apache-maven-3.8.4 maven
[root@node1 ~]# ln -s /root/maven/bin/mvn /usr/bin/mvn
[root@node1 ~]# vim /etc/profile
....在最后加入内容
..
export MAVEN_HOME=/root/maven
export PATH=$PATH:$MAVEN_HOME/bin
保存
[root@node1 ~]# source /etc/profile
在jenkins的web界面:系统管理 >> Configure Global Security-->TCP port for JNLP agent配置端口30000
添加节点
输入2.12的root密码
分配任务到节点
注意: 如果要运行脚本及Ansible,需要在node1服务器上进行创建脚本或安装Ansible服务
构建完成