程序员的资源宝库

网站首页 > gitee 正文

JenkinsMavenGitee自动化部署Springboot项目

sanyeah 2024-03-29 14:23:48 gitee 8 ℃ 0 评论

目录
  • CICD介绍
    • 持续集成(CI)
    • 持续交付、持续部署(CD)
  • Git安装
  • JDK安装
  • Maven安装
  • Jenkins安装
  • 启动Jenkins
  • 常用插件安装
    • 修改源
    • 插件安装
  • 基础配置
    • jdk配置
    • Git配置
    • Maven配置
    • 凭据配置
    • 对接码云Gitee
  • Springboot小项目发布
    • 引用服务器规划
    • 配置SSH免密登录
    • 创建任务
    • 自动启停项目

CICD介绍

CICD可以理解为管道,一个自动化流程,用于实现应用开发中的高度持续自动化和持续监控

持续集成(CI)

CI指持续集成,它属于开发人员的自动化流程,成功的CI说明新的代码会定期或手动构建、测试并合并到共享存储库中,可以有效解决由于分支过多而导致相互冲突的问题

持续交付、持续部署(CD)

CD指持续交付、持续部署,持续交付指开发人员将代码变更后会自动进行测试然后上传到共享存储库,然后由运维部署到生产环境中;持续部署指自动将变更的代码从共享存储库发布到生产环境。二者通常交叉使用,也可以单独使用,主要取决于自动化程度

工厂里的生产线以快速、可重复、自动化的方式将原材料生产为消费品,软件交付也是同样的道理,而如何完成这项工作的总体设计就是持续交付(CD),启动生产线的过程就是持续集成(CI),将最终产品提供给客户的过程就是持续部署(CD)

Git安装

执行安装命令

yum install git -y

验证Git,查看版本

git --version

JDK安装

执行命令java -version,查看系统是否已安装并配置jdk,若未安装请点击此处查看文章JDK安装步骤

Maven安装

在线安装:通过华为源下载

wget https://repo.huaweicloud.com/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

离线安装:点击此处进入官方下载页面,或者在国内源下载

将下载包上传到系统中,然后进行配置

解压下载包

tar -zxvf apache-maven-3.6.3-bin.tar.gz

编辑vim /etc/profile文件,添加Maven环境变量

export MAVEN_HOME=maven路径
export PATH=$MAVEN_HOME/bin:$PATH

重新加载配置,执行命令. /etc/profile

验证Maven配置,执行命令mvn -version

创建一个目录,做为Maven仓库,并修改为华为源

mkdir apache-maven-3.6.3/repository
vim apache-maven-3.6.3/conf/settings.xml

修改以下信息

<!--本地仓库-->          
 <localRepository>apache-maven-3.6.3/repository</localRepository>

<!--华为源-->
<mirror>
    <id>huaweicloud</id>
    <mirrorOf>*</mirrorOf>
    <url>https://repo.huaweicloud.com/repository/maven/</url>
</mirror>

Jenkins安装

在线安装:由于网络限制,建议使用国内镜像站下载

wget https://repo.huaweicloud.com/jenkins/war/版本/jenkins.war

离线安装:点击此处进入官方下载页面,建议下载LTS长期支持版,复制链接地址使用迅雷等工具进行下载

将下载的war包上传到系统中

启动Jenkins

nohup java -jar jenkins.war --httpPort=8888 > jenkins.log 2>&1 &

使用tail -f jenkins.log命令查看输出日志,获取Jenkins密码并记录Jenkins密钥

*************************************************************
*************************************************************
*************************************************************

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

d9ad78c6be5345b4837194ea91d934b0

This may also be found at: /root/.jenkins/secrets/initialAdminPassword

*************************************************************
*************************************************************
*************************************************************

开放端口供外网访问,或者直接关闭防火墙

# 开启防火墙8888端口
firewall-cmd --zone=public --add-port=8888/tcp --permanent
# 关闭防火墙并禁止开机自启
systemctl stop firewalld && systemctl disable firewalld

浏览器访问地址http://192.168.107.132:8888/,耐心等待进入以下页面,然后输入日志中复制的密码

然后点击【保存并完成】→【开始使用Jenkins】,进入Jenkins欢迎页面

常用插件安装

修改源

由于是国外网址,插件下载太慢,所以先更换一下安装源

依次点击【Maanage Jenkins】→【Manage Plugins】→【Advanced】,划到最下面修改升级站点URL

https://repo.huaweicloud.com/jenkins/updates/update-center.json

修改服务器配置,先找到Jenkins的安装目录,因其是隐藏目录,可以通过查找命令find / -name ".jenkins"找到安装路径,编辑updates目录下default.json文件

先切换到updates目录下,然后执行修改文件的命令

cd /root/.jenkins/updates/
sed -i 's/http:\/\/updates.jenkinsci.org\/download/https:\/\/repo.huaweicloud.com\/jenkins/g' default.json
sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

重启Jenkins,直接通过浏览器访问地址重启

http://192.168.107.132:8888/restart

插件安装

在安装时选择推荐插件,已经把常用的插件安装成功,可以在已安装列表中查看

未安装的插件在【可选插件】中搜索,然后勾选要安装的插件,点击【直接安装】

例如:SonarQube Scanner插件,安装后可以执行 sonar scanner 指令,跑 CI 时检查代码质量

点击【直接安装】后会进入安装页面,在此页面勾选“安装完成后重启Jenkins(空闲时)”,如果页面长时间等待,可能已成功安装,请手动刷新页面

基础配置

jdk配置

依次点击【Manage Jenkins】→【Global Tool Configuration】,找到JDK,点击【新增JDK】

出现黄色提示说明配置有问题,路径有误,Jenkins未找到

Git配置

在【Global Tool Configuration】页面找到Git,默认已经填写,可以重命名操作

出现下图提示说明配置有误

Maven配置

在【Global Tool Configuration】页面找到Maven

同样下图提示说明路径有误

最后点击【保存】

凭据配置

依次点击【Manage Jenkins】→【Manage Credentials】,点击【全局】→【添加凭据】,或者进入全局详情页添加凭据

  • 常用凭据类型

    Username with password:用户名和密码

    SSH Username with private key:使用SSH用户和密钥

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

对接码云Gitee

添加码云Gitee凭据

新建一个码云仓库

此仓库内有两个README文件,复制仓库地址

然后测试凭据是否能正常使用

【新建Item】→【Freestyle project】,输入任务名称,点击【确定】

找到源码管理,点击Git,URL中输入复制的仓库地址,Credentials选择已添加的码云凭据

因为仓库是私有的,所以必须要有凭据,否则无法连接到仓库,就会报错

保存任务,点击【Build Now】,立即构建,查看构建日志

通过日志输出结果可以看出构建成功

查看Jenkins的工作空间目录可以看到已成功将文件拉取下来

至此说明用户名和密码类型的凭证已经生效

Springboot小项目发布

引用服务器规划

由于Jenkins构建消耗内存很大,此处再创建一个虚拟机,有条件可以直接开通阿里云的ECS,就更像公司的部署情况啦!哈哈

应用服务器信息

  • IP:192.168.107.133
  • JDK:1.8 (安装步骤请查看此文章)
  • 部署路径:/project/backup/dyd-jenkins-test/
  • 端口:8088
配置SSH免密登录

在Jenkins服务器上生成密钥

ssh-keygen -t rsa
# 然后直接回车三次

执行后会生成.ssh目录,生成两个文件

  • id_rsa : 生成的私钥文件
  • id_rsa.pub : 生成的公钥文件

接下来需要将公钥导入到认证文件中

cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

ssh公钥生效需满足至少下面两个条件:

  • .ssh目录的权限必须是700
  • .ssh/authorized_keys文件权限必须是600

给文件授权

chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys

将authorized_keys文件拷贝到应用服务器192.168.107.133的.ssh目录下

# 先在应用服务器(192.168.107.133)上创建/.ssh目录
mkdir /root/.ssh
# 在jenkins服务器(192.168.107.132)上将pub公钥文件拷贝到应用服务器的.ssh目录下,并命名为authorized_keys
scp -p /root/.ssh/id_rsa.pub root@192.168.107.133:/root/.ssh/authorized_keys

然后再给应用服务器192.168.107.133上的.ssh和.ssh/authorized_keys授权

chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys

在Jenkins服务器192.168.107.132上进行免密连接测试

# 在jenkins服务器的任意目录下创建test文件,并拷贝到应用服务器
touch /root/test
scp -p test root@192.168.107.133:/root/test
# 进入到应用服务器(192.168.107.133),检查目录下是否出现test
# 在Jenkins服务器上使用ssh进行免密连接测试,成功连接如下图所示,如果还需要输入密码,说明配置失败,请检查
ssh root@192.168.107.133
# 验证后使用exit退出远程连接
exit

至此免密登录和实现免密拷贝成功

创建任务

先使用脚手架写一个超简单的小项目,或者网上找个项目

先确保本地能够成功访问

然后通过Git将小项目上传到码云

创建一个Maven项目,若不存在此选项,请在插件中搜索maven,然后安装Maven

配置Git,填写码云上复制的项目地址和码云凭据

配置Pro Steps,POM默认已存在,无需更改,操作填写clean package -U -Dmaven.test.skip=true

配置Post Stops,选择执行Shell

编写Jenkins发布脚本

#!/bin/bash

echo "部署的目录和项目名称"
DIR="/project"
projectName="dyd-jenkins-test"

echo "待部署的应用服务器"
server_ips="192.168.107.133"
for server_ip in ${server_ips[@]}
do

echo "ssh连接并进行备份操作"
ssh -Tq -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mkdir -p $DIR/backup/${projectName}
if [ -f "$DIR/${projectName}/${projectName}.jar" ];then
  mv $DIR/${projectName}/${projectName}.jar $DIR/backup/${projectName}/${projectName}-`date "+%Y%m%d_%H%M%S"`.jar 
fi
EOF

echo "拷贝jar包到目标服务器的tmp目录下"
scp -q -oStrictHostKeyChecking=no ${WORKSPACE}/target/*.jar root@${server_ip}:/tmp/${projectName}.jar

echo "ssh远程连接进行发布操作"
ssh -q -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mv /tmp/${projectName}.jar $DIR/backup/${projectName}/${projectName}.jar

EOF

done

echo "success"

将脚本代码粘贴到Execute shell框中,然后点击【应用】【保存】

执行构建任务,

点击【Build Now】,立即构建,查看控制台输出,首次构建有下载任务,构建时间可能会很长,请耐心等待

构建成功后启动项目

通过浏览器访问验证项目,可以看到项目已成功启动

自动启停项目

通过上面操作可以看到任务构建成功后,每次还需要手动启停,所以需要一些自动启停的shell脚本

编写应用启动脚本

在/project/backup/dyd-jenkins-test目录下创建启动脚本

vim start.sh

将下面的代码粘贴到start.sh文件中

#!/bin/bash
set -e #一旦报错立即停止
set -o pipefail

# 添加JDK路径
JAVA_HOME=/usr/java/jdk1.8.0_281-amd64

APP_ID=dyd-jenkins-test
APP_DIR="/project"

nohup $JAVA_HOME/bin/java -jar ${APP_DIR}/backup/${APP_ID}/${APP_ID}.jar > release_out.log 2>&1 &
start_ok=false
if [[ $? = 0 ]];then
        sleep 5
        tail -n 100 release_out.log
fi
dyd=`grep "Started" release_out.log | awk '{print $1}'`
if [[ -n "${dyd}" ]];then
    echo "应用程序启动成功"
    exit 0
else
    echo "应用程序启动失败"
    exit 1
fi

运行脚本看是否能够成功启动应用

# 切换到项目目录下
cd /project/backup/dyd-jenkins-test
# 执行shell命令
sh start.sh
# 或者执行命令时直接加上路径
sh /project/backup/dyd-jenkins-test/start.sh
# 然后查看日志
tail -f release_out.log

通过浏览器访问成功

编写停止应用脚本

在/project/dyd-jenkins-test目录下创建停止脚本

vim stop.sh

将下面的代码粘贴到stop.sh文件中

#!/bin/bash

APP_ID=dyd-jenkins-test
ps aux | grep ${APP_ID} | grep -v "grep" | awk '{print "kill -9 "$2}' | sh

运行脚本看是否能够成功停止应用运行

# 切换到项目目录下
cd /project/backup/dyd-jenkins-test
# 执行shell命令
sh stop.sh
# 或者执行命令时直接加上路径
sh /project/backup/dyd-jenkins-test/stopt.sh

通过浏览器访问失败

启停脚本验证通过后,将下述启停代码加到上面Jenkins的发布脚本中

sh $DIR/backup/${projectName}/stop.sh
sh $DIR/backup/${projectName}/start.sh

构建任务,查看控制台输出日志可以项目启动成功

项目变更后重新构建发布

先修改一下小项目,然后同步到码云

再次构建项目

日志中可以看到commit信息,并构建发布成功

通过浏览器访问可以看到最新的内容

OK!先写这么多吧

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表