一、前言
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://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/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