记录一下Linux下部署Jenkins相关

前期准备工作

因为Jenkins是通过Java开发而来,因此前期我们需要在系统中安装Java环境

jenkins下载地址:https://www.jenkins.io/download/

注意:jenkins和有不同的JDK版本,注意版本兼容:

相关兼容信息访问:War Jenkins Packages

检查系统中是否包含有java环境:

1
2
3
4
5
6
7
8
9
10
11
12
13
## 先确认以前有没有安装过
$ rpm -qa |grep java
$ rpm -qa |grep jdk
$ rpm -qa |grep gcj
## 如果没有输入信息表示没有安装。

## 如果安装可以使用rpm -qa | grep java | xargs rpm -e --nodeps 批量卸载所有带有Java的文件 这句命令的关键字是java

## 首先检索包含java的列表
$ yum list java*

# 检索1.8的列表
$ yum list java-1.8*

安装并校验:

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
## 安装1.8.0的所有文件 默认jre jdk 安装路径是/usr/lib/jvm 下面
$ yum install java-1.8.0-openjdk* -y

## 使用命令检查是否安装成功
$ java -version

## 查询java安装路径
## 先用which java查询到执行路径 得到 /usr/bin/java
$ which java

## 再用ls -l查询到具体的路径
$ ls -l /usr/bin/java

## 得到
lrwxrwxrwx 1 root root 22 Jan 7 11:30 /usr/bin/java -> /etc/alternatives/java

## 继续使用ls -l 查看
$ ls -l /etc/alternatives/java

## 得到下面的地址就是java安装目录 即 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el7_9.x86_64
lrwxrwxrwx 1 root root 73 Jan 7 11:30 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el7_9.x86_64/jre/bin/java


## 校验java环境
$ java

$ javac

安装并部署Jenkins

安装

这里是针对版本使用的jenkins包

国内包:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/

国内对于各种版本:https://mirrors.tuna.tsinghua.edu.cn/jenkins/

国外包:CentOS版本下的包 Redhat Jenkins Packages

国外包:针对各种版本 Jenkins mirrors

使用rpm手动安装时:

1
2
3
4
5
6
# 下载
$ wget -O https://get.jenkins.io/redhat-stable/jenkins-2.346.3-1.1.noarch.rpm

# 安装
$ rpm -ivh jenkins-2.346.3-1.1.noarch.rpm

使用repo安装时:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1、jenkins官方yum源安装
# 如果使用特定版本 https://get.jenkins.io/redhat-stable/jenkins-2.346.3-1.1.noarch.rpm
# $ wget -O /etc/yum.repos.d/jenkins.repo https://get.jenkins.io/redhat-stable/jenkins-2.346.3-1.1.noarch.rpm
$ wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
$ rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

# 查看jenkins版本
$ yum search jenkins --showduplicates

# 查看jenkins指定版本版本
$ yum search jenkins --showduplicates
$ yum --showduplicate search jenkins | grep 2.346.1

# 2、安装
$ yum install -y jenkins
# 或者指定版本安装(这个版本兼容jdk1.8)
$ yum install jenkins-2.346.1-1.1.noarch -y

部署启动Jenkins服务

1
2
3
4
5
6
7
8
9
10
11
# 启动服务
$ systemctl start jenkins

# 停止
$ systemctl stop jenkins

# 重启
$ systemctl restart jenkins

# 启用/禁止开机自启
$ systemctl enable/diable jenkins

配置国内插件源

  • 找到插件配置文件

    1
    $ find / -iname "*UpdateCenter.xml"

    得到如下回显:

    1
    /var/lib/jenkins/hudson.model.UpdateCenter.xml
  • 修改文件内容

    1
    $ nano /var/lib/jenkins/hudson.model.UpdateCenter.xml

    原来内容:

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

    修改后的:

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

修改Jenkins端口号

  • 之前有些版本修改:

    好些博客上说修改 /etc/sysconfig/jenkins,尝试过无效!

  • 后来的有些版本修改:

    修改/usr/lib/systemd/system/jenkins.service

    找到Environment="JENKINS_PORT=8080"属性修改即可

    记得修改后使用systemctl daemon-reload重新加载下服务

配置初始化Jenkins环境

浏览器访问:http://服务器ip+8080

如:http://192.168.0.82:8080 得到如下页面

image-20220420165802396

因为Jenkins安装启动时默认配置了密码,所以需要在提示的地址上查看密码后填入,查看方式:

1
2
3
4
$ cat /var/lib/jenkins/secrets/initialAdminPassword

# 得到如下回显,填入密码即可
5b9adc798b3241da8f60259835acf444

点击继续按钮,得到如下界面,根据个人需求确认是否需要安装插件:

image-20220420170818375

这里选择推荐的插件,点击安装,得到如下界面:

image-20220420171030366

等待插件安装成功,得到如下界面:

image-20220420171531135

根据个人需求创建用户即可,下一步的页面如下:

image-20220420172429803

根据个人需求看是否修改,下一步的页面如下:

image-20220420172547762

下一个页面:

image-20220420172653683

Jenkins部署Vue前端项目

环境准备

这里直接使用本地的Node.js环境

  • 安装Node.js环境

    1
    $ yum install nodejs -y

    查看Node.js环境

    1
    $ node -v
  • 安装Npm环境

    某些情况下可能没有Npm环境,这里需要手动安装

    1
    $ yum install nodejs -y

    查看环境

    1
    $ npm -v
  • 安装Vue需要的全局环境等

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # yarn工具
    $ npm install -g yarn

    # pnpm工具
    $ npm install -g pnpm

    # hexo工具
    $ npm install -g hexo-cli

    # 全局工具和本地开发大差不差

项目构建后的Shell脚本编写

1
2
3
4
5
6
7
8
9
# 安装项目的依赖包,根据各自的项目打包工具编写即可
$ yarn install

# 打包
$ npm run build

# 迁移打包的文件在nginx引用或者代理服务配置的目录下
# eg

  • 如果是项目刚开始的情况下,可以直接将nginx代理该项目时修改代理的配置地址为当前项目工作目录下打包文件目录即可

  • 如果是项目半路将服务给Jenkins管理,可将打包文件迁移到Nginx已经配置好的代理目录下

    比方说我代理的目录是/opt/nginx/tool,这里备份之前的文件并将打包文件迁移到代理目录

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 复制之前的文件到备份目录
    # cp -r /opt/nginx/tool/ /opt/nginx/back/tool-$(date +%Y%m%d%H%M%S)
    if [ ! -d "/opt/nginx/tool" ];then
    mv tool /opt/nginx/tool
    else
    mv /opt/nginx/tool/ /opt/nginx/back/tool-$(date +%Y%m%d%H%M%S)
    # 复制打包文件到项目地址上
    # cp -r tool /opt/nginx/tool
    mv tool /opt/nginx/tool
    fi

Jenkins部署Maven项目:如Spring Boot微服务

环境准备:

  • yum安装Maven

    这种方法安装的无需配置环境变量

    1
    2
    3
    4
    5
    6
    # 安装Maven源
    $ wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo

    # 安装
    $ yum -y install apache-maven

    如果在安装过程中提示如下错误:

    1
    2
    3
    4
    5
    Transaction check error:
    file /usr/share/java/plexus/plexus-cipher.jar from install of apache-maven-0:3.5.2-1.el7.noarch conflicts with file from package plexus-cipher-1.7-5.el7.noarch
    file /usr/share/java/plexus/plexus-sec-dispatcher.jar from install of apache-maven-0:3.5.2-1.el7.noarch conflicts with file from package plexus-sec-dispatcher-1.4-13.el7.noarch
    file /usr/share/java/maven-wagon/file.jar from install of apache-maven-0:3.5.2-1.el7.noarch conflicts with file from package maven-wagon-0:2.4-3.el7.noarch
    file /usr/share/java/maven-wagon/provider-api.jar from install of apache-maven-0:3.5.2-1.el7.noarch conflicts with file from package maven-wagon-0:2.4-3.el7.noarch

    依次移除冲突包即可

    1
    2
    3
    4
    $ yum remove plexus-cipher-1.7-5.el7.noarch
    $ yum remove plexus-sec-dispatcher-1.4-13.el7.noarch
    $ yum remove maven-wagon-0:2.4-3.el7.noarch

  • 解压方式安装:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    # 下载
    # 这里的下载带了参数 --no-check-certificate,如果下载的时候报错可带上
    $ wget --no-check-certificate https://dlcdn.apache.org/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz

    # 解压
    # 解压
    $ tar -zxvf apache-maven-3.8.4-bin.tar.gz

    # 配置环境变量
    ## 编辑/etc下的profile文件
    $ sudo nano /etc/profile 或者 vim nano /etc/profile

    ## 在profile文件追加如下信息(/opt/software/apache-maven-3.8.4是你服务器上面的maven解压地址)
    export MAVEN_HOME=/opt/software/apache-maven-3.8.4
    export PATH=$PATH:$MAVEN_HOME/bin

    # 使环境变量生效
    $ sudo source /etc/profile
  • Maven仓库配置

    yum 安装的 Maven,使用 rpm -qa|grep apache-maven查看Maven安装目录,找到配置文件的路径位置:/etc/maven/settings.xml

    解压版的和Windows版本大差不差:

Spring Boot 项目准备

因为项目是Jenkins打包使用的,而有些项目在开发和正式运行的环境参数的不一样的,可能有多套环境的配置,这里需要在项目中配置在maven打包时使用不同的配置方法

  • 项目下

    比如我的配置文件如下:

    image-20230316173610105

    在项目的pom.xml下添加如下配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <profiles>
    <!-- 开发环境-->
    <profile>
    <id>dev</id>
    <properties>
    <spring.profiles.active>dev</spring.profiles.active>
    </properties>
    <!--设置默认使用配置-->
    <activation>
    <activeByDefault>true</activeByDefault>
    </activation>
    </profile>
    <!--部署环境-->
    <profile>
    <id>prod</id>
    <properties>
    <spring.profiles.active>prod</spring.profiles.active>
    </properties>
    </profile>
    </profiles>

    如果是IDEA开发环境

    image-20230316173348398

    这样在使用时,maven工具会知道当前使用的是哪个配置,同时可手动勾选设置默认的配置文件

    image-20230316173530167

     注意:如果项目多个模块开发的,记得配置信息放置需要使用的打包模块下!

  • 如何让配置生效

    在 application.yml中将

    1
    2
    3
    spring:
    profiles:
    active: dev

    改为

    1
    2
    3
    spring:
    profiles:
    active: '@spring.profiles.active@'

    注意,@符号设置的值必须和profile下的properties值一致

  • 如果配置文件是properties文件配置的,使用如下方式引用

    1
    spring.profiles.active='@spring.profiles.active@'

打包使用

如果是开发环境,这里不赘述了

控制台命令格式打包

这里的 -p 即指定打包哪个配置文件,如果不指定,默认使用的是dev配置文件

1
$ mvn clean install -P prod -Dmaven.test.skip=true

服务启动准备

因为是打包后程序需要启动、停止、重启等操作,这里给jar包写了个sh脚本去执行

创建spring-boot-admin.sh文件,填写 shell脚本如下:

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/bin/bash 

# 配置java环境变量哦,不然程序还是无法启动的
export JAVA_HOME=/opt/SoftWare/jdk1.8.0_211
export PATH=${JAVA_HOME}/bin:${PATH}

#这里可替换为你自己的执行程序,其他代码无需更改 这里的包名为 spring-boot-admin-1.0.0.jar
APP_NAME=/opt/web/spring-boot-admin-1.0.0.jar
# 配置jar启动的jvm大小
# JVM="-server -Xms128m -Xmx256m -XX:PermSize=64M -XX:MaxNewSize=128m -XX:MaxPermSize=128m -Djava.awt.headless=true -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled"

# 如果使用jdk11或以上版本,需要使用该配置
JVM="-server -Xms128m -Xmx256m -XX:MetaspaceSize=64M -XX:MaxNewSize=128m -XX:MaxMetaspaceSize=128m -Djava.awt.headless=true"

# 配置jar包外部配置文件的路径
APPFILE_PATH="-Dspring.config.location=/opt/web/config/application.properties"
#使用说明,用来提示输入参数
usage() {
echo "Usage: sh 执行脚本.sh [start|stop|restart|status]"
exit 1
}
#检查程序是否在运行
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动方法
start(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
nohup java $JVM -jar $APPFILE_PATH $APP_NAME > /dev/null 2>&1 &
echo "${APP_NAME} start success"
fi
}
#停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
}
#输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}
#重启
restart(){
stop
start
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac

服务的启动和关闭:

1
2
3
4
5
6
7
8
9
10
11
12
# 启动服务
$ sh spring-boot-admin.sh start

# 停止服务
$ sh spring-boot-admin.sh stop

# 查看服务
$ sh spring-boot-admin.sh status

# 重启服务
$ sh spring-boot-admin.sh restart

当然,如果有可能,有时也会有开机自启的操作,需要将sh脚本注册为系统服务,以服务的方式去开机自启、查看状态等

/etc/systemd/system目录下创建一个spring-boot-admin.service文件,文件内容为:

(文件也可以在/usr/lib/systemd/system目录下创建,然后使用 ln -l 命令软连接到/etc/systemd/system下)

同时service文件填写如下信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Unit]
# 备注信息
Description=Springboot project for test auto start
After=syslog.target network.target nss-lookup.target

[Service]
User=root
Type=forking
# 这里是指定启动程序的目录
ExecStart=/bin/sh /opt/web/shell/spring-boot-admin.sh start
ExecReload=/bin/sh /opt/web/shell/spring-boot-admin.sh restart
ExecStop=/bin/sh /opt/web/shell/spring-boot-admin.sh stop

[Install]
WantedBy=multi-user.target

以服务的形式启动、重启、开机自动等

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 刷新配置
$ systemctl daemon-reload

# 启动、重启、停止

# 启动
$ systemctl start spring-boot-admin.service

# 重启
$ systemctl restart spring-boot-admin.service
# 停止
$ systemctl stop spring-boot-admin.service

# 配置开机自启
$ systemctl enable spring-boot-admin.service

# 禁止开机启动
$ systemctl disable spring-boot-admin.service

Jenkins创建服务

服务创建这些不再赘述,重点是需要脚本去执行打包,启动服务等

以下命令中的spring-boot-admin字段是参考,即配置的项目或者服务名称,根据个人情况修改即可

  • 打包

    1
    $ mvn clean install -P prod -Dmaven.test.skip=true
  • 迁移打包文件

    如果是项目刚开始的情况下,可以直接将shell脚本中直接将打包文件地址指定在启动命令中接口

    如果是项目半路将服务给Jenkins管理,可将打包文件迁移到shell脚本配置的jar包地址下(因为我这里是半路上觉得每次打包上传很烦,因此就是这种方式)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 复制之前的文件到备份目录,判断文件是否存在,如果不存在,直接移动文件,存在该文件就备份文件后再移动
    if [ ! -f "/opt/web/spring-boot-admin-1.0.0.jar" ];then
    mv spring-boot-admin-1.0.0.jar /opt/web/spring-boot-admin-1.0.0.jar
    # 或者为了避免文件丢失使用cp命令
    cp -r spring-boot-admin-1.0.0.jar /opt/web/spring-boot-admin-1.0.0.jar
    else
    # 这里将之前的文件备份一下,以免现在的包有问题导致出现的各种问题
    mv /opt/web/spring-boot-admin-1.0.0.jar /opt/web/back/spring-boot-admin-1.0.0.jar-$(date +%Y%m%d%H%M%S)
    # 复制打包文件到项目地址上
    mv spring-boot-admin-1.0.0.jar /opt/web/spring-boot-admin-1.0.0.jar
    # 或者为了避免文件丢失使用cp命令
    # cp -r spring-boot-admin-1.0.0.jar /opt/web/spring-boot-admin-1.0.0.jar
    fi
  • 执行启动服务

    1
    $ systemctl restart spring-boot-admin.service