一、環境以及工具信息
1. 3台服務器信息
jenkins: 192.168.123.163、serverA:192.168.123.130、serverB :139.198.17.241三台機器都是ubuntu16.04系統
所需jenkins插件工具:Publish Over SSH、Maven Integration plugin、git plugin、Git Parameter Plug-In
ssh工具:sshd
jenkins版本為2.17
二、搭建目標

1. 實現可選git分支以及拉取最新代碼
2. 實現選擇不同環境發布jar部署到對應的機器上
三、構建
1. 安裝插件:Publish Over SSH、Maven Integration plugin、git plugin
2. jenkins機器配置
a. 安裝jdk8
b.配置maven路徑,下載tar.gz,解壓即可
3. 配置系統管理-》全局工具配置
只需要配置jdk和maven,其他都默認即可


4. 配置系統管理-》系統設置

passphrase/password:為你輸入的密碼

241配置 ,key為你jenkins機器的本地私鑰,passphrase/passwd值可以刪掉,這里要注意:必須將本地私鑰完整內容拷貝,包括----字符

5. 部署配置
5.1 新建任務,由於我這里已經創建忽略此步驟

5.2 選中general里的參數化構建過程,點擊git parameter和選項參數,前者是配置不同git分支,后者是選中不同環境


5.3 配置git
注意將branch spec改為:$BRANCH,否則git只會找master分支

5.4 構建觸發器

5.5 配置post steps
此步驟實現文件上傳、jar啟動,執行shell腳本
a. 選中send files or execute commands over ssh
b. 配置server
c. 選中server里的高級 選中lable
d. 選中外層的高級 配置 參數化發布


Remove prefix:刪除目錄前綴,填target表示不創建target目錄
Remote directory:文件發送到遠程服務器的哪個目錄下。這里跟你系統設置里的工作目錄關聯,會在對應的remote directory 目錄下創建Kepler..目錄。
Exec command:文件發送到遠程服務器后,在遠程服務器上執行的命令

附上shell內容:masterKepler.sh
# jar包路徑 JAR_PATH='/data/app/KeplerMockDevice' #Jenkins中編譯好的jar名稱 jar_name=KeplerMockDevice-0.0.1-SNAPSHOT.jar cd ${JAR_PATH} #模糊查詢指定jar服務的進程id pid=`ps -ef|grep Mock|grep -v grep|awk '{print $2}'` if [ -n "$pid" ] then echo '163 mock The pid: server' $pid ' will be killed....' sudo kill -9 $pid echo '163 mock The pid: server' $pid ' will be start' nohup java -jar ${JAR_PATH}/${jar_name} & else echo '163 mock The pid: server' $pid ' not exist , will be start' nohup java -jar ${JAR_PATH}/${jar_name} & fi echo '163 mock The pid: server' $pid ' started'
6. 保存
四、發布
選中項目下的git parameters,選中分支BRANCH,選中環境ENV發布。最后就可以享受成果了。
五、常見問題
1.jenkins 徹底解決sudo sudo: no tty present and no askpass program specified
方案:
a. chmod 600 /etc/sudoers
b.vim /etc/sudoers 改成下列值
%root ALL=(ALL) NOPASSWD: ALL
%sudo ALL=(ALL) NOPASSWD: ALL
c.添加jenkins Linux account到root 組中:
usermod -a -G root jenkins
運行id jenkins 查看jenkins Linux account是否已經屬於root 組
d.重啟jenkins
2. 配置ssh remotes hosts報Can't connect to server
方案:
- 本地機器秘鑰生成不對
- 必須將本地私鑰完整內容拷貝,包括----字符
- 生成秘鑰時候的密碼錯誤
3. There were errors checking the update sites: UnknownHostException: updates.jenkins.io
方案:沒有外網導致
參考自:
https://www.jianshu.com/p/6288703532cf
