GitLab+Jenkins配置Maven项目CI/CD(Jar)


0

需要提前准备三个服务器(或者自己想办法用虚拟机或者Docker等):Jenkins服务器,GitLab服务器,项目发布服务器。
Jenkins服务器提前装好JDK,Maven,Git等环境,项目发布服务器提前装好JDK等环境并开启22和8080端口,Jenkins提前安装Publish Over SSH,Maven Integration,Git等插件。

GitLab+Jenkins配置Maven项目CI/CD

上传最简单的Spring Boot Web项目到GitLab

创建Spring Boot Web项目,新增controller:

package xyz.liuzhuoming.demo;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
* @author liuzhuoming
* @version 1.0-SNAPSHOT
*/
@RestController
public class TestController {

@RequestMapping("/")
public String test() {
return "i is fishs!";
}
}

然后项目上传到GitLab。

配置项目发布服务器

创建项目启动脚本

在/usr/local目录下创建webapps/demo目录,并创建jenkins-restart.sh文件(点击下载):

#! /bin/bash
upid=`netstat -lnp |grep 8080 |grep -v grep |awk '{print $7}'|awk -F "/" '{print $1}'`
echo "$upid"
if [ ! $upid ];then
echo "start"
nohup java -jar demo.jar > log.out 2>&1 &
else
echo "restart"
kill -9 $upid
nohup java -jar demo.jar > log.out 2>&1 &
fi

其中8080对应自己项目的server.portdemo.jar对应自己项目的打包名称(可以通过pom.xml的build.finalName来修改)。

创建用于SSH的RSA密钥

生成RSA密钥及导入密钥过程略。
保存私钥文件id_rsa到开发机任意位置备用。

配置Jenkins服务器

上传项目发布服务器用于SSH的私钥文件

上传刚才保存的私钥文件id_rsa到密钥文件路径(比如/usr/local/.ssh/id_rsa之类的)

配置Maven项目所需环境

配置位置在Manage Jenkins->Global Tool Configuration
JDK:配置本机JAVA_HOME地址,
Maven:配置本机MAVEN_HOME地址,
Git:配置本机Git执行文件地址(直接写git也可以,会去默认位置查找Git执行文件)。

配置SSH

配置位置在在Manage Jenkins->Configure System
配置Publish over SSH
其中Passphrase:配置密钥密码(如果有的话,没有为空),
Path to key:配置密钥文件路径(比如/usr/local/.ssh/id_rsa之类的),
Key:配置密钥文件内容(和上面选一个就可以了)。
然后点击Add SSH Server
Name:配置自定义的服务名称(比如test-server),
Hostname:配置项目发布服务器ip,
Username:配置登陆用户名,
Remote Directory:配置Jar文件上传后的根目录(比如/usr/local/webapps/),如果端口不是22就在高级选项里面配置Port
之后保存。
01.png

配置Maven项目

新建Item,选择构建一个maven项目,确定。
然后配置源码管理->Git->Repositories
Repository URL:里面填写Git项目仓库地址,如果是私有仓库,需要点击添加添加Jenkins凭证,填写GitLab的账号密码即可,之后在Credentials下拉框选择刚才新增的凭证。
02.png
然后配置Post Steps
点击Add post-build step
在下拉框选择Send files or execute commands over SSH,然后在SSH Publishers点击Add Server
Name:选择上一步Publish over SSH->SSH Server里面配置的服务名称(比如test-server),
然后在Transfers点击Add Transfers Set
Source files:为SpringBoot项目根目录下打包Jar包的位置(比如target/demo.jar),
Remove prefix:为除了Jar包名之外的路径(比如target),
Remote directory 为项目发布服务器放Jar包的相对地址(在上一步Publish over SSH->SSH Server里面配置的Jar文件上传后的根目录(比如/usr/local/webapps/)之下),
Exec command:为Jar包上传到项目发布服务器之后运行的命令(配置运行项目启动脚本就可以了,比如sh /usr/local/webapps/demo/jenkins-restart.sh)。
保存。
03.png

构建并发布

进入test-server工程里面点击Build Now按钮,左下角会出现一个构建进度条,点进控制台输出可以看构建和发布进度,如果没有报错并且最后一句提示SSH: Transferred 1 file(s)就是构建并发布成功了。
然后访问项目发布服务器ip:8080就可以看到页面显示i is fishs!
然后在Spring Boot项目里面的TestController修改i is fishs!you dead并提交到GitLab,然后在Jenkins的test-server工程点击Build Now按钮,点进去可以看到本次Git提交的commit内容,并且等到构建和发布完成之后,访问项目发布服务器ip:8080就可以看到页面显示you dead