Ken的杂谈
  • Ken的杂谈 (current)
  • 关于
  • 杂谈
    Java Spring Spring Boot Spring Cloud MyBatis C# .NET Core .NET ASP.NET Core ASP.NET ClassLibrary Mono 数据库 MySQL SQL Server 网络 缓存 Web Linux CentOS Ubuntu macOS Windows openEuler Nginx ServiceStack JS/JQ 正则 工具 IDE Grafana Exceptions CI/CD Solution 微服务 Arch Docker 杂谈
  • 系列
    Java 快速入门系列教程 Spring Boot 入门教程 Spring Boot 2.x 入门教程 Spring Cloud 入门教程 .NET Core 快速入门教程 ASP.NET Core 2.1 入门教程 CentOS 7 快速上手教程 Ubuntu快速上手入门教程 Hyper-V基础教程 Docker入门教程
  • GitHub

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

Java 工具 Spring Boot Solution @ 2019-08-01 01:51:57 · 阅读:(10916)

一、前言

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、插件安装

  • 插件列表
插件名 版本 说明
Git 3.11.0 使用Git访问远程仓库
Maven Integration 3.3 使用Maven进行编译等
Publish Over SSH 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://github.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/centos-java-setup
  • https://ken.io/note/centos7-jenkins-install-tutorial
  • https://ken.io/note/centos7-gitlab-install-tutorial
  • https://ken.io/note/springboot-package-deploy

Ken的杂谈

本文由 ken.io 创作,采用CC BY 3.0 CN协议 进行许可。 可自由转载、引用、甚至修改,但需署名作者且注明出处。

Java 工具 Spring Boot Solution

随笔目录


    © Copyright 2012-2025 Ken的杂谈

    豫ICP备10025012号-1

    ASP.NET Core(6.0) on Linux