jenkins部署腳本
A. Jenkins自動發布-openssh7.1配置
在jenkins部署腳本自動發布的時候,在系統設置中,會用到jenkins插件ssh-plugin所帶的「ssh sites」模塊,但是如果目標伺服器的openssh是7.0版本的話,jenkins會不識別openssh7.0的演算法,導致jenkins一直會報「can not connect!」的錯誤。(如下圖)
我也是煞費苦心,研究了好多天才,查了無數的文檔,才得以解決。
首先,連接不上的原因,是因為openssh7.0更新了新的演算法,老版本不識別新版本的演算法。
其次,也有部分原因是jenkins插件的升級,相關插件及版本,如下圖。
最後,保證以上插件版本都沒問題的情況下,修改目標伺服器上面的/etc/ssh/sshd_config文件:
1.將 PasswordAuthentication 參數的值修改為yes,如果是注釋掉的,把注釋去掉。
2.在文件最下方添加:
Ciphers aes128-cbc,aes192-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr,3des-cbc,arcfour128,arcfour256,arcfour,blowfish-cbc,cast128-cbc
MACs hmac-md5,hmac-sha1,[email protected],hmac-ripemd160,hmac-sha1-96,hmac-md5-96
KexAlgorithms diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group1-sha1,[email protected]
Ps:Ciphers 指定SSH-2允許使用的加密演算法。
MACs 指定允許在SSH-2中使用哪些消息摘要演算法來進行數據校驗。
Kexalgorithms 指定可用的密鑰(密鑰交換)演算法。
以上就是所有的步驟了。現在,再去jenkins里看下是不是好了。呵呵噠。
為此,樓主可是高興了半天。
B. Jenkins自動化部署到多台伺服器配置
1:Jenkins秘鑰查看
需要查看秘鑰,
然後在 **.16.200.22和**.16.200.28伺服器的目錄下面將Jenkins秘鑰放到~/.ssh/authorized_keys文件里。
3:Jenkins自動化部署到多台伺服器腳本
library 'lib-base@master'
def map = [:]
//######傳參########
map.put('GIT_URL','http://172.16.0.1/FN-PM0091/cdd.git')
map.put('GIT_BRANCH','master')
map.put('GIT_CRED_ID','jenkins')
def archivelist=[]
archivelist.add('job-excutor/target/cdd1.jar')
map.put('ARCHIVE_FILE',archivelist)
// skywalking 服務目錄
def SKYWALKING_DIR = '/usr/local/apps/apache-skywalking-apm-bin-es7'
// skywalking oap 服務地址
def SKYWALKING_OAP_IP = '172.16.200.54'
def SKYWALKING_OAP_PORT = 11800
def deploylist=[]
deploylist.add("runjar -f 'cdd-service/target/cdd1.jar' -v '/data/cddm' -j '-Xms512m -Xmx512m' -h **.16.200.28")
deploylist.add("runjar -f 'report-executor/target/cdd1.jar' -v '/data/cddm' -j '-Dnacos.logging.default.config.enabled=false -Xms512m -Xmx512m' -h **.16.200.22")
map.put('DEPLOY_RUN',deploylist)
//################
DockerBuild("maven",map);
C. 如何使用jenkins設置每一天整點運行腳本
您可以按照以下步驟來:
登錄 jenkins
創建 job
在創建 job 過程中的Build Triggers 分類中勾選Poll SCM
填入以下代碼
TZ=Asia/Chongqing
0 * * * *
這樣做的好處:
每天整點都會自動觸發 job
中國時間來觸發
如果對答案滿意,請點個贊唄
By Xiak
D. Jenkins+Rancher自動化部署
本文主要記錄Jenkins+Rancher+k8s自動化部署相關配置說明,不涉及rancher和jenkins安裝部署,包含java server項目、WAR項目、前端VUE項目部署配置介紹。
伺服器環境信息:
需要在安裝jenkins服務上部署下面相應的軟體,請注意軟體版本,如已經安裝相關軟體,可跳過此章節。
需要安裝rancher-cli,並且使用jenkins用戶預先登錄rancher平台:命令參考:
--token:這個用戶的token建議設置為永不過期,在rancher管理端 -> api&key > 添加。
建議安裝阿里鏡像,提高編譯速度:
jenkins啟動用戶需要添加到docker組中:
項目主要是java和vue開發的,所以需要安裝Maven Integration plugin插件。
spring boot或者spring cloud自帶容器,以及其它服務類型的java後端應用部署。
1、填寫項目名稱,選擇"構建一個maven項目"
點擊下面"OK"按鈕
2、填寫項目描述信息
3、輸入項目地址,並選擇用戶憑證
本文通過conding.net作為代碼管理平台,點擊"Add"添加自己賬號憑證(輸入coding.net平台登陸賬號密碼即可)。
4、配置maven編譯腳本
5、編寫rancher部署腳本
Dockerfile參數說明:FROM:選擇基礎鏡像包,該項目是用java語言開發需要jdk1.8所以選擇openjdk:8ADD:將bRule-deploy-1.0.0.tar.gz文件解壓並上傳到鏡像的brule目錄EXPOSE:容器內部啟動2002埠,根據自身項目填寫指定埠,多個埠填寫多行EXPOSE標簽ENTRYPOINT:容器啟動時執行的命令,執行多條命令使用&&拼接,命令行中帶&需要加上轉移符\&,使用tail -fn監聽應用日誌,以便容器日誌查看。
用於創建docker鏡像,就好比創建一個已經安裝並且配置好了應用程序的操作系統鏡像。
參數說明:192.168.100.21:5000:為本地docker鏡像伺服器地址brule:latest:應用名稱,根據自身項目名稱修改
利用上面創建好的操作系統鏡像啟動一個vmware虛擬機,創建k8s容器。
參數說明:brule:應用名稱,根據自身項目名稱修改,應用名稱規范?(.?)*image:剛才創建的docker鏡像containerPort:容器啟動埠,多個埠使用多行containerPort標簽聲明,埠限制在【30000-32000】
前面vmware虛擬機創建好後,怎麼能讓別人訪問?這個時候就需要創建一個網路服務,用於打通路由器與vmware本地虛擬機的網路。
參數說明:brule:應用名稱,根據自身項目名稱修改port:容器啟動埠nodePort:對外提供服務埠,外部機器訪問
將上面配置好的shell腳本復制到Post Steps -> 執行shell文本域中,並點擊"保存" -> "立即構建"即可部署。
1、進入剛才創建好的jenkins任務,點擊立即構建
2、點擊左下角構建任務,選擇"Console Output",查看構建日誌
3、登錄rancher管理平台,查看構建好的應用
基於J2EE項目的war包部署,前面操作都一致,只是shell部署腳本稍有不同,這里主要詳細說明rancher部署腳本。
Dockerfile參數說明:FROM:選擇基礎鏡像包,war統一使用tomcat容器部署,tomcat:8.5-jre8-slimADD:將operation.war文件解壓並上傳到鏡像的/usr/local/tomcat/webapps/目錄EXPOSE:容器內部啟動8080埠,根據自身項目填寫指定埠,多個埠填寫多行EXPOSE標簽
這里不需要配置ENTRYPOINT標簽,因為tomcat鏡像包中已經有了。
用於創建docker鏡像,就好比創建一個已經安裝並且配置好了應用程序的操作系統鏡像。
參數說明:192.168.100.21:5000:為本地docker鏡像伺服器地址operation:latest:應用名稱,根據自身項目名稱修改
利用上面創建好的操作系統鏡像啟動一個vmware虛擬機,創建k8s容器。
參數說明:operation:應用名稱,根據自身項目名稱修改image:剛才創建的docker鏡像containerPort:容器啟動埠,多個埠使用多行containerPort標簽聲明,埠限制在【30000-32000】
前面vmware虛擬機創建好後,怎麼能讓別人訪問?這個時候就需要創建一個網路服務,用於打通路由器與vmware本地虛擬機的網路。
參數說明:operation:應用名稱,根據自身項目名稱修改port:容器啟動埠nodePort:對外提供服務埠,外部機器訪問
將上面配置好的shell腳本復制到Post Steps -> 執行shell文本域中,並點擊"保存" -> "立即構建"即可部署。
基於webpack構建的VUE項目部署,前面操作都一致,只是shell部署腳本稍有不同,這里主要詳細說明rancher部署腳本。
Dockerfile參數說明:FROM:選擇基礎鏡像包,前端統一使用tomcat容器部署,tomcat:8.5-jre8-slimCOPY:將/dist目錄上傳到鏡像的/usr/local/tomcat/webapps/fastquery/目錄EXPOSE:容器內部啟動8080埠,根據自身項目填寫指定埠,多個埠填寫多行EXPOSE標簽
這里不需要配置ENTRYPOINT標簽,因為tomcat鏡像包中已經有了。
用於創建docker鏡像,就好比創建一個已經安裝並且配置好了應用程序的操作系統鏡像。
參數說明:192.168.100.21:5000:為本地docker鏡像伺服器地址operation:latest:應用名稱,根據自身項目名稱修改
利用上面創建好的操作系統鏡像啟動一個vmware虛擬機,創建k8s容器。
前面vmware虛擬機創建好後,怎麼能讓別人訪問?這個時候就需要創建一個網路服務,用於打通路由器與vmware本地虛擬機的網路。
參數說明:shutcm-fastquery-web:應用名稱,根據自身項目名稱修改port:容器啟動埠nodePort:對外提供服務埠,外部機器訪問
將上面配置好的shell腳本復制到Post Steps -> 執行shell文本域中,並點擊"保存" -> "立即構建"即可部署。
E. Jenkins打包後續:Shell腳本自動修改build號,並提交TestFlight
1、自動修改Build號,並生成提交,push到遠程分支上;
2、開始打Release包,並導出IPA文件;
3、利用Application Loader插件實現自動上傳。
前提:Jenkins相關配置已經完成,發布證書、本地Git用戶、push到Git上的許可權賬戶等都已配置完成,如果配置未完成,部分錯誤在後面會出現,再補上也OK。
(1)先取到當前Build號,Shell中讀取plist文件的方法比較簡單,利用的是Mac中操作plist文件的PlistBuddy,路徑在/usr/libexec/PlistBuddy下,這點在之前的文章中寫過: Jenkins 自動打包後打一個tag並同步到origin 。
(2)將版本號(示例:1.0.8.3)先分割字元串,取到最後一個元素(可能會是2位數字或者3位數字),然後把最後一個元素轉數字,再 +1 ,再轉回字元串。
(3)進行字元串拼接,最終效果:1.0.8.4
(4)將新的Build號寫入info.plist文件
(1)生成提交描述:
(2)到對應的Git目錄下進行Git操作
寫成兩個Shell步驟即可:
這點在之前的Jenkins文章中寫過了,主要是利用xcbuild命令去做的,這里要注意的就是打包的類型要又debug改為release即可。
F. jenkins執行python腳本問題
一般有三種方法:
1.安裝執行python的插件:Python Plugin,安裝後在配置那裡就可以看到以下的選項,可以在Script部分直接寫python代碼
G. jenkins上使用shell腳本nohup部署jar服務到remote伺服器
先貼一下,我的jenkins里最後核心配置
remove_jar.sh腳本:
start_jar.sh腳本內容:
remove_jar.sh 和 start_jar.sh 在jenkins伺服器上,需要將這兩個shell在0.0.0.0(不能暴露)的遠端去執行
沒錯,客官您一眼就看出來了派行,覺得簡單的不值一提吧,先別著急,對搜這個問題的滑歲小菜雞來說這裡面也是大有文章,聽我一一道來。
1、第一個問題:ps -ef|grep xxx.jar查到多餘的pid
現象:在0.0.0.0上行 ps -ef | grep alk-wxapi-test.jar | grep -v grep | awk '{print $2}' 只能查到一個pid,但是把這句話放到shell腳本里,在本地使用命令上遠端執行,就會找到3個pid,而且kill 時提示失敗的錯誤。
現在已經知道原因了,但是當時確實是個問題。
已經解決不方便復現了,因此就描述一下就行了。
原因:shell里的這個命令也是通過bash在遠程執行的,所以找到的別的 無關緊要 的pid其實是bash,因此在grep是除了排除grep本身( grep -v grep )外還要排除bash( grep -v bash )
最後命令是:
2、遠程執行腳本,裡面有nohup java -jar,發生錯誤: nohup: failed to run command 『java』: No such file or directory
這是因為nohup時java環境變數沒有讀到,處理方式就是在nohup執行前加入
3、其他思路
4、第二條說jdk的路徑因為每個服務企業都不一樣,所以需要手動傳改,這一點已經在腳本上做了修改,啟動腳本上信羨睜攜帶的第一個參數就是jdk的安裝路徑
這兩個也都是比較好的思路,以後肯定有機會體驗的,本篇到此。
ps -ef |grep -v 在shell sh 腳本中貌似無效?
linux下搭建zookeeper集群遇到的坑
nohup: cannot run command異常解決
Zookeeper not starting, nohup error
H. jenkins執行shell腳本,使用scp免密傳輸失敗問題
問題:Jenkins默認使用jenkins用戶去啟動,jenkins用戶並沒有許可權去執行ssh免沒巧襪密登陸,所以導致執行失敗
註:配置linux雙機互信後,jenkins也需要將公鑰加入到目標機器,才能達到shell腳本中scp免密傳輸的條件
一、驗證登錄
1、切換jenkins用戶
# su jenkins
切換後還是root賬號
2、分析解決:
2.1 應該枯激是/etc/passwd文件中的/bin/bash被yum安裝的時候變成了/bin/false
# vim /etc/passwd
jenkins:x:990:988:Jenkins Automation Server:/var/lib/jenkins:/bin/false( bash)
將bin/false改為/bin/bash
再次執行切換
# su jenkins
bash-4.1$
2.2 結果命令提示符的用戶名不是jenkins而變成了 bash-4.1$,原因是在安裝jenkins時,jenkins只是創建了jenkins用戶,並沒有為其創建home目錄
# vim ~/.bash_profile
在文件的最後添加 export PS1='[\u@\h \W]\$',執行文件使修改項起作用
# source ~/.bash_profile
驗證是否成功 # su jenkins
二、為jenkins系統用戶開啟免密登錄
1、在Jenkins的使用過程中,如果在腳本中使用到sudo命令,有可能出現如下所示的錯誤:
sudo: no tty present and no askpass program specified
這是因為Jenkins伺服器在執行sudo命令時的上下文有誤,導致這個命令執行的異常。
2.1 解決方法:
# sudo visudo
在文件末尾加上jenkins ALL=(ALL) NOPASSWD: ALL
2.2 重啟jenkins,測試
# su jenkins
# sudo su -s /bin/bash jenkins
測試成功,jenkins免密登錄成功。
PS:如果誤操作修改了/etc/sudoers的許可權來修改上述文件,則會導致如下所示的錯誤:
sudo :/etc/sudoers is world writable
sudo : no valid sudoers source found, quitting
sudo : unable to initialize poling plugin
這是Linux的一種保護機制。因此,如果出現上述誤操作,則需要執行如下命令來解決:
$ pkexec chmod 0440 /etc/sudoers
三、jenkins用戶開通ssh免密登錄
1、安裝ssh
# yum install ssh
1.1 將ssh服務設置開機自啟寬猛
# sudo systemctl enable sshd
1.2 啟動ssh
# sudo systemctl start sshd
2、生成jenkins用戶秘鑰證書
# su jenkins
# ssh-keygen -t rsa
2.1 查看是否生成成功
# /var/lib/jenkins/.ssh/
# ls
3、將公鑰傳輸到目標linux系統
ssh--id -i /var/lib/jenkins/.ssh/id_rsa.pub root@目標ip:path
------------------------------------------------------------------------------------------
參考:https://blog.csdn.net/weixin_43840640/article/details/90371472