jenkins
- jenkins是一款CI工具
- jenkins基于java:java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64
- 下载:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/
[root@localhost ~] wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.222.1-1.1.noarch.rpm
[root@localhost ~] rpm -ihv jenkins-2.222.1-1.1.noarch.rpm
[root@localhost ~] systemctl start jenkins
[root@localhost ~] systemctl enable jenkins
- 配置:
http://192.168.113.134:8080 -> 输入解钥密码 -> 选择插件来安装 -> 点击“无”,然后“安装” -> 右下角“使用admin账户继续” -> 保存并完成 -> 开始使用jenkins
- 修改admin密码。右上角admin -> configure -> password -> save
安装插件
# 在jenkins服务器上修改安装插件所用的服务器
[root@localhost ~] ls /var/lib/jenkins/updates/default.json
[root@localhost ~] sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /var/lib/jenkins/updates/default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' /var/lib/jenkins/updates/default.json
[root@localhost ~] systemctl restart jenkins
访问:http://192.168.113.134:8080/ -> Manage Jenkins -> Manage Plugins -> Available选项卡,按ctrl+f进行搜索并勾选Git Parameter / Localization Chinese(Simplified) / Dingtalk / Gitlab -> 点击Install without restart -> 勾选Restart Jenkins when installation is complete and no jobs are running
如果/var/lib/jenkins/updates/default.json不存在,可以 Manage Jenkins -> Manage Plugins -> Advanced选项卡 -> Update site : https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json -> 点击submit提交。
jenkins应用
1)在gitlab上拉取代码
# 在jenkins服务器上安装git
[root@localhost ~] yum install -y git
首页 -> 新建Item -> myweb / Freestyle project -> 确定 -> 源码管理 => git / Repository URL: http://192.168.113.135/devops/myweb.git -> 保存
# 在jenkins服务器上查看代码目录
[root@localhost ~] ls /var/lib/jenkins/workspace
ls: 无法访问/var/lib/jenkins/workspace: 没有那个文件或目录
点击项目页面左边栏的Build Now -> Build History 下面的#1 -> 左边栏的控制台输
出
# 在jenkins服务器上查看代码目录
[root@localhost ~] ls /var/lib/jenkins/workspace
myweb
2)配置钉钉机器人发送消息
项目构建过程中,可以将整个构建过程通过钉钉机器人发送消息。
首页 -> Manage Jenkins -> Configure System -> 钉钉配置 -> 新增机器人 -> 输>入名字、webhook地址以及关键字 -> 点击测试 -> 成功后保存
钉钉web登陆地址:https://im.dingtalk.com/
3)修改myweb项目
首页 -> 点击项目 - > 左边栏 配置 -> 勾选机器人 -> 保存
构建项目时,构建过程将会通过钉钉机器人发送消息
4)推送代码时自动构建项目
修改jenkins项目配置 -> 构建触发器 -> 勾选Build when a change is pushed to GitLab. GitLab webhook URL: http://192.168.113.134:8080/project/myweb -> 点>击 高级 -> 点击generate生成Secret token并复制它 -> 保存
修改gitlab配置 -> 点击项目,如myweb -> 左边栏 设置 / 集成 -> 链接url http://192.168.113.134:8080/project/myweb / 安全令牌填写jenkins中生成的Secret token -> 点击增加web钩子。在页面中间部分找到创建的web钩子,点击test -> Push events测试,返回Hook executed successfully: HTTP 200表示成功。
5)完整过程测试:
# 在jenkins服务器上删除构建目录
[root@localhost ~] rm -rf /var/lib/jenkins/workspace/*
# 程序员推送代码
[root@localhost myprojects] cd myweb/
[root@localhost myweb] echo '<p>tedu nsd1910</p>' >> index.html
[root@localhost myweb] git add .
[root@localhost myweb] git commit -m "modify index.html"
[root@localhost myweb] git push
程序员推送代码到gitlab服务器后,jenkins项目将会自动构建,并通过钉钉机器人发
送构建消息。
[root@localhost ~] ls /var/lib/jenkins/workspace/
myweb
[root@localhost ~] ls /var/lib/jenkins/workspace/myweb/
index.html issue login.defs README.md
[root@localhost ~] cat /var/lib/jenkins/workspace/myweb/index.html
使用参数构建
1)配置jenkins通过tag标签构建
首页 -> 新建Item -> 名字myweb2 / Freestyle project -> 勾选This project is parameterized参数化构建 => 添加参数 => Git Parameter (Git参数) => Name: webver / Parameter Type: Branch or Tag / Default Value / origin/master -> 源码>管理 => Git => Repositories => Repository url: http://192.168.113.135/devops/myweb.git / Branches to build: $webver -> 保存
构建测试
点击 Build with Parameters -> 选择版本 -> 开始构建
修改项目,检出代码到不同的子目录
# 删除jenkins服务器上的代码目录
[root@localhost ~]# rm -rf /var/lib/jenkins/workspace/myweb2/
在jenkins的web页面上点击配置 -> 在源码管理下面找到Addtional Behaviours -> >新增 -> Checkout to a sub-directory: myweb-$webver -> 保存
构建测试:构建两次,每次使用不同版本
点击 Build with Parameters -> 选择版本 -> 开始构建
[root@localhost ~]# ls /var/lib/jenkins/workspace/myweb2/
myweb-1.0 myweb-2.0
)2修改项目,实现代码打包
- jenkins服务器通过http协议共享打包后的软件
- jenkins服务器发布当前软件版本和前一版本
- 计算压缩包的md5值
# 在jenkins服务器上安装httpd
[root@localhost ~] yum install -y httpd
[root@localhost ~] systemctl start httpd
[root@localhost ~] systemctl enable httpd
# /var/www/html/deploy/live_ver:保存当前版本号
# /var/www/html/deploy/last_ver:保存前一版本的版本号
# /var/www/html/deploy/pkgs:保存软件的压缩包和它的md5值
[root@localhost ~] mkdir -p /var/www/html/deploy/pkgs
[root@localhost ~] chown -R jenkins:jenkins /var/www/html/deploy/
myweb2项目 -> 配置 -> 构建 -> 增加构建项目 -> Execute shell
pkgs_dir=/var/www/html/deploy/pkgs
# 将下载目录拷贝到web服务器目录
cp -r myweb-$webver $pkgs_dir
cd $pkgs_dir
rm -rf myweb-$webver/.git # 删除不必要的版本库文件
# 打包
tar czf myweb-$webver.tar.gz myweb-$webver
rm -rf myweb-$webver # 删除软件目录
# 计算压缩包的md5值
md5sum myweb-$webver.tar.gz | awk '{print $1}' > myweb-$webver.tar.gz.md5
cd ..
# 将live_ver的版本号写到last_ver中
[ -f live_ver ] && cat live_ver > last_ver
echo -n $webver > live_ver # 将最新版本号写入live_ver
构建测试
点击 Build with Parameters -> 选择版本 -> 开始构建
访问http://jenkins服务器ip/deploy
部署软件到应用服务器
1)在web服务器上部署代码
- 下载相应版本的软件包
- 校验下载的软件包是否损坏
- 解压软件包
- 部署软件包到web服务器的文档目录
[root@localhost ~] yum install -y httpd
[root@localhost ~] systemctl start httpd
[root@localhost ~] systemctl enable httpd
[root@localhost ~] mkdir /var/www/{download,deploy}
2)完整测试
# 程序员编写新版本代码
[root@db1 myprojects] cd myweb/
[root@db1 myweb] vim index.html # 加入以下内容
<img src="http://n.sinaimg.cn/ent/4_img/upload/a57892fc/320/w2048h3072/20200330/a973-irpunah3610847.jpg">
[root@db1 myweb] git add .
[root@db1 myweb] git commit -m "my web 3.0"
[root@db1 myweb] git tag 3.0
[root@db1 myweb] git push
[root@db1 myweb] git push --tags
# 在jenkins上重新构建3.0
# jenkins项目构建完成后,在web服务器上运行部署脚本
[root@localhost ~] python3 deploy.py