配置 Jenkins 自动拉取 gitlab 中的代码并部署
在自动化部署这件事上,Jenkins和GitLab的配合几乎是标配了。今天咱们就来走一遍完整的流程,从插件安装到代码自动触发部署,一步步把这条流水线搭起来。整个过程不算复杂,但有几个容易踩坑的细节,需要特别留意。1、安装插件
工欲善其事,必先利其器。在开始配置之前,需要提前准备好几个关键插件:Credentials Plugin(默认已经安装) #签名证书管理插件 Gitlab Plugin #拉取 gitlab 中的源代码 SSH Plugin #这个插件使用 SSH 协议远程执行 shell 命令。找到对应的插件,勾选上就行。



2、设置 gitlab 用户 root 可以通过 ssh 公钥直接下载代码
接下来是关键的一步:配置SSH密钥。目标是让Jenkins所在的机器能以root身份免密拉取GitLab仓库的代码,这是后续所有自动化操作的基础。 在GitLab服务器上生成公钥,一路回车,不要输入密码:ssh-keygen然后查看公钥内容:
cat .ssh/id_rsa.pub




git clone git@172.16.251.6:jcpt/wryjc.git如果不需要输入密码就能成功克隆,说明配置生效了。

3、jenkins添加git用户root的私钥
公钥已经给GitLab了,那私钥自然要放在Jenkins这边,这样它才能用这把“钥匙”去开门。 先查看私钥内容:cat .ssh/id_rsa然后,在Jenkins的“凭据”管理里,添加一个新的“SSH用户名和私钥”类型的凭据,把刚才的私钥内容粘贴进去。



root 公钥在 gitlab,root 私钥在 jenkins,这样 jenkins 就可以直接拉取 gitlab 上的代码
这个配对关系理清了,后面的路就顺了。
4、在 Jenkins 创建新的任务
现在可以开始创建任务了。新建一个“自由风格”的项目。





/var/lib/jenkins/workspace/
ls /var/lib/jenkins/workspace/

5、将代码发布到web服务器
代码拉下来了,接下来就是发布到Web服务器上。这里会用到构建后的操作,通过执行Shell命令,把代码同步到目标服务器。 实验拓扑图如下:
yum install httpd -y systemctl restart httpd测试一下,访问默认页面,确认服务正常。
http://ip 默认是80端口

6、准备自动部署web代码
要让Jenkins能免密登录到Web服务器,还得把它的公钥也拷过去:ssh-copy-id 172.16.251.5
注:需要在哪台机器上自动发布代码,就需要让 jenkins 这台机器的 root 用户可以免密码登录到那台服务器上。
回到Jenkins,在项目的“构建”步骤里,选择“执行shell”,然后输入同步命令:
echo '当前 WORKSPACE 工作目录' pwd #'在构建时,默认会直接切换到 workspace 目录,所以可以直接将当前目录中的内容复制给被部署的服务器 scp -r ./* root@172.16.251.5:/var/www/html/保存配置后,再手动构建一次。



7、配置代码更新后自动触发jenkins进行部署
手动触发固然可行,但自动化部署的精髓在于“自动触发”。接下来,我们配置GitLab的Webhook,让代码一有变动,Jenkins就自动开始干活。 在Jenkins的任务配置里,找到“构建触发器”,勾选“Build when a change is pushed to GitLab”,然后复制生成的URL和Secret Token。


注:这个 secret token,只用于 gitlab 和 jenkins 上的 wryjc流水线,进行触发和沟通。
接下来,进入GitLab,先启用“允许对本地网络发送Webhook请求”的选项(如果Jenkins和GitLab在同一内网)。




8、测试gitlab触发jenkins自动部署
是骡子是马,拉出来遛遛。在GitLab上提交一点改动,看看Jenkins是否会自动响应。echo "hello this is my devops " >> index.html git add index.html git commit -m "modify index.html" git push -u origin master代码推送后,Jenkins的控制台立刻就有了反应,构建成功。

