前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jenkins+Maven+Git(GitLab)持续集成Java项目

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

作者头像
KenTalk
发布2020-01-20 16:44:20
8760
发布2020-01-20 16:44:20
举报
文章被收录于专栏:Ken的杂谈Ken的杂谈

一、前言

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://cloud.tencent.com/developer/article/1333790

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

代码语言:javascript
复制
sudo vi /etc/gitlab/gitlab.rb

external_url 'http://192.168.88.41'

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

  • Jenkins部署

参考:https://cloud.tencent.com/developer/article/1333792

二、 Java应用部署服务器

1、部署JDK8

参考:https://cloud.tencent.com/developer/article/1333872

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

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

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

代码语言:javascript
复制
#创建账号
sudo useradd app
sudo passwd app

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

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

3、开放端口

代码语言:javascript
复制
#开放1000到9999的端口
sudo firewall-cmd --add-port=1000-9999/tcp --permanent
sudo firewall-cmd --reload

4、创建应用部署目录

代码语言:javascript
复制
#创建目录
sudo mkdir -p /webroot

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

三、Jenkins环境准备

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

1、Maven安装

  • 下载&解压
代码语言:javascript
复制
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
  • 配置环境变量
代码语言:javascript
复制
#修改/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配置使用国内镜像

代码语言:javascript
复制
#进入Maven根目录
cd $MAVEN_HOME

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

#新建配置文件
sudo vi settings.xml
代码语言:javascript
复制
<?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安装

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

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

  • 添加Git SSH凭据

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

代码语言:javascript
复制
#查询SSH私钥
cat ~/.ssh/id_rsa

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

类型选择:SSH Username with private 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

代码语言:javascript
复制
sudo systemctl restart jenkins

4、Jenkins插件/环境配置

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

  • JDK配置
  • Git配置
  • Maven配置
  • Publish over SSH

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

主要配置项说明:

配置项

说明

Name

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

Hostname

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

Username

用于登录的账号

Remote Dictionary

远程目录,绝对路径

Passphrase/Password

密码

Port

SSH端口

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

四、Jenkins构建任务

1、示例项目准备

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

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

  • 创建SpringBoot应用

参考:https://cloud.tencent.com/developer/article/1334223 创建SpringBoot应用

参数

Maven模板

maven-archetype-webapp

GroupId

io.ken.tutorial

ArtifactId

helloworld

Version

1.0

  • 配置编译选项

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

代码语言:javascript
复制
<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

代码语言:javascript
复制
server:
  port: 8081

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

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

2、Jenkins任务创建

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

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

3、配置源代码管理

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

4、Publish over SSH配置

配置项说明:

配置项

说明

Name

appserver

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

Source files

target/*.jar

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

Remove prefix

target

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

Remote directory

helloworld/

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

Exec command

—-

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

命令示例:

代码语言:javascript
复制
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,将会看到

代码语言:javascript
复制
Hello World!

五、备注

1、附录

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
    • 1、本文主要内容
      • 2、环境信息
        • 3、基础准备
        • 二、 Java应用部署服务器
          • 1、部署JDK8
            • 2、创建部署应用专用账号
              • 3、开放端口
                • 4、创建应用部署目录
                • 三、Jenkins环境准备
                  • 1、Maven安装
                    • 2、Git Client安装
                      • 3、插件安装
                        • 4、Jenkins插件/环境配置
                        • 四、Jenkins构建任务
                          • 1、示例项目准备
                            • 2、Jenkins任务创建
                              • 3、配置源代码管理
                                • 4、Publish over SSH配置
                                  • 5、构建
                                  • 五、备注
                                    • 1、附录
                                    领券
                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档