天天看點

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+Maven+Git(GitLab)持續內建Java項目

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+Maven+Git(GitLab)持續內建Java項目

jenkins-configure-tools-jdk.png

  • Git配置
Jenkins+Maven+Git(GitLab)持續內建Java項目

jenkins-configure-tools-git.png

  • Maven配置
Jenkins+Maven+Git(GitLab)持續內建Java項目

jenkins-configure-tools-maven.png

  • Publish over SSH

然後在菜單:系統管理->系統設定對Publish over SSH進行設定

Jenkins+Maven+Git(GitLab)持續內建Java項目

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+Maven+Git(GitLab)持續內建Java項目

jenkins-create-job-maven-springboot

選擇:

建構一個maven項目

,然後确定即可

3、配置源代碼管理

Jenkins+Maven+Git(GitLab)持續內建Java項目

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

這裡我們選擇Git,并配置SSH Git位址,選擇之前建立好的憑據/密鑰

4、Publish over SSH配置

Jenkins+Maven+Git(GitLab)持續內建Java項目

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

本文首發于我的獨立部落格:https://ken.io/note/jenkins-maven-git-java-integration