jenkins自動部署Spring Cloud服務實戰

概述

jenkins是一個自動構建工具,在jenkins的服務器上指定配置一些應用服務器後,能夠實現自動從git拉取代碼,然java

後將項目部署和啓動到應用。本文的目的是想詳盡介紹,如何配置整個的部署環境。git

我整理了下公司真實環境的配置方式。僅供參考,本公司是小公司,若是有什麼不足的地方歡迎指出,我好改進啊~web

部署規劃

jenkins構建方式

  • 節點方式docker

    經過jenkins配置的節點信息進行構建,後面有具體介紹。shell

    jenkins服務器配置簡單,可是應用服務器須要安裝git,maven。由於會在應用服務器進行構建vim

  • Publish插件方式tomcat

    經過安裝插件Publish Over SSH進行構建,後面有具體介紹。bash

    jenkisn服務器配置複雜,可是應用服務器只需安裝jdk便可服務器

服務器規劃

ip地址 類型 軟件 構建方式
121.40.XX.XX 應用服務器 jdk git maven 節點方式
192.168.1.112 應用服務器 jdk Publish插件方式
192.168.1.233 應用服務器 jdk Publish插件方式
192.168.1.254 jenkins服務器 jdk git maven jenkins jenkins服務器
120.79.XX.XX 應用服務器 jdk git maven 節點方式

jenkins安裝和啓動

官網:jenkins.io/zh/download…less

docker方式安裝

  1. 先安裝docker

  2. 啓動鏡像

    docker run \
      -u root \
      --rm \
      -d \
      -p 8080:8080 \
      -p 50000:50000 \
      -v /data/jenkins:/var/jenkins_home \
      -v /var/run/docker.sock:/var/run/docker.sock \
      --privileged=true \
      jenkinsci/blueocean
    複製代碼

    參考:jenkins.io/zh/doc/book…

    運行是可能會報錯Permission Denied,因此加上了--privileged=true \,參考:www.jianshu.com/p/1ed499037…

war包方式安裝

先須要下載war包:

地址:jenkins.io/zh/download…

下載後,使用命令以下命令運行:

nohup java -jar jenkins.war &
複製代碼

經過 ps -ef | grep jenkins查找啓動的進程:

[root@localhost ~]# ps -ef | grep jenkins
jenkins    1445      1  0 Apr08 ?        10:21:30 /usr/local/jdk/bin/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
root      89082  88082  0 13:07 pts/0    00:00:00 grep --color=auto jenkins
複製代碼

上文中顯示-DJENKINS_HOME=/var/lib/jenkins,這個是jenkins實際的工做目錄。

若是須要指定更多的參數,好比指定端口進行啓動,那麼能夠經過以下命令進行啓動:

java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /data/jenkins/jenkins.war --logfile=/var/logs/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8989 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
複製代碼

啓動和初始化

相關的啓停命令

$ http://yourdomain:8080/exit # 中止服務
$ http://yourdomain:8080/restart # 重啓服務
$ http://yourdomain:8080/reload # 從新加載配置信息
複製代碼

初始化jenkins

訪問jenkins: http://localhost:8080

第一次解鎖須要複製密碼:

上圖有顯示密碼在服務器中的位置。若是是經過docker安裝的,那麼密碼文件在掛載的目錄下面

# vim /data/jenkins/secrets/initialAdminPassword 

8079fb5d3e3f444d857fa5c8e7add6e9
複製代碼

點擊上圖【繼續】後,點擊【安裝推薦的插件】

插件正在安裝中,稍等片刻

系統管理

登陸jenkins後,右邊菜單中有個【系統管理】菜單,點擊進去

下圖的紅框框部分是部署必須設置項,其餘的看狀況設置:

下面咱們具體來設置這幾項。

系統設置

這裏是默認的一些基本信息

配置訪問信息

配置pulish over ssh插件,須要配置用戶名和密碼,在應用服務器192.168.1.233建立目錄/wms/services/jenkins,點擊Test Configuration進行驗證,提示Success纔是驗證成功。 ​

SSH Server節點中目錄/wms/services/jenkins很是關鍵。

在後面的構建任務中,的兩個任務就是基於該目錄的。

固然,若是不是經過SSH Publishers插件來構建那麼這裏的SSH Server節點配置不配置都不要緊。

192.168.1.112應用服務器是Publish插件方式構建,會關聯這裏配置的SSH Server信息:

全局工具配置

jenkisn服務器須要安裝maven,jdk,git。我是預先安裝的,您沒預先安裝也能夠試試勾選這裏的自動安裝。

插件管理

確保gitPublish Over SSH插件安裝成功

節點管理

回顧上文的服務器規劃 ,其中120.79.XX.XX121.40.XX.XX節點方式進行構建,因此須要在這裏單獨配置節點:

以121.40.XX.XX爲例,點擊右邊齒輪後,再點擊配置從節點,能夠查看到須要配置的節點狀況:

JVM選項:-Djava.awt.headless=true -Djava.encoding=UTF-8

配置環境變量

保存後,返回到節點列表。點擊右上角的容許自動刷新,發現已經正常鏈接上,效果如上午的節點列表。

開始構建

系統管理設置好後才能開始進行構建,我總結了兩種構建方式

構建方式一:節點方式

該方式須要先配在系統管理配置節點,而後在遠程管理進行打包和啓動。

General基本配置

指定運行節點,節點在【系統管理】【節點管理】中配置

源碼管理

同SSH方式,指定git的url和認證信息

git 的基本信息信息在【系統管理】【全局工具配置】中進行指定

配置構建

調用頂層Maven目標

同SSH方式。

  • maven版本

    在【系統設置】【全局工具配置】中配置了maven環境,maven1是添加的maven環境的名稱

  • 目標

    經過maven命令進行父模塊下子模塊的打包命令

    clean package -pl zhirui-zuul-server/ -am -Dmaven.test.skip=true
    複製代碼

    若是是子模塊下還有子模塊,打包命令以下:

    clean package -pl zhirui-zmgj-business/zhirui-zmgj-server/ -am -Dmaven.test.skip=true
    複製代碼

執行shell

由於經過指定節點運行,因此無需經過SSH的那個插件進行部署。【系統管理】【節點管理】節點配置:

  1. 基於上圖節點配置中的遠程工做目錄, jenkins會在遠程工做目錄 + workspace + 任務名稱下進行編譯。因此jar的路徑還須要再拼上git的項目路徑。
  2. 實際部署運行的的路徑

執行shell中的腳本以下:

#!/bin/bash
 #Jenkins推包到應用服務器的目錄
jenkins="/root/.jenkins/workspace/zhirui-zmgj-server-pro/zhirui-zmgj-business/zhirui-zmgj-server/target"
 #發佈目錄(修改成對應的發佈目錄)
deployDir="/wms/services/zhirui-zmgj-server"
 #jar名稱(修改成對應的jar名稱)
jarName="zhirui-zmgj-server-0.0.1-SNAPSHOT.jar"
 #固定配置
jarLib=$deployDir"/lib"
jarBin=$deployDir"/bin"
jarBak=$deployDir"/bak"
jarLog=$deployDir"/logs"
 #目錄構建
if [ ! -d ${jarLib}"/" ];then
mkdir ${jarLib} -p
fi

if [ ! -d ${jarBin}"/" ];then
mkdir ${jarBin} -p
fi
	
if [ ! -d ${jarBak}"/" ];then
mkdir ${jarBak} -p
fi
	
if [ ! -d ${jarLog}"/" ];then
mkdir ${jarLog} -p
fi

echo "**********************基礎配置信息***********************"
java -version
echo "發佈項目:"${jarName}
echo "發佈目錄:"${deployDir}
echo "bin目錄:"${jarBin}
echo "lib目錄:"${jarLib}
echo "bak目錄:"${jarBak}
echo "日誌目錄:"${jarLog}
echo "*******************************************************"
 #檢查新報是否已經推送到本地,若是存在則進行後續操做
if [ "$(ls ${jenkins}/${jarName} 2> /dev/null | wc -l)" != "0" ]; then
 #備份文件
	oldJarName="`ls ${jarLib} | grep .jar | sort -nr | head -1`"
	echo "開始備份Jar包:"${jarLib}"/"${oldJarName}
	bakJarName=${oldJarName}$(date +%s)
	echo "備份"${jarLib}"/"${oldJarName}"到"${jarBak}"/"${bakJarName}
	cd ${deployDir}
	if [ "$(ls "lib/"*.jar 2> /dev/null | wc -l)" != "0" ]; then
		mv ${jarLib}"/"${oldJarName} ${jarBak}"/"${bakJarName}
		echo "備份Jar包成功"
	else
		echo "無Jar能夠備份"
	fi
	echo "複製新的包到指定的目錄"
	cd ${jenkins}
	echo "遷移新包到目錄:"${jarLib}
	cp ${jenkins}"/"${jarName} ${jarLib}
	echo "重啓服務:"${jarBin}
	cd ${jarBin}
 #將start.sh和restart.sh從/var複製到項目的bin目錄下
     cp /var/env/start.sh .
     cp /var/env/restart.sh .
     chmod 775 *
	sh restart.sh
else
	echo "找不到發佈包:${jenkins}/${jarName}"
	exit 1
fi
複製代碼

構建方式二:Publish插件方式

該構建方式基於插件Publish Over SSH,我叫作Publish插件方式。該方式jenkins服務器打包成jar再推送到模板服務器進行運行。

點擊新建任務

General基本配置

SSH 方式指定運行的節點爲master

源碼管理

須要去git拉取代碼而後編譯運行,須要添加身份信息用於訪問git

構建

調用頂層Maven目標
  • maven版本

    在【系統設置】【全局工具配置】中配置了maven環境,maven2是添加的maven環境的名稱

  • 目標

    經過maven命令進行單個模塊的構建

    clean package -pl zhirui-zuul-server/ -am -Dmaven.test.skip=true
    複製代碼

    若是是二級子模塊,構建命令以下:

    clean package -pl zhirui-wms-business/zhirui-handle-file-server/ -am -Dmaven.test.skip=true
    複製代碼
  • 配置文件和全局配置

    選擇默認的maven設置,也就是在【系統設置】【全局工具配置】配置的maven環境。

Send files or execute commands over SSH

這裏配置的是jenkins插件Publish Over SSH的參數配置。用於配置插件推送到模板應用服務器後的操做,好幾個路徑配置比較容易混淆,稍微理解下,而後本身多試試

在執行該步驟以前,須要在【系統管理】【系統設置】中添加的SSH server配置以下:

說明以下:

A:SSH Server業務服務器的ip

B和D:jenkins服務器推送jar到業務服務器的用戶賬號密碼信息

C:推送後到SSH Server後的jar存放的遠端基礎目錄,下文我會稱之爲遠端基礎目錄

在下面的SSH Server中關聯在【系統管理】【系統設置】中配置的SSH Server:

按上圖的紅框框編號進行說明:

  1. SSH Server 的name,表示在哪一個服務器執行
  2. 基於【系統管理】【系統設置】中jenkins中的主目錄``/var/lib/jenkins下的workspace,進行編譯後的jar包,位於jenkins服務器工做空間下。如,目錄全稱實際是/var/lib/jenkins/workspace/zhirui-zmgj-oauth-service/zhirui-oauth-service/target/zhirui-oauth-service-0.0.1-SNAPSHOT.jar。jenkins默認拼上了/var/lib/jenkins/workspace/zhirui-zmgj-oauth-service/, 其中zhirui-zmgj-oauth-service是本次構建的任務名稱
  3. 基於2中的目錄,將target前面的這個前綴去掉。
  4. Remote Directory是一個相對路徑, 須要和本次構建任務名稱保持一致,maven編譯後會將jar傳到目標服務器(也就是192.168.1.112服務器)遠端基礎目錄 + 任務名稱的目錄下,不一致會致使後面的shell腳本找不到jar。如,會將jar copy到的徹底路徑實際是/wms/services/jenkins/zhirui-zmgj-oauth-service/target,也就是下圖紅框框6位置的路徑。
  5. 應用服務器部署運行的目錄
  6. 相對4中相對路徑下jar的徹底路徑。用於copy到5中進行部署執行。

Exec command的腳本以下:

腳本說明:

  1. 按照實際狀況修改幾個發佈目錄工程名稱Jenkins推包目錄
  2. jarBin目錄下須要放置啓動shell腳本,先須要將兩個腳本 start.sh, 和 restart.sh 建立在/var/env目錄下,點擊查看啓動shell腳本
#!/bin/bash
 #發佈目錄(修改成對應的發佈目錄)
deployDir="/wms/services/zhirui-wms-erp-server"
#工程名稱(修改成對應的服務名稱)
jarName="zhirui-wms-erp-server-0.0.1-SNAPSHOT.jar"
 #Jenkins推包目錄
jenkins="/wms/services/jenkins/zhirui-wms-erp-server/target"
 #固定配置
jarLib=$deployDir"/lib"
jarBin=$deployDir"/bin"
jarBak=$deployDir"/bak"
jarLog=$deployDir"/logs"
 #目錄構建
if [ ! -d ${jarLib}"/" ];then
mkdir ${jarLib} -p
fi

if [ ! -d ${jarBin}"/" ];then
mkdir ${jarBin} -p
fi
	
if [ ! -d ${jarBak}"/" ];then
mkdir ${jarBak} -p
fi
	
if [ ! -d ${jarLog}"/" ];then
mkdir ${jarLog} -p
fi

echo "**********************基礎配置信息***********************"
java -version
echo "發佈項目:"${jarName}
echo "發佈目錄:"${deployDir}
echo "bin目錄:"${jarBin}
echo "lib目錄:"${jarLib}
echo "bak目錄:"${jarBak}
echo "日誌目錄:"${jarLog}
echo "*******************************************************"
 #檢查新報是否已經推送到本地,若是存在則進行後續操做
if [ "$(ls ${jenkins}/${jarName} 2> /dev/null | wc -l)" != "0" ]; then
 #備份文件
	oldJarName="`ls ${jarLib} | grep .jar | sort -nr | head -1`"
	echo "開始備份Jar包:"${jarLib}"/"${oldJarName}
	bakJarName=${oldJarName}$(date +%s)
	echo "備份"${jarLib}"/"${oldJarName}"到"${jarBak}"/"${bakJarName}
	cd ${deployDir}
	if [ "$(ls "lib/"*.jar 2> /dev/null | wc -l)" != "0" ]; then
		mv ${jarLib}"/"${oldJarName} ${jarBak}"/"${bakJarName}
		echo "備份Jar包成功"
	else
		echo "無Jar能夠備份"
	fi
 #複製新的包到指定的目錄
	cd ${jenkins}
	echo "遷移新包到目錄:"${jarLib}
	cp ${jenkins}"/"${jarName} ${jarLib}
 #重啓服務
	cd ${jarBin}
 #將start.sh和restart.sh從/var複製到項目的bin目錄下
  cp /var/env/start.sh .
  cp /var/env/restart.sh .
  chmod 775 *
	sh ./restart.sh
else
	echo "找不到發佈包:${jenkins}/${jarName}"
	exit 1
fi
複製代碼
服務器目錄和配置參數的對比關係:

感受這裏配置的路徑很複雜,我再嘗試說清楚,若是以爲比較繞,能夠跳過,多測試下便可。

配置的參數:

說明:

  1. 1紅框框和下圖1紅框框對應,填寫的是基於主目錄+workspace後的想到路徑

  2. 2.1,2.2紅框框和下圖2紅框框對應,填寫的是推送到應用服務器後jar的路徑。2.1紅框框是基於遠端基礎目錄的路徑,jar安裝2.1的配置推送到目標服務器,結果就是2.2紅框框的路徑。

  3. 3紅框框和下圖3紅框框對應,是圖中Exec command裏面配置的shell腳本執行後jar會拷貝到3紅框框的路徑進行執行,是程序實際的運行路徑。

應用服務器和jinkins服務器的一些目錄結構圖:

說明:

  1. jenkins服務器打包成jar後存放的在主目錄``workspace下的位置。
  2. 推送到業務服務器後,基於遠端基礎目錄後的位置。
  3. 業務服務器運行jar時,會執行shell腳本,執行後,拷貝到該位置後啓動。

業務服務器環境配置

除了jenkins服務器外,其餘的應用服務器都須要進行配置

設置程序用的環境變量

須要將setEnv.sh建立在/var/env目錄下, 下文的啓動和重啓腳本會加載/var/env/setEnv.sh

這些環境變量是在我程序的eureka server和configserver用到 , 因此須要配置。若是沒用到能夠不配置。

$vim setEnv.sh
#!/bin/bash
source ~/.bash_profile
export BUILD_ID=dontkillme
# for jdk env
#export JAVA_HOME=/usr/jdk1.8.0_112
#export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
#export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
# 指定profile
export ENV_OPTS="-Dconfig.profile=dev"
# 指定eureka地址
export WMS_EUREKA_SERVER_URL="http://192.168.1.254:8090/eureka/"
# 指定配置中心地址
export WMS_CONFIG_SERVER_URL="http://192.168.1.254:8861"
export WMS_DEVELOPER_NAME=""
export WMS_CONFIG_GIT_USER="config-read"
export WMS_CONFIG_GIT_PWD="config-read"
export WMS_CONFIG_GIT_URI="http://192.168.1.254:8000/config/config-file.git"
export WMS_CONFIG_GIT_SEARCHPATHS="dev"
複製代碼

設置啓動腳本和重啓腳本

環境介紹

手動或者jenkins推包後,應用程序實際目錄爲/wms/services,結構以下:

[root@localhost services]# ll
total 8
drwxr-xr-x. 11 root root 4096 Jul 24 19:02 jenkins   #SSH server的時候配置的目錄
----------.  1 root root  632 Jul  2 10:55 setEnv.sh  #須要添加的環境變量
drwxr-xr-x.  6 root root   99 Apr  9 18:08 zhirui-console-server
drwxr-xr-x.  6 root root   51 Jul  2 00:04 zhirui-oauth-service-zmgj
drwxr-xr-x.  6 root root   51 Jul  1 23:42 zhirui-platform-sysmanager-server-zmgj
drwxr-xr-x.  6 root root   51 Jul 24 17:57 zhirui-zmgj-oauth-service
drwxr-xr-x.  6 root root   51 Jul  1 19:28 zhirui-zmgj-server
drwxr-xr-x.  6 root root   51 Jul  1 23:09 zhirui-zuul-server-zmgj

複製代碼

進入其中一個應用項目下查看目錄:

  • bak:構建的時候自動備份以前jar的目錄
  • bin:須要兩個shell腳本,start.sh, restart.sh,。經過jenkins啓動時,兩個腳本須要預先放置在/var/env目錄下,會將/var/env下的start.sh和restart.sh複製到bin目錄下。若是手動啓動程序,須要手動在bin下添加。
  • lib:實際運行的jar,構建的時候會自動放到這裏
  • logs:存放日誌用,具體是否放日誌要看應用程序中log的路徑配置
[root@localhost services]# cd zhirui-zuul-server-zmgj/
[root@localhost zhirui-zuul-server-zmgj]# ll
total 4
drwxr-xr-x. 2 root root 4096 Jul 24 14:02 bak
drwxr-xr-x. 2 root root   40 Jul  1 23:09 bin
drwxr-xr-x. 2 root root   51 Jul 24 14:02 lib
drwxr-xr-x. 2 root root    6 Jul  1 23:09 logs
[root@localhost zhirui-zuul-server-zmgj]# 
複製代碼

腳本編寫

start.sh, restart.sh以下:

直接建立文件後複製粘貼便可,腳本中有加載上文的環境變量

source $DEPLOY_DIR/../setEnv.sh
複製代碼

兩個腳本須要受權:chmod 775 *

start.sh:

#!/bin/bash
source ~/.bash_profile
echo "Sping Cloud ops script.wms" 

function green() {
 echo -e "\033[32m$1 \033[0m"
}

function red() {
 echo -e "\033[31m$1 \033[0m"
}
 # set dir
cd `dirname $0`
DISK_DIR=/wms/logs
BIN_DIR=`pwd`
DEPLOY_DIR=`cd ..;pwd`
CONF_DIR=${DEPLOY_DIR}/conf
LIB_DIR=${DEPLOY_DIR}/lib
LOGS_DIR=${DEPLOY_DIR}/logs
LOGS_ROOTPATH=${DISK_DIR}/${SERVER_NAME}
 # set env
# source $DEPLOY_DIR/../setEnv.sh
source /var/env/setEnv.sh
# check config
 # set APP's OPT
JAR_NAME="`ls ${LIB_DIR} | grep .jar | sort -nr | head -1`"
# for jcdz project
RUN_JAR_PATH=${LIB_DIR}/${JAR_NAME}
# echo desc
echo "################################################################################"
java -version
echo "JAVA_HOME=$JAVA_HOME"
echo "DEPLOY_DIR=$DEPLOY_DIR"
echo "RUN_JAR_PATH=$RUN_JAR_PATH"
echo "################################################################################"
 # check process
PIDS=`ps -ef | grep java | grep "$LIB_DIR" |awk '{print $2}'`
if [ -n "$PIDS" ]; then
 red "ERROR: The [$DEPLOY_DIR:$SERVER_NAME] already started! PID is $PIDS!"
 exit 1
fi
 #init log
ERROR="-Dpro.log.level=ERROR"
 # init logs dir

if [ ! -d $LOGS_ROOTPATH ]; then
 mkdir -p $LOGS_ROOTPATH
fi

JAVA_OPTS="${ENV_OPTS} -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dfile.encoding=UTF-8"

JAVA_DEBUG_OPTS=""
if [ "$1" = "debug" ]; then
 JAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n "
fi
JAVA_JMX_OPTS=""
if [ "$1" = "jmx" ]; then
 JAVA_JMX_OPTS=" -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false "
fi
JAVA_MEM_OPTS=""
BITS=`java -version 2>&1 | grep -i 64-bit`
if [ -n "$BITS" ]; then
 JAVA_MEM_OPTS=" -server -Xms512m -Xmx512m -XX:MaxMetaspaceSize=512m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "
else
 JAVA_MEM_OPTS=" -client -Xms512m -Xmx512m -XX:MaxMetaspaceSize=512m  -XX:SurvivorRatio=2 -XX:+UseParallelGC "
fi

green "Starting the $SERVER_NAME ...\c"
nohup java -Dlog.rootPath=$LOGS_ROOTPATH $ERROR $JAVA_OPTS $JAVA_MEM_OPTS  -jar $RUN_JAR_PATH > /dev/null 2>&1 &
green "OK! \c"
PIDS=`ps -ef | grep java | grep "$LIB_DIR" | awk '{print $2}'`
green "PID: $PIDS"
green "LOGS_FILE: $LOGS_ROOTPATH"

複製代碼

restart.sh:

#!/bin/bash

function green() {
 echo -e "\033[32m$1 \033[0m"
}

function red() {
 echo -e "\033[31m$1 \033[0m"
}

DEPLOY_DIR=`cd ..;pwd`
LIB_DIR=${DEPLOY_DIR}/lib


echo "${LIB_DIR}"
 # check process
PIDS=`ps -ef | grep java | grep "${LIB_DIR}" |awk '{print $2}'`
if [ -n "$PIDS" ]; then
 red "ERROR:  already started! PID is $PIDS!"
 kill -9 "$PIDS"
 green "正在從新啓動。。。"
fi

sh ./start.sh
複製代碼

其餘操做

密碼重置

最近在操做Jenkins時,忘記了管理員密碼。只好重置了:

先中止tomcat服務,而後 vim /root/.jenkins/users/admin_***/config.xml 文件,

找到 字段,將裏面的內容替換爲:

#jbcrypt:$2a$10$MiIVR0rr/UhQBqT.bBq0QehTiQVqgNpUGyWW2nJObaVAM/2xSQdSq
複製代碼

這樣,管理員帳號的密碼就變成了123456,啓動tomcat,打開Jenkins登陸。

和項目管理工具jira集成

參考:blog.csdn.net/qq_40554364… 參考:blog.csdn.net/boonya/arti…

相關文章
相關標籤/搜索