一、Jenkins 设置基于 ssh key 拉取代码

1.1 Jenkins 获取公钥

# Jenkins服务器生成密钥
root@jenkins-master:~# ssh-keygen
# 查看公钥
root@jenkins-master:~# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDgcESRqkOgXDIM6DyHs9ouyYYdLWBH0SsScMifVI/yoa39xeMUZPzu+DMPp43RJHN9rGyIXIYg3Fr5jeoQ2N4ko37a3MwF0F2oMAInZY5WVprvDY28P+bIEzp4lzr6pmsg5qUpG01vzIVkPzv/ItKwe1Gpfwfz7Hie8qrrorHkfFe/3T3u2xy8296c3tDJXqkutqsmDCPCH555pDCXB9P0N4DV23HDQGzHIfxzrVqk4GZoLNf0Qq8qohOOsMUIYcgJRfTfHrMH9SQZM749E6Z/Uw3/xK6yJs8gVn/kb7auVSDtH3xxUwfsYmNGBXaO3qddYv7FCHDT+lSn85GRmhGt root@jenkins-master

1.2 Gitlab 粘贴 Jenkins 公钥

在这里插入图片描述

1.3 测试 ssh key

# 实现免密码拉取代码
root@jenkins-master:~# git clone git@10.0.0.31:lcklck/app1.git
Cloning into 'app1'...
remote: Enumerating objects: 9, done.
remote: Counting objects: 100% (9/9), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 9 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (9/9), done.

二、配置 Jenkins 到 Gitlab 非交互拉取代码

2.1 在 Jenkins 添加 Jenkins 自身服务器私钥

选择一个项目,再选择配置
在这里插入图片描述
在这里插入图片描述
查看Jenkins服务器的私钥,然后粘贴到Jenkins上

root@jenkins-master:~# cat .ssh/id_rsa

在这里插入图片描述

2.2 配置 git 项目地址和用户

在这里插入图片描述
在这里插入图片描述

2.3 测试构建项目并将新代码推送到后端服务器

拉取 app1 下文件到 Jenkins 上(/var/lib/jenkins/workspace/python-app1/)
在这里插入图片描述

root@jenkins-master:~# ls /var/lib/jenkins/workspace/python-app1/
index.html

修改构建执行的代码
在这里插入图片描述
模拟代码修改

root@jenkins-master:/opt# git clone http://10.0.0.31/lcklck/app1.git
Cloning into 'app1'...
Username for 'http://10.0.0.31': root
Password for 'http://root@10.0.0.31':
remote: Enumerating objects: 9, done.
remote: Counting objects: 100% (9/9), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 9 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (9/9), done.
root@jenkins-master:/opt# vim /opt/app1/index.html
<h1>v111</h1>
<h1>v222</h1>
<h1>v333</h1>
root@jenkins-master:/opt# cd app1/
root@jenkins-master:/opt/app1# git config --global user.name laomao
root@jenkins-master:/opt/app1# git config --global user.email "laomao@qq.com"
root@jenkins-master:/opt/app1# git add .
root@jenkins-master:/opt/app1# git commit -m "v3 version"
[master 3f721f0] v3 version
 1 file changed, 1 insertion(+)
root@jenkins-master:/opt/app1# git push
Username for 'http://10.0.0.31': root
Password for 'http://root@10.0.0.31':
Counting objects: 3, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 294 bytes | 294.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To http://10.0.0.31/lcklck/app1.git
   1b55c84..3f721f0  master -> master

通过Jenkins点击立即构建,将代码部署至后端服务器
在这里插入图片描述
页面更新成功
在这里插入图片描述
进一步优化,Jenkins构建只执行shell脚本,bash命令放置到服务器,避免开发者去修改命令

root@jenkins-master:/opt/app1# mkdir /data/script/lck/python-app1_deploy.sh -p
root@jenkins-master:/opt/app1# chmod a+x /data/script/lck/python-app1_deploy.sh
root@jenkins-master:/opt/app1# vim /data/script/lck/python-app1_deploy.sh
#!/bin/bash
cd /var/lib/jenkins/workspace/python-app1/
tar czvf code.tar.gz ./index.html
scp code.tar.gz tomcat@10.0.0.37:/data/tomcat/tomcat_appdir/
scp code.tar.gz tomcat@10.0.0.38:/data/tomcat/tomcat_appdir/
scp code.tar.gz tomcat@10.0.0.39:/data/tomcat/tomcat_appdir/
ssh tomcat@10.0.0.37 "/etc/init.d/tomcat.sh stop && rm -rf /data/tomcat/tomcat_webapps/myapp/* && cd /data/tomcat/tomcat_appdir/ && tar xvf code.tar.gz -C /data/tomcat/tomcat_webapps/myapp/ && /etc/init.d/tomcat.sh start"
if [ $? = 0 ];then
    ssh tomcat@10.0.0.38 "/etc/init.d/tomcat.sh stop && rm -rf /data/tomcat/tomcat_webapps/myapp/* && cd /data/tomcat/tomcat_appdir/ && tar xvf code.tar.gz -C /data/tomcat/tomcat_webapps/myapp/ && /etc/init.d/tomcat.sh start"
    ssh tomcat@10.0.0.39 "/etc/init.d/tomcat.sh stop && rm -rf /data/tomcat/tomcat_webapps/myapp/* && cd /data/tomcat/tomcat_appdir/ && tar xvf code.tar.gz -C /data/tomcat/tomcat_webapps/myapp/ && /etc/init.d/tomcat.sh start"
else
    return 1
fi

在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐