使用Jenkins+Gitlab实现代码提交到代码库后自动部署到服务器上,内容包括Jenkins和Gitlab的下载安装以及他们之间的联动。

前期准备

本套方案将Jenkins、Gitlab及待部署服务器分别放在了不同的环境,所以准备了三台机器,三台都是centos7的系统,文末有百度云链接下载同款镜像。各位可以根据自己的情况放在一台两台或者三台都可以。

Jenkins安装部署

本次采用的是java21+jenkins-2.440.2-1.1的方案,用java8有证书的问题,所以这里就用最新的版本(20240413)。

java21安装

安装包下载,可以直接从官网下载,也可以从文末的百度云链接下载,官网:Java Downloads | Oracle 中国



#新建一个文件夹,将下载的jdk包放进去
mkdir /usr/local/java
cd /usr/local/java
ll

gitlab 集成 jenkins 多分支 jenkins加gitlab_jenkins

#解压tar.gz包
tar -xzvf jdk-21_linux-x64_bin.tar.gz

gitlab 集成 jenkins 多分支 jenkins加gitlab_运维_02

#添加环境变量
echo "export JAVA_HOME=/usr/local/java/jdk-21.0.2" >> /etc/profile
echo "export PATH=$JAVA_HOME/bin:$PATH" >> /etc/profile

#添加软连接
ln -s /usr/local/java/jdk-21.0.2/bin/java /usr/bin/java

gitlab 集成 jenkins 多分支 jenkins加gitlab_git_03

gitlab 集成 jenkins 多分支 jenkins加gitlab_java_04

使用java -version查看版本,如上图就是安装成功了。

jenkins安装

#直接使用wget官网下载,没有wget先用yum安装一下,顺便安装一下git
yum install -y wget git
wget https://repo.huaweicloud.com/jenkins/redhat-stable/jenkins-2.440.2-1.1.noarch.rpm

#下载好之后直接使用rpm安装
rpm -ivh jenkins-2.440.2-1.1.noarch.rpm

gitlab 集成 jenkins 多分支 jenkins加gitlab_jenkins_05

#本机字体确实导致jenkins启动失败,需要安装一些字体
yum -y install fontconfig
fc-cache --force

#启动jenkins
systemctl start jenkins

#设置开机自启
systemctl enable jenkins

#关闭防火墙
systemctl stop firewalld

#禁用防火墙开机自启
systemctl disable firewalld

#查看jenkins状态
systemctl status jenkins

gitlab 集成 jenkins 多分支 jenkins加gitlab_运维_06

启动服务关闭防火墙之后就可以直接访问了,默认端口是8080。安装提示解锁 Jenkins。

gitlab 集成 jenkins 多分支 jenkins加gitlab_jenkins_07

这里我们选择自定义插件,然后选择无,什么都不安装

gitlab 集成 jenkins 多分支 jenkins加gitlab_jenkins_08

gitlab 集成 jenkins 多分支 jenkins加gitlab_git_09

新建一个用户,或者直接使用admin账户进入,后面就保存继续进入就可以了

gitlab 集成 jenkins 多分支 jenkins加gitlab_java_10

进入这个界面就算完成了。

gitlab 集成 jenkins 多分支 jenkins加gitlab_运维_11

jenkins插件

在Manage Jenkins里面选择Plugins,在这里面安装插件。上面这些告警选择Ignore或者Dismiss。

gitlab 集成 jenkins 多分支 jenkins加gitlab_jenkins_12

安装中文插件Localization: Chinese (Simplified),安装完成之后点击重启jenkins即可,不过安装这只能汉化部分,需要再安装一个Locale plugin插件,不过好像有时候汉化的还是不太行,将就着用吧,英文好的直接不用插件吧。

gitlab 集成 jenkins 多分支 jenkins加gitlab_java_13

gitlab 集成 jenkins 多分支 jenkins加gitlab_java_14

Gitlab部署

官方指导:GitLab下载安装_GitLab最新中文官网免费版下载-极狐GitLab

#先使用yum安装一些必须软件
yum install -y curl policycoreutils-python openssh-server perl

#设置sshd开机自启&启动
systemctl enable sshd && systemctl start sshd

#关闭防火墙并禁用开机自启
systemctl disable firewalld && systemctl stop firewalld

#安装 Postfix 以发送电子邮件通知
yum install postfix

#启动postfix并设置开机自启
systemctl start postfix && systemctl enable postfix


#下载镜像
curl -fsSL https://get.gitlab.cn | /bin/bash

#安装gitlab
yum install -y gitlab-jh
#修改网址为自己的ip
vi /etc/gitlab/gitlab.rb
#启动gitlab
gitlab-ctl reconfigure

#查看默认密码
cat /etc/gitlab/initial_root_password

修改默认网址为自己的IP地址

gitlab 集成 jenkins 多分支 jenkins加gitlab_jenkins_15

默认账户是root,密码可以按照上面的方法获取

gitlab 集成 jenkins 多分支 jenkins加gitlab_运维_16

点击自己的头像进入偏好设置可以设置语言

gitlab 集成 jenkins 多分支 jenkins加gitlab_gitlab_17

服务器设置

因为部署Django项目所以我这里要安装python3和django库

#安装一些必要软件
cd /usr/local
yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make libffi-devel git
yum install wegt

#下载安装包
wget http://npm.taobao.org/mirrors/python/3.9.0/Python-3.9.0.tgz
tar -zxvf Python-3.9.0.tgz

#进入解压目录,编译安装
cd Python-3.9.0
./configure prefix=/usr/local/python3
make && make install
ln -s /usr/local/python3/bin/python3.9 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3.9 /usr/bin/pip3
python3 -V
pip3 install django

gitlab 集成 jenkins 多分支 jenkins加gitlab_git_18

由于是使用节点在服务器上部署拉代码,所以也需要安装java21,参考上面的步骤,这里就不再说一遍了。

流水线搭建

创建gitlab项目

先在gitlab创建一个项目,然后将自己的代码上传。

gitlab 集成 jenkins 多分支 jenkins加gitlab_git_19

gitlab 集成 jenkins 多分支 jenkins加gitlab_jenkins_20

gitlab 集成 jenkins 多分支 jenkins加gitlab_gitlab_21

gitlab 集成 jenkins 多分支 jenkins加gitlab_运维_22

gitlab 集成 jenkins 多分支 jenkins加gitlab_java_23

创建jenkins节点

需要使用ssh的方式连接我们的节点,所以我们这边需要装一个SSH Build Agents plugin插件,上面介绍过插件的方式,安装后重启jenkins即可。

gitlab 集成 jenkins 多分支 jenkins加gitlab_gitlab_24

关闭git验证

gitlab 集成 jenkins 多分支 jenkins加gitlab_jenkins_25

gitlab 集成 jenkins 多分支 jenkins加gitlab_java_26

然后开始新建节点。

gitlab 集成 jenkins 多分支 jenkins加gitlab_java_27

gitlab 集成 jenkins 多分支 jenkins加gitlab_git_28

工作目录就是Jenkins的工作目录,连接节点后直接在这个目录操作。标签一定要填一个,用来选择在哪台节点上构建。

gitlab 集成 jenkins 多分支 jenkins加gitlab_jenkins_29

主机就是自己要部署的机器,然后添加一个凭证就行了,凭证就是连接机器的账号密码。

gitlab 集成 jenkins 多分支 jenkins加gitlab_gitlab_30

创建任务

由于需要拉取代码,所以还需要安装git和gitlab插件。

gitlab 集成 jenkins 多分支 jenkins加gitlab_gitlab_31

gitlab 集成 jenkins 多分支 jenkins加gitlab_java_32

去节点上生成ssh凭证,执行ssh-keygen然后连续按三下回车键就行了。

gitlab 集成 jenkins 多分支 jenkins加gitlab_运维_33

将公钥添加到gitlab上

gitlab 集成 jenkins 多分支 jenkins加gitlab_git_34

gitlab 集成 jenkins 多分支 jenkins加gitlab_git_35

gitlab 集成 jenkins 多分支 jenkins加gitlab_java_36

然后去jenkins创建任务

gitlab 集成 jenkins 多分支 jenkins加gitlab_java_37

gitlab 集成 jenkins 多分支 jenkins加gitlab_运维_38

这里的标签与上面创建节点的标签对应。

gitlab 集成 jenkins 多分支 jenkins加gitlab_java_39

git地址就是我们的gitlab地址,凭证新建一个选择SSH Username with private key类型的然后将私钥添加上去,使用cat /root/.ssh/id_rsa获取私钥,注意gitlab默认分支是main。

gitlab 集成 jenkins 多分支 jenkins加gitlab_java_40

gitlab 集成 jenkins 多分支 jenkins加gitlab_运维_41

gitlab 集成 jenkins 多分支 jenkins加gitlab_git_42

这里我们选择构建远程触发,然后随便填一些作为身份验证令牌,然后再选Build when a change is pushed to GitLab. GitLab webhook URL: http://192.168.8.123:80/project/dst这个,这样就可以在每次提交代码的时候自动运行这个任务了。

gitlab 集成 jenkins 多分支 jenkins加gitlab_运维_43

当然这样还不行,还需要去gitlab设置添加一下这个webhook不然jenkins并不知道你什么时候提交了代码。先在管理中心里的设置网络将出站请求里允许来自 webhooks 和集成对本地网络的请求打开不然添加不上webhook。

gitlab 集成 jenkins 多分支 jenkins加gitlab_git_44

然后再项目设置里添加webhook

gitlab 集成 jenkins 多分支 jenkins加gitlab_jenkins_45

url就是jenkins显示的url,令牌就是上面身份验证令牌。

gitlab 集成 jenkins 多分支 jenkins加gitlab_运维_46

gitlab 集成 jenkins 多分支 jenkins加gitlab_java_47

最后在jenkins设置里面取消Enable authentication for '/project' end-point这个勾选,不然后面会报错

gitlab 集成 jenkins 多分支 jenkins加gitlab_gitlab_48

最后写一些shell脚本,就可以将为我们的任务跑起来了

gitlab 集成 jenkins 多分支 jenkins加gitlab_gitlab_49

我这里只打印一个路径然后保存即可。

gitlab 集成 jenkins 多分支 jenkins加gitlab_jenkins_50

测试验证

先手动执行一下流水线,可以点击任务然后进控制台查看日志可以看到没问题,目录是我们之前创建的目录。

gitlab 集成 jenkins 多分支 jenkins加gitlab_运维_51

gitlab 集成 jenkins 多分支 jenkins加gitlab_gitlab_52

进入系统可以看见代码已经成果下载下来了。

gitlab 集成 jenkins 多分支 jenkins加gitlab_gitlab_53

更新代码,看是否会触发流水线,可以看到已经通过gitlab触发了。

gitlab 集成 jenkins 多分支 jenkins加gitlab_java_54

gitlab 集成 jenkins 多分支 jenkins加gitlab_运维_55

Django部署

创建一个工作目录。我们的django可以设置为DEBUG模式,这样只有每次更新代码就会自动重新部署。

gitlab 集成 jenkins 多分支 jenkins加gitlab_jenkins_56

更新代码等操作可以在上面任务里的shell脚本中编写,因为只要代码更新就会重新运行了。

gitlab 集成 jenkins 多分支 jenkins加gitlab_git_57

可以先手动启动一下。

gitlab 集成 jenkins 多分支 jenkins加gitlab_gitlab_58

访问网址测试。

gitlab 集成 jenkins 多分支 jenkins加gitlab_gitlab_59

在gitlab更新代码。

gitlab 集成 jenkins 多分支 jenkins加gitlab_java_60

重新刷新网页,流水线运行成功。

gitlab 集成 jenkins 多分支 jenkins加gitlab_java_61

百度云资源

java21链接:https://pan.baidu.com/s/1PczALUe6gyG6tGw0aprtPA?pwd=tkjs 
centos7镜像链接:https://pan.baidu.com/s/1_Sa1fxFUb-BQGlU1GM5iZQ?pwd=dvgk