Jenkins+Gitlab webhook触发自动构建项目

  • 效果:只要Gitlab仓库代码更新,Jenkins自动拉取代码,自动完成构建任务。无需手动点击“立即构建”或者”参数化构建”
  • 需求场景:

1、项目代码的更新迭代较多,运维很有可能不在场,每次点击比较麻烦
2、更新的可能不是代码,可能是一些资源(比如:静态文件等)
Jenkins版本:2.303.1 Gitlab版本:12.6.3

安装配置Gitlab

Yum安装即可 , 过程 略
Gitlab平台root用户密码配置为12345678

创建一个项目(私有仓库)

准备测试代码:
image.png

后端服务器准备

1
2
3
4
5
6
7
8
9
10
[root@docker-server ~]# tar -xvzf jdk-8u211-linux-x64.tar.gz  -C /usr/local/
[root@docker-server ~]# cd /usr/local/
[root@docker-server local]# mv jdk1.8.0_211/ java
[root@docker-server local]# vim /etc/profile
#最文件最后面添加
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH

[root@docker-server local]# source /etc/profile
[root@docker-server local]# java -version

image.png

1
2
3
4
5
[root@docker-server ~]# tar -xvzf apache-tomcat-8.5.45.tar.gz -C /data/application/
[root@docker-server application]# mv apache-tomcat-8.5.45/ tomcat
[root@docker-server application]# ls
tomcat
[root@docker-server application]# rm -rf tomcat/webapps/*

安装配置Jenkins


安装过程略
1.安装jdk
2.安装Tomcat
3.安装Maven(可选,不确定是否编译)
4.配置环境变量
5.启动


记得配置jdk和maven

image.png
image.png

安装Gitlab hooks plugins插件

因为要用gitlab hook自动拉取代码的功能,需要安装GItlab hooks插件,才具有自动构建的功能
去“插件管理”页面,“可选插件”,搜索“Gitlab Hook Plugin”,“Gitlab”,点击“直接安装即可”
注意:安装过程和网络有关。网络必须顺畅。且能正常连同国外Jenkins网站,才能下载成功
image.png

新建Gitlab webhook相关项目

image.png
image.png
Jenkins具体配置
image.png
来到Gitlab的test1项目中,复制拉取地址
image.png
粘贴到
image.png
出现一堆报红,正常!因为需要配置私钥和公钥
需要把Jenkins服务器的私钥,配置到test1项目中。把Jenkins服务器的公钥,配置到GItlab的服务里面。
这样拉取就可以免密了!
image.png

1
2
3
4
[root@jenkins-server ~]# useradd jenkins 
[root@jenkins-server ~]# su - jenkins
[jenkins@jenkins-server ~]$ ssh-keygen
[jenkins@jenkins-server ~]$ cat .ssh/id_rsa #查看jenkins用户的私钥

image.png
image.png
看到仍然报红,将jenkins服务器上面的jenkins用户的公钥添加到gitlab中
image.png
image.png
image.png
登录到jenkins服务器中

1
[jenkins@jenkins-server ~]$ cat .ssh/id_rsa.pub #查看jenkins用户的公钥


image.png
image.png

构建触发器

image-20240606223324696

image-20240606223549283

image-20240606231753843
image-20240606231934059

Token值作用:
Jenkins Webhook Token值用于身份验证,确保只有拥有正确Token的服务器才能触发Jenkins上的构建或者部署等操作。这样做可以防止未经授权的用户触发Jenkins作业,从而保护你的Jenkins从脚本未授权访问。

image.png
image.png
要记录下上边的URL和认证密钥,切换到gitlab,找到对应的git库点击setting –> webhook ,填写以下内容
地址:http://192.168.182.130:8080/jenkins/project/test3
Secret token:aab74fc9bd2427f6989e7a2b8ab9b178

配置GItlab

image-20240904224827758

image-20240904224918937

image-20240904225005158

image-20240904225205979

image-20240904225240275

image-20240904225517250
添加完成之后报错测试:
image-20240904225901653

这是因为gitlab 10.6 版本以后为了安全,不允许向本地网络发送webhook请求,设置如下:
登录管理员账号

image-20240904225938343

image-20240904230021125

image-20240904230051447

image-20240904230123696

再次测试

image-20240904230236244

注意:Jenkins需要配置git用户名 和 邮箱地址

1
2
3
[root@git-client ~]# su - jenkins
[root@git-client ~]# git config --global user.email "soho@163.com"
[root@git-client ~]# git config --global user.name "soho"
开始测试

在任何一台测试都可以。我这里在gitlab机器上面测试:

1
2
3
4
5
[root@git-client ~]# yum -y install git
[root@git-client ~]# git config --global user.email "fei@163.com"
[root@git-client ~]# git config --global user.name "fei"
[root@git-client ~]# ssh-keygen #生成秘钥
[root@git-client ~]# cat .ssh/id_rsa.pub #查看生成的公钥添加到gitlab里面去

image.png
先克隆一下仓库

1
2
3
[root@git-client ~]# git clone git@192.168.91.168:root/cloudweb.git
[root@git-client ~]# cd cloudweb
[root@gitlab-server cloudweb]# vi src/main/webapp/index.jsp

image.png

1
2
3
[root@git-client cloudweb]# git add *
[root@git-client cloudweb]# git commit -m "用户名 和 密码"
[root@git-client cloudweb]# git push origin main

返回到jenkins页面查看是否自动发布
image.png
image.png

1
2
3
[root@jenkins easy-springmvc-maven]# cd /root/.jenkins/workspace/test3
[root@jenkins test3]# ls
pom.xml README.md src target

访问tomcat页面,验证:
image.png

基于Git参数化自动构建项目

Gitlab仓库中有测试项目:github同步过来的
image.png
image.png
Jenkins配置:
修改原来的”test3”项目:
image.png
image.png
image.png
image.png
image.png
测试:
推送代码,打tag。代码也会自动构建;