centos7安装jenkins并部署spring boot项目

2022/5/19 jenkins

# Jenkins介绍

Jenkins是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。官网:http://jenkins-ci.org

# Jenkins的特征

  • 开源的ava语言开发持续集成工具,支持持续集成,持续部署。
  • 易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理。
  • 消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告。
  • 分布式构建:支持Jenkins能够让多台计算机一起构建/测试。
  • 文件识别:Jenkins能够跟踪嘟次构建生成哪些jar,哪次构建使用哪个版本的jar等。
  • 丰富的插件支持:支持扩展捂件,你可以开发适合自己团队使用的工具,如git,svm,maven,docker等。

# Jenkins安装

# yum安装

安装页面:https://jenkins.io/zh/download/

jenkins_download22

选择centos,如果是其他系统,就根据自己的系统选择

jenkins_install

然后根据给出的命令行进行安装:

1.导入密钥

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
1

如果上面命令报错: ERROR: cannot verify pkg.jenkins.io's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=R3’:

后面加上: --no-check-certificate

wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate
1
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
1

如果您之前已从 Jenkins 导入密钥,rpm --import则会失败,因为您已经拥有密钥。请忽略这一点并继续前进。

2.安装jdk(1.8或者11)

yum install -y fontconfig java-11-openjdk
1

or

yum install -y java-1.8.0-openjdk*
1

3.安装jenkins

yum install -y jenkins
1

# rmp安装(北京外国语大学开源软件镜像站 (opens new window))

下载页面: https://mirrors.bfsu.edu.cn/jenkins/redhat-stable/

安装文件: jenkins-2.348-1.1.noarch.rpm

rpm -ivh jenkins-2.348-1.1.noarch.rpm
1

# 修改jenkins配置

vi /etc/sysconfig/jenkins
1

修改内容如下:

#管理用户
JENKINS_USER="root"
#访问端口,默认8080
JENKINS_PORT="8888"
1
2
3
4

把端口添加到防火墙

firewall-cmd --zone=public --add-port=8888/tcp --permanent
1
firewall-cmd --reload
1

# 踩坑

高版本的Jenkins的配置文件不再是/etc/sysconfig/jenkins了,虽然他还存在,不过并无暖用

而是/usr/lib/systemd/system/jenkins.service里面的

User=root
Group=root
Environment="JENKINS_PORT=8888"
1
2
3

修改配置后需要

systemctl daemon-reload
1

以刷新配置

再重启

systemctl restart jenkins 
1

打开浏览器访问:http://192.168.3.129:8888

jenkins

获取并输入admin账户密码

 cat /var/lib/jenkins/secrets/initialAdminPassword
1

# 跳过插件安装

因为Jenkins插件需要连接默认官网下载,速度非常慢,而且经过会失败,所以我们暂时先跳过插件安装

image-20220526182106100

image-20220526182138074

添加一个管理员账户,并进入Jenkins后台

image-20220526182605944

# 卸载

# 卸载yum安装的jenkins:

rpm -e jenkins #rpm卸载
rpm -ql jenkins #检查是否卸载成功
find / -iname jenkins | xargs -n 1000 rm -rf #彻底删除残留文件
1
2
3

# Jenkins插件管理

Jenkins本身不提供很多功能,我们可以通过使用插件来满足我们的使用。例如从Gitlab拉取代码,使用 Maven构建项目等功能需要依靠插件完成。接下来演示如何下载插件。

# 修改Jenkins插件下载地址

Jenkins国外官方插件地址下载速度非常慢,所以可以修改为国内插件地址:

替换地址为北京外国语大学镜像站

cd /var/lib/jenkins/updates
1
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
1

然后在管理页面 Jenkins->Manage Jenkins->Manage Plugins,点击Advanced,把Update Site改为国内插件下载地址

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

image-20220527142220413

Sumbit后,在浏览器输入: http://你的ip:端口/restart,重启Jenkins。

# 下载中文汉化插件

Jenkins->Manage Jenkins->Manage Plugins,点击Available,搜索"Chinese"

image-20220527144017691

重启Jenkins后,就看到Jenkins汉化了!(PS:但可能部分菜单汉化会失败)

image-20220527152225632

# Jenkins用户权限管理

我们可以利用Role-based Authorization Strategy 插件来管理Jenkins用户权限

安装Role-based Authorization Strategy插件

image-20220527152344352

开启权限全局安全配置

image-20220527152938120

授权策略切换为"Role-Based Strategy",保存

image-20220527153226903

# 创建角色

在系统管理页面进入 Manage and Assign Roles

点击"Manage Roles

image-20220527153837779

image-20220527153910108

image-20220527153945055

Global roles(全局角色):管理员等高级用户可以创建基于全局的角色

Item roles(项目角色): 针对某个或者某些项目的角色 Slave roles(奴隶角色):节点相关的权限

我们添加以下三个角色:

  • baseRole:该角色为全局角色。这个角色需要绑定Overall(全部)下面的Read权限,是为了给所有用户绑 定最基本的Jenkins访问权限。注意:如果不给后续用户绑定这个角色,会报错误:用户名 is missing the Overall/Read permission

  • role1:该角色为项目角色。使用正则表达式绑定jtest.*,意思是只能操作jtest开头的项目。

  • role2:该角色也为项目角色。绑定jweb.*,意思是只能操作jweb开头的项目。

image-20220527155036046

image-20220527155049152

# 创建用户

在系统管理页面进入 Manage Users(管理用户)

image-20220527161627989

image-20220527161716590

image-20220527161752126

分别创建两个用户:tringcloudx

image-20220527162140683

# 给用户分配角色

系统管理页面进入Manage and Assign Roles,点击Assign Roles 绑定规则如下:

  • tring用户分别绑定baseRolerole1角色
  • cloudx用户分别绑定baseRolerole2角色

image-20220527162733839

# 创建项目测试权限

以管理员账户创建两个项目,分别为jtest01jweb01

image-20220527163249564

结果为:

  • tring用户登录,只能看到jtest01项目
  • cloudx用户登录,只能看到jweb01项目

# Jenkins凭证管理

凭据可以用来存储需要密文保护的数据库密码、Gitlab\GiHub等代码仓库的密码信息、Docker私有仓库密码等,以便 Jenkins可以和这些第三方的应用进行交互。

安装Credentials Binding插件

要在Jenkins使用凭证管理功能,需要安装Credentials Binding插件

image-20220527164341064

安装插件后,管理界面出现了"凭证(Manage Credentials)"菜单,在这里管理所有凭证

image-20220527175650906

可以添加的凭证有5种:

image-20220527181006242

  • Username with password:用户名和密码
  • SSH Username with private key: 使用SSH用户和密钥
  • Secret file:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径 设置到一个变量中,等构建结束后,所复制的Secret file就会被删除。
  • Secret text:需要保存的一个加密的文本串,如钉钉机器人或Github的api token
  • Certificate:通过上传证书文件的方式

常用的凭证类型有:Username with password(用户密码)SSH Username with private key(SSH 密钥)

接下来以使用Git工具到Gitlab拉取项目源码为例,演示Jenkins的如何管理Gitlab的凭证。

# 安装Git插件和Git工具

为了让Jenkins支持从Gitlab拉取源码,需要安装Git插件以及在CentOS7上安装Git工具。

Git插件安装:

插件管理直接搜索Git安装即可

CentOS7上安装Git工具:

Git安装

yum install -y git 
1

安装后查看版本是否安装成功

git --version
1

# 用户密码类型

创建凭证

Jenkins->凭证(Manage Credentials)->系统->全局凭证->添加凭证

image-20220527183617005

选择"Username with password",输入Gitlab的用户名和密码,点击"确定"。

image-20220527185317959

测试凭证是否可用

创建一个FreeStyle(自由风格)项目:新建Item->FreeStyle Project->确定

image-20220530174342499

找到"源码管理"->"Git",在Repository URL复制Gitlab中的项目URL

image-20220608143444523

image-20220608143459479

保存配置后,点击构建Build Now(立即构建) 开始构建项目

image-20220608143725344

查看/var/lib/jenkins/workspace/目录,发现已经从Gitlab成功拉取了代码到Jenkins中。

image-20220608144053532

# SSH密钥类型

使用root用户生成公钥和私钥

ssh-keygen -t rsa
1

在/root/.ssh/目录保存了公钥和使用

image-20220609150907542

id_rsa:私钥文件

id_rsa.pub:公钥文件

把生成的公钥放在Gitlab中

image-20220609151731322

在Jenkins中添加凭证,配置私钥

在Jenkins添加一个新的凭证,类型为SSH Username with private key,把刚才生成私有文件内容复 制过来

image-20220609152009314

测试凭证是否可用

新建"test02"项目->源码管理->Git,这次要使用Gitlab的SSH连接,并且选择SSH凭证, 需要注意的是仓库url选择ssh的

image-20220609152152078

同样尝试构建项目,如果代码可以正常拉取,代表凭证配置成功!

# Maven安装和配置

在Jenkins集成服务器上,我们需要安装Maven来编译和打包项目。

# 安装Maven

先上传Maven软件到服务器

解压

tar -xzf apache-maven-3.6.2-bin.tar.gz 
1

创建目录

mkdir -p /opt/maven
1

移动文件

mv apache-maven-3.6.2/* /opt/maven
1

# 配置环境变量

vi /etc/profile
1

写入

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export MAVEN_HOME=/opt/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
1
2
3

配置生效

source /etc/profile
1

查看maven版本,如果出来就安装成功了

mvn -v
1

# 全局工具配置关联JDK和Maven

Jenkins->Global Tool Configuration(全局工具配置)->JDK->新增JDK,配置如下:

image-20220609160512238

Jenkins->Global Tool Configuration(全局工具配置)->Maven->新增Maven,配置如下:

image-20220609160525143

# 添加Jenkins全局变量

Manage Jenkins(系统管理)->Configure System(系统配置)->Global Properties(全局属性) ,添加三个全局变量JAVA_HOMEM2_HOMEPATH+EXTRA

image-20220609160751921

# 配置本地仓库地址和阿里镜像

修改Maven的settings.xml

创建本地仓库目录,本地仓库改为:/root/repo/

mkdir /root/repo
1
vi /opt/maven/conf/settings.xml
1

添加阿里云私服地址:

在mirrors节点里添加或者修改

<mirror>
	<id>alimaven</id>
	<mirrorOf>central</mirrorOf>
	<name>aliyun maven</name>
	<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
1
2
3
4
5
6

测试Maven是否配置成功

使用之前的gitlab密码测试项目,修改配置

构建->增加构建步骤->Execute Shell(执行shell)

image-20220609161359700

输入:

mvn clean package
1

image-20220609161605703

再次构建,如果可以把项目打包成功,代表maven环境配置成功啦!

image-20220609161717764

# 部署项目

配置好后就可以在shell脚本那里写上项目部署的脚本了,实际情况根据项目情况写,大体的步骤就是,kill掉原来进程 -> 打包 -> 复制到对应目录 -> 启动

附上一个示例脚本

echo "kill进程"
pid=`ps -ef | grep $APP_NAME | grep -v grep |awk '{print $2}'`
if [ $pid ]; then
    echo :App  is  running pid=$pid
    kill -9 $pid
fi
target=/home/java
echo  "当前路径:"$(pwd)
echo '开始打包'
mvn clean package -Dmaven.test.skip=true
echo '打包完成'
echo '复制文件'
cd target
cp -rf test-service-0.0.1-SNAPSHOT.jar $target
echo '启动jar'
nohup java -Xms128m -Xmx256m -jar test-service-0.0.1-SNAPSHOT.jar> log.log 2>&1 &
 tail -f log.log
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17