『網際網路架構』軟體架構-jenkins搭建和 maven gitlab自動化部署流程(下)(六)
上次基本把環境都搭建好了,下一步就是開始完成整個流程的自動化部署。原始碼:https://github.com/limingios/netFuture/tree/master/jenkins/
環境回顧
應用 | IP地址 | 服務 | 埠 | 安裝應用 | 安裝方式 |
---|---|---|---|---|---|
gitlab | 192.168.66.100 | gitlab | 10080 | gitlab | docker |
jenkins | 192.168.66.101 | jenkins | 8888 | jdk8 maven3.2 git2.8 | shell |
nexus | 192.168.66.102 | nexus | 8081 | nexus | docker |
tomcat | 192.168.66.103 | tomcat | 8080 | tomcat | docker |
IP地址 | 埠| 使用者名稱|密碼|
| :——–: | :—–: | :—–: | :—–: |
| 192.168.66.100| 10080 | root|123456789qwe|
| 192.168.66.101| 8888| root |8d31833e277c4b579a3be35fe2bdc7d4|
| 192.168.66.102 | 8081 | admin|admin123|
| 192.168.66.103 | 8080 | ||
本地專案部署到100上gitlab
-
原生代碼
>程式碼比較簡單為的是流程
-
本地提交到gitlab上
>修改配置,可以非本地化提交程式碼
可以新建使用者建立倉庫,或者用root建立倉庫。
提示沒有上傳ssh 祕鑰
檢視本地的ssh祕鑰,window環境直接使用git bash
ssh-keygen -t rsa -C "[email protected]" cat /c/Users/Administrator/.ssh/id_rsa.pub
檢視jenkins的ssh祕鑰,101環境直接使
ssh-keygen -t rsa -C "[email protected]" cat /root/.ssh/id_rsa.pub
本地windows 和 101的jenkins新增完畢
本地windows 程式碼提交
git init git add . git commit -m "註釋語句" git remote add origin ssh://[email protected]:10022/root/idig8.git git push -u origin master
本地專案部署到101上 jenkins
- 全域性安全性配置
-
建立任務
口令隨意寫,等下要在gitlab做觸發設定
Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME
100 gitlab觸發器的設定
http://192.168.66.101:8888/job/idig8/build?token=123456
token的值就是jenkins上設定的。

等下有專門的對pipeline的編寫
儲存
101的配置私服nexus
cd .m2 pwd vi settings.xml
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"> <pluginGroups></pluginGroups> <proxies></proxies> <servers> <server> <id>nexus-releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>nexus-snapshots</id> <username>admin</username> <password>admin123</password> </server> </servers> <mirrors> <mirror> <id>nexus-releases</id> <mirrorOf>*</mirrorOf> <url>http://192.168.66.102:8081/nexus/content/groups/public</url> </mirror> <mirror> <id>nexus-snapshots</id> <mirrorOf>*</mirrorOf> <url>http://192.168.66.102:8081/nexus/content/repositories/snapshots</url> </mirror> </mirrors> <profiles> <profile> <id>nexus</id> <repositories> <repository> <id>nexus-releases</id> <url>http://nexus-releases</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> <repository> <id>nexus-snapshots</id> <url>http://nexus-snapshots</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>nexus-releases</id> <url>http://nexus-releases</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> <pluginRepository> <id>nexus-snapshots</id> <url>http://nexus-snapshots</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <activeProfile>nexus</activeProfile> </activeProfiles> </settings> ````  >安裝sshpass,ssh登陸不能在命令列中指定密碼。sshpass的出現,解決了這一問題。sshpass用於非互動SSH的密碼驗證,一般用在sh指令碼中,無須再次輸入密碼。 ``` bash yum -y install sshpass
測試gitlab和jenkins
正式編寫
- pipeline
#!groovy pipeline { agent any //環境變數, environment { REPOSITORY="ssh://[email protected]:10022/root/idig8.git" MODULE="idig8" SCRIPT_PATH="/root/" remoteHost_tomcat= '192.168.66.103' } //流水線是如何提前,都是通過很多個stages下面的stage stages { stage('獲取程式碼'){ steps{ echo " start fetch code from git ssh://[email protected]:10022/root/idig8.git" deleteDir() git "${REPOSITORY}" } } stage('程式碼靜態檢查') { steps{ echo " start code check" } } stage('編譯+單元測試') { steps{ echo " start compile" sh""" cd $workspace/idig8/common-parent/ mvn-U clean install -Dmvn.test.skip=true -Ptest """ } } stage('jar包上傳到nexus上') { steps{ echo " start maven update jar" sh""" cd $workspace/idig8/common-parent/common-utils mvn clean deploy cd $workspace/idig8/common-parent/common-dao mvn clean deploy cd $workspace/idig8/common-parent/common-service mvn clean deploy """ } } stage('移動目錄到使用者目錄下') { steps{ echo "mv idig8.war" sh""" mv -f $workspace/idig8/common-parent/common-web/target/common-web.war ${SCRIPT_PATH}${MODULE}.war """ } } stage('拷貝檔案到tomcat指定目錄下') { steps{ echo "scp 目標檔案" sh""" sshpass -p 'vagrant' ssh -p 22 -o stricthostkeychecking=no root@${remoteHost_tomcat} 'rm -rf /root/tomcat/tomcat-persistence/tomcat/data/${MODULE}*'; sshpass -p 'vagrant' scp -P 22 -o stricthostkeychecking=no ${SCRIPT_PATH}${MODULE}.war root@${remoteHost_tomcat}:/root/tomcat/tomcat-persistence/tomcat/data/${MODULE}.war; """ echo "打包完畢美滋滋 重新整理tomcat檢視吧" } } } }
只要push程式碼流水線自動開啟工作,真是美滋滋啊
結果20輪的pipeline的編寫終於成功了
刪除docker掛載的idig所有的目錄,然後替換新的jar包放進去
PS:完成自動化部署,終於完成了 ,在自己的虛擬機器環境下搞了3天,感覺好有成就感,首選shell指令碼部署學習,pipeline並不是那麼麻煩。裡面多半是用shell的方式搞定了,多虧自己搞了2年shell的開發。沒忘記,必須前2年瞭解的東西確定對自己的以後的路起關鍵作用。ssh的公鑰也在裡面起到了很重要的作用,希望老鐵按照我的思路可以輕鬆的完成部署。感謝老鐵的支援,本來想2篇寫在一起的,後來又拆開了,因為內容太充實了。為了搞這個每天懟到晚上2點,下班就搞不容易啊。那就拜了個拜~來不及握手!
>>原創文章,歡迎轉載。轉載請註明:轉載自IT人故事會,謝謝!
>>原文連結地址:上一篇:已是最新文章