# 安装以及启停管理

# Jenkins War包下载

官方镜像网站 (opens new window)下载选择适合自己系统的 war 包。Jenkins 项目产生两个发行线, 长期支持版本 (LTS) 和每周更新版本,这里选择的是最新的 2.289.1 (opens new window) 的 LTS 版本。Jenkins 以 WAR 文件、原生包/安装程序和 Docker 镜像分发,这里仅使用 war 包进行安装。

# Tomcat 8.5 下载

这里选择的是 8.5 (opens new window) 版本的 tomcat。下载后解压到 /usr/local/ 下,文件夹改名为 tomcat-8.5 。将下载好的 war 包,放到 /usr/local/tomcat-8.5/webapps/ 目录下。启动 tomcat 后访问 ip:8080/jenkins 端口就可以看到 Jenkins 的页面。

# Jenins 安装

# 1. 选择 Jenins 的安装目录

Jenkins 默认的安装目录在 /root/.jenkins 下,如果不想安装在这里,可以通过修改环境变量 JENKINS_HOME 来修改。在 /etc/profile 文件中追加以下三行内容,然后执行 source /etc/profile

JENKINS_HOME=/data/jenkins
export JENKINS_HOME
export PATH=$PATH:$JENKINS_HOME/bin
1
2
3

添加后,启动 Tomcat 服务 sh /usr/loca/tomca-8.5/bin/startup.sh 。访问 ip:8080/jenkins ,看到如下界面就算正常,接下来只需要到到文件 /data/jenkins/secrets/initialAdminPassword 找到密码即可。/data/jenkins 是上面设置的 JENKINS_HOME 可以看到配置是生效的。

jenkins初始界面

# 2. 安装插件和新建用户

输入密码后,如果网络正常,那么大概率可以正常安装插件。如果不能安装插件,那么就先跳过安装插件,等下再来处理。

Jenkins离线

跳过安装插件后,会来到用户创建界面,可以先建一个用户,输入账号密码即可。

Jenkins-第一个用户

用户创建后会自动登录,接下来就是安装插件。

可能由于有些网站是国外的,默认的插件安装中心特别慢。或者由于证书问题,根本无法访问插件安装中心。

Jenkins-SSLException

这里提供一个解决办法以及相关文件。

# 修改插件安装中心
  1. 找到 $JENKINS_HOME/hudson.model.UpdateCenter.xml 文件,将其中的 url 标签该为 http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

    修改后的内容为。然后重启 Tomcat 服务。

    <?xml version='1.1' encoding='UTF-8'?>
    <sites>
      <site>
        <id>default</id>
        <url>http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
      </site>
    </sites>
    
    1
    2
    3
    4
    5
    6
    7

    重启之后,会发现可以正常搜索插件了。

    jenkins-插件中心-1

    但是安装插件会报错,报的是找不到证书的异常,那是因为 Java 发送 HTTPS 请求时,没有证书导致的,所以只需要将 HTTPS 改为 HTTP 就行了。

    Jenkins-SSLException-1

    具体是修改 /data/jenkins/updates/default.json 文件中的内容,将所有 https://mirrors.tuna.tsinghua.edu.cn 修改为 http://mirrors.tuna.tsinghua.edu.cn。另外还有一个,将 connectionCheckUrlhttp://www.google.com/ 修改为 http://www.baidu.com

    这里提供一个修改过的文件,可以直接下载使用。

    default.json (opens new window)

    替换之后,重启 Tomcat 服务,然后重新试着安装,就可以了。

    jenkins-插件中心-2

    到这里就算安装完成了,接下来根据需要安装插件即可。

# 3. 修改 Jenins 的占用端口

这里使用的是 Tomcat ,默认占用的端口 8080。如果不想使用这个端口,可以通过修改 Tomcat 的配置文件 /usr/local/tomcat-8.5/conf/server.xml 改变端口。找到

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
1
2
3

修改为 9696,或者其他你想要的端口。

    <Connector port="9696" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
1
2
3

重启 Tomcat,再访问 ip:9696 端口,正常访问就算正常。

# 4. Jenkins System Service

新建一个文件 /lib/systemd/system/jenkins.service ,然后添加以下内容

[Unit]
Description=jenkins
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/tomcat-8.5/bin/startup.sh
ExecReload=
ExecStop=/usr/local/tomcat-8.5/bin/shutdown.sh
PrivateTmp=true

[Install]
WantedBy=multi-user.target
1
2
3
4
5
6
7
8
9
10
11
12
13

执行命令 systemctl daemon-reload 使文件生效。

执行 systemctl enable jenkins 启动开机自动启动 Jenkins 服务。

接下来就可以使用 systemctl start jenkins 启动 Jenkins 服务,使用 systemctl stop jenkins 停止 Jenkins 服务。

# Jenkins 自动部署(基于Gitlab)

# 前置条件

# 相关插件

  1. Maven Integration (opens new window) :在部署spring boot 项目的时候, 我们需要创建maven项目, 在安装了这个插件之后, 在创建项目的时候, 如果没有这个插件, 在创建项目的时候就没有 构建一个maven项目的选项。

    Jenkins-plugin-maven

  2. Git Parameter (opens new window) : 在后续的自动化部署中, 我们需要通过参数, 设置不同的分支, 对不同的分支进行打包, 需要这个插件的支持。

  3. Gitlab Hook (opens new window):gitlab webhook 回调插件,设置好jenkins的回调url后就可以让jenkins进行自动构建。

  4. GitLab Plugin (opens new window) :远程构建的步骤里需要它,安装了之后,才会有红框里的那一个选项。

    Jenkins-Gitlab-Plugin

# 支持环境

  1. JDK 1.8 :在服务器构建 SpringBoot 项目的时候,需要用到 jdk 的一些工具。
  2. Maven:在服务器构建项目的时候,需要使用 mvn 命令下载相关依赖。
  3. Git:需要通过 git clone 来下载项目的代码文件。

需要在 Manage Jenkins --> Global Tool Configuration 里面配置相关工具的位置。

Jenkins-环境支持

# 添加 Gitlab 凭据

Jenkins-添加凭据

jenkins-添加凭据0

# Gitlab 示例

# 项目结构

新建一个 jenkins-demo (opens new window) 的 SpringBoot 项目,然后上传到 Gitlab 上做版本控制(github 也上传了,需要可以自取)。这个项目使用 maven-assembly-plugin 来打包,bin/run.sh 目录下有一个启停脚本 run.sh 可以方便控制程序。

Jenkins-github-demo

# 新建任务

新建一个 maven 项目

Jenkins-新建任务

# 源码管理

填写远程仓库信息

Jenkins-新建任务-源码管理

# 构建触发器

这个 url 是给gitlab 的 webhook 准备的,webhook 通过这个 url 进行回调。如果直接使用这个 url 报了 403 的错误,那么可以将url 改为这个样子

http://USERNAME:PASSWORD@172.25.20.69:8080/jenkins/project/jenkins-demo
1

其中USERNAME 是Jenkins 的登录账号,PASSWORD 是密码。

Jenkins-构建任务-构建触发器

Jenkins-新建任务-源码管理-2

# 在Gitlab中添加 Webhook

将构建触发器阶段生成的 url 和 token 填写到 gitlab 中,然后进行测试,返回200则算成功。

Jenkins-gitlab-webhook

Jenkins-gitlab-webhook-test

Jenkins-gitlab-webhook-test-200

# 配置 Post-build

Add post-build step 中选择 Exceute shell 选项,然后添加 shell 脚本。这里提供一下我的脚本。基本上对于我的项目结构,只需要修改 MODULEDEPLOY_DIR 变量即可。

Jenkins-Post-build

Jenkins-Post-build-1

# 模块的名字
MODULE=jenkins-demo
# 部署的目录
DEPLOY_DIR=/opt
if [ ! -d  $DEPLOY_DIR ]; then
   mkdir -p $DEPLOY_DIR
   tar -zxvf $WORKSPACE/target/$MODULE.tar.gz -C $DEPLOY_DIR
else
   rm -f $DEPLOY_DIR/$MODULE*.jar
   cp $WORKSPACE/target/$MODULE*.jar $DEPLOY_DIR/$MODULE
fi

if [ ! -f  /lib/systemd/system/$MODULE.service ]; then
	sFile=/lib/systemd/system/$MODULE.service
	sContent=$sContent"[Unit]"
	sContent=$sContent"\nDescription=$MODULE"
	sContent=$sContent"\nAfter=network.target"
    sContent=$sContent"\n "
    sContent=$sContent"\n[Service]"
    sContent=$sContent"\nType=forking"
    sContent=$sContent"\nExecStart=$DEPLOY_DIR/$MODULE/bin/run.sh start"
    sContent=$sContent"\nExecReload= "
    sContent=$sContent"\nExecStop=$DEPLOY_DIR/$MODULE/bin/run.sh stop"
    sContent=$sContent"\nPrivateTmp=true"
    sContent=$sContent"\n "
    sContent=$sContent"\n[Install]"
    sContent=$sContent"\nWantedBy=multi-user.target"
    echo -e $sContent > $sFile

	systemctl daemon-reload
	systemctl enable $MODULE
fi

systemctl restart $MODULE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# 结语

以上就是 Jenkins 的安装部署以及自动化部署的思路,希望能够给你提供帮助。

上次更新: 2023/10/15