Jenkins+Maven+Git(GitLab)持续集成Java项目

一、前言

1、本文主要内容

  • Jenkins+SSH获取Gitlab代码
  • Jenkins+Maven构建Java(Spring Boot)项目配置
  • Jenkins发布Spring Boot项目:远程服务器端配置
  • Jenkins发布Spring Boot项目:pom.xml编译配置
  • Jenkins+SSH将构建输出结果发布到远程服务器并启动应用

2、环境信息

  • 服务器

服务器名

操作系统

IP

说明

GitLab

CentOS 7

192.168.88.41

部署GitLab社区版

Jenkins

CentOS 7

192.168.88.44

部署Jenkins

Server

CentOS 7

192.168.88.101

部署Java项目

  • 软件

工具/环境

版本

Jenkins

2.176.2

Maven

3.6.1

GitLab

GitLab CE 12.1.2

JDK

1.8.0_181

3、基础准备

  • GitLab部署

参考:https://ken.io/note/centos7-gitlab-install-tutorial

配置GitLab访问地址为:http://192.168.88.41

sudo vi /etc/gitlab/gitlab.rb

external_url 'http://192.168.88.41'

注册一个账号:ken,用于后续提供Java项目进行构建

  • Jenkins部署

参考:https://ken.io/note/centos7-jenkins-install-tutorial

二、 Java应用部署服务器

1、部署JDK8

参考:https://ken.io/note/centos-java-setup

jdk1.8.0_181部署在目录/usr/java/

部署完成后,jdk的根目录就是:/usr/java/jdk1.8.0_181/

2、创建部署应用专用账号

#创建账号
sudo useradd app
sudo passwd app

#授予sudo权限且免密码
sudo visudo

#在最后一行加上
app ALL=(ALL) NOPASSWD:ALL

3、开放端口

#开放1000到9999的端口
sudo firewall-cmd --add-port=1000-9999/tcp --permanent
sudo firewall-cmd --reload

4、创建应用部署目录

#创建目录
sudo mkdir -p /webroot

#授权
sudo chown -R app:app /webroot

三、Jenkins环境准备

在配置构建任务之前,我们需要在Jenkins服务器配置Maven、Git环境

1、Maven安装

  • 下载&解压
cd /home/downloads

#下载
sudo wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz

#解压到指定目录
sudo mkdir -p /usr/maven
sudo tar -zvxf apache-maven-3.6.1-bin.tar.gz -C /usr/maven
  • 配置环境变量
#修改/etc/profile
sudo vi /etc/profile

#在文件末尾写入以下内容
export MAVEN_HOME=/usr/maven/apache-maven-3.6.1
export PATH=$MAVEN_HOME/bin:$PATH

#使更改生效
source /etc/profile

#测试
mvn -version
  • 配置Maven仓库

为了保证jar包的下载速度,修改maven配置使用国内镜像

#进入Maven根目录
cd $MAVEN_HOME

#备份配置文件
sudo mv conf/settings.xml conf/settings.xml.bak

#新建配置文件
sudo vi settings.xml
<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <mirrors>

    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>https://maven.aliyun.com/repository/public/</url>
      <mirrorOf>*</mirrorOf>        
    </mirror>

    <mirror>
      <id>nexus-163</id>
      <mirrorOf>*</mirrorOf>
      <name>Nexus 163</name>
      <url>http://mirrors.163.com/maven/repository/maven-public/</url>
    </mirror>

    <mirror>
        <id>central</id>
        <name>Maven Repository Switchboard</name>
        <url>http://repo1.maven.org/maven2/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>

  </mirrors>

</settings>

2、Git Client安装

  • 安装
sudo yum install -y git
  • 密钥准备
#生成密钥
ssh-keygen -t rsa
  • 将公钥添加到GitLab
#查看公钥
cat ~/.ssh/id_rsa.pub

访问GitLab:http://192.168.88.41:/profile/keys,添加公钥

  • 添加Git SSH凭据

后面配置Jenkins构建任务代码仓库时需要用到

#查询SSH私钥
cat ~/.ssh/id_rsa

访问:/credentials/store/system/domain/_/newCredentials 直接进入凭据添加界面

类型选择:SSH Username with private key

jenkins-credentials-gitlab-key

3、插件安装

  • 插件列表

插件名

版本

说明

3.11.0

使用Git访问远程仓库

3.3

使用Maven进行编译等

1.20.1

用于将编译结果发布到远程服务器

  • 安装说明

访问:

http://192.168.88.44:8080/pluginManager/available

Ctrl+F搜索插件名,勾选后,进行安装

安装完成后,重启jenkins

sudo systemctl restart jenkins

4、Jenkins插件/环境配置

在菜单:系统管理->全局工具配置中对插件相关工具进行配置

  • JDK配置
jenkins-configure-tools-jdk.png
  • Git配置
jenkins-configure-tools-git.png
  • Maven配置
jenkins-configure-tools-maven.png
  • Publish over SSH

然后在菜单:系统管理->系统设置对Publish over SSH进行设置

jenkins-configure-publish-over-ssh.png

主要配置项说明:

配置项

说明

Name

服务器名,随便写,方便记忆即可

Hostname

服务器IP,或者可以被正常解析的服务器名/域名

Username

用于登录的账号

Remote Dictionary

远程目录,绝对路径

Passphrase/Password

密码

Port

SSH端口

配置完成后可以点击Test Configuration进行连接测试

四、Jenkins构建任务

1、示例项目准备

如果已经有现成项目可忽略此步骤

访问:http://192.168.88.41/projects/new创建项目:helloworld

  • 创建SpringBoot应用

参考:https://ken.io/note/springboot-course-basic-helloworld 创建SpringBoot应用

参数

Maven模板

maven-archetype-webapp

GroupId

io.ken.tutorial

ArtifactId

helloworld

Version

1.0

  • 配置编译选项

修改pom.xml,以满足编译要求

<build>
    <finalName>helloworld</finalName>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>false</filtering>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>

配置application.yml,配置应用端口为8081

server:
  port: 8081

项目准备完成后,在GitLab账号ken下面创建项目helloworld并将刚才创建的文件提交上去

示例代码:https://gitlab.com/ken-io/springboot-helloworld

2、Jenkins任务创建

菜单:新建任务,或者访问:/view/all/newJob

jenkins-create-job-maven-springboot

选择:构建一个maven项目,然后确定即可

3、配置源代码管理

jenkins-create-job-maven-springboot-sourcecode-git-ssh

这里我们选择Git,并配置SSH Git地址,选择之前创建好的凭据/密钥

4、Publish over SSH配置

jenkins-create-job-maven-springboot-buildenv-publishoverssh

配置项说明:

配置项

说明

Name

appserver

SSH Server名称,根据之前配置选择即可

Source files

target/*.jar

需要传输的文件,支持通配符,编译文件默认都在项目根目录下的target目录中

Remove prefix

target

移除匹配到的文件路径的前缀,如果留空,会在远程服务器上创建对应的目录

Remote directory

helloworld/

远程服务器上的项目目录,该目录会被创建在Publish over SSH配置的远程根目录中(/webroot)

Exec command

文件传输到远程服务器后执行的命令

命令示例:

APP_NAME=helloworld.jar
cd /webroot/helloworld
mkdir -p logs

#找到包含AppName的进程
PROCESS=`ps -ef|grep $APP_NAME|grep -v grep  |awk '{ print $2}'`
#循环停用进程直到成功
while :
do
  kill -9 $PROCESS > /dev/null 2>&1
  if [ $? -ne 0 ];then
   break
  else
   continue
fi
done
echo 'Stop Successed'

#启动应用
nohup  /usr/java/jdk1.8.0_181/bin/java -jar $APP_NAME >>logs/start.log 2>>logs/startError.log &

#sleep等待15秒后,判断包含AppName的线程是否存在
sleep 15
if test $(pgrep -f $APP_NAME|wc -l) -eq 0
then
   echo "Start Failed"
else
   echo "Start Successed"
fi

5、构建

点击立即构建即可进行项目构建,构建完成后,构建记录的图标会根据构建结果不同显示成不同颜色。

蓝色、黄色、红色分别表示:成功、未完成、失败

如果构建并没有成功,可以点击构建记录,在后在控制台输出中查看构建记录

例如:http://192.168.88.44:8080/job/maven-springboot-helloworld/13/console

同样,你也可以在控制台输出中查看整个构建过程

如果构建成功,访问:http://192.168.88.101:8081,将会看到

Hello World!

五、备注

1、附录


本文首发于我的独立博客:https://ken.io/note/jenkins-maven-git-java-integration

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券