一、關(guān)于Jenkins
Jenkins介紹
Jenkins 是一個用 Java 編寫的開源自動化工具,帶有用于持續(xù)集成的插件。用于持續(xù)構(gòu)建和測試您的軟件項目,從而使開發(fā)人員更容易將更改集成到項目中,并使用戶更容易獲得新的構(gòu)建。它還允許您通過與大量測試和部署技術(shù)集成來持續(xù)交付軟件。
Jenkins 集成了各種開發(fā)生命周期過程,包括構(gòu)建、文檔、測試、打包、模擬、部署、靜態(tài)分析等等。
Jenkins 借助插件實現(xiàn)了持續(xù)集成。插件允許集成各種 DevOps 階段。如果要集成特定工具,則需要安裝該工具的插件。例如 Git、Maven、Node 項目等。
Jenkins工作流程
- 開發(fā)者在本地開發(fā),然后提交到 Source Respository 中,
- 觸發(fā) GitHub 或者 GitLab 配置的鉤子函數(shù)程序,繼而通知 Jenkins
- Jenkins 收到通知,會通過 Git/SVN 插件,重新從項目配置中的代碼倉庫中拉取最新代碼,放置于 Workspace (Jenkins 存放任務(wù)的目錄)
- 之后重新觸發(fā)構(gòu)建任務(wù),Jenkins 有很多的構(gòu)建的插件,Java 常用的 Maven 、Gradle,前端的 Node 等
- 如果有安裝發(fā)送郵件的插件并且進(jìn)行了配置,那么可以在項目中進(jìn)行配置,構(gòu)建失敗或者成功都可以選擇是否給開發(fā)者發(fā)送郵件
- 構(gòu)建成功后,Jenkins 會通過一個 SSH 插件,來遠(yuǎn)程執(zhí)行 Shell 命令,發(fā)布項目,在項目中可以配置多臺服務(wù)器,也就可以一次性部署到多臺服務(wù)器上去。
- 當(dāng)然很多時候,構(gòu)建成功后,并不會直接部署到服務(wù)器上,而是打包到另外一臺服務(wù)器上存儲(應(yīng)用服務(wù)器)或者存儲為軟件倉庫中的一個新版本。
關(guān)于持續(xù)集成和持續(xù)部署
持續(xù)集成:CI 是一種開發(fā)實踐,其中開發(fā)人員一天幾次將代碼集成到共享存儲庫中。當(dāng)有人將新代碼推送到共享存儲庫中時,測試會在非開發(fā)人員(測試人員)的計算機(jī)上自動運(yùn)行。這種純手動的構(gòu)建測試,效率非常的低,開發(fā)人員必須等待測試人員的反饋后才知道結(jié)果,如果錯了,還要修改 bug , 這個過程一方面需要溝通成本,另外一方面效率是非常低的.
持續(xù)部署:我們都知道,項目最終是會部署到服務(wù)器上去,在沒用 Jenkins 之前,大都是我們或?qū)I(yè)的運(yùn)維將項目進(jìn)行部署。如果項目非常多或者部署完后出現(xiàn) bug,需要人手動的一個個部署或者能力強(qiáng)些的大佬,就是用腳本文件部署,但是看起來還是非常麻煩.
二、Docker部署Jenkins
1.拉取鏡像
這里注意,需要拉取 jenkins/jenkins 不能直接拉取 jenkins 會存在插件包找不到的問題;
docker pull jenkins/jenkins:lts
2.啟動容器
創(chuàng)建本地映射文件夾
mkdir -p /opt/jenkins/workspace
這里默認(rèn)把容器內(nèi)8080端口映射到本地9001端口,8069是我們開發(fā)代碼的端口,因此我這里也映射出來,不需要可以不用映射
docker run -uroot -d --restart=always -p 9001:8080 -p 8069:8069\
-v /opt/jenkins/workspace/:/var/jenkins_home/workspace \
-v /var/run/docker.sock:/var/run/docker.sock \
--name jenkins jenkins/jenkins:lts
查看是否啟動成功
docker ps
3.配置Jenkins插件
Jenkins安裝成功后通過訪問主頁即可進(jìn)行環(huán)境配置,如下圖所示;
訪問主頁
地址:http://192.168.1.102:9001/
查看管理員密碼
# 進(jìn)入jenkins容器
docker exec -it jenkins /bin/bash
# 獲取密碼
cat var/jenkins_home/secrets/initialAdminPassword
安裝插件
選擇安裝推薦的插件,也可以自定義選擇插件(新手不建議),如果第一步拉取的鏡像是jenkins這里就會找不到依賴插件;
等待安裝完成:
這里可以不用設(shè)置 點(diǎn)擊下面的使用admin賬號繼續(xù)即可
這是Jenkins主界面:
配置Jenkins密鑰
這里配置密鑰的作用是為了取gitlab或其他代碼平臺拉取代碼;
進(jìn)入到j(luò)enkins容器中,執(zhí)行
# 進(jìn)入jenkins容器
docker exec -it jenkins /bin/bash
# 執(zhí)行生成秘鑰,輸入后一路回車
ssh-keygen -t rsa -C "root"
# 查看公鑰
cat /root/.ssh/id_rsa.pub
拿到公鑰后放到gitlab中,并點(diǎn)擊添加密鑰按鈕
測試下拉取項目,顯示可以拉取成功即可
git clone http://xxxxxx.git
三、配置Jenkins環(huán)境(插件安裝、添加憑據(jù)、系統(tǒng)配置、全局工具配置)
配置jenkins,點(diǎn)擊manager jenkins可以查看到配置中心的設(shè)置,點(diǎn)擊plugins
安裝Maven插件
安裝SSH插件
等待安裝完成;
添加憑據(jù)
憑據(jù)就是賬號密碼,是統(tǒng)一管理賬號密碼的位置,可以添加gitlab的賬號密碼,也可以添加服務(wù)的用戶名密碼等;可以根據(jù)自己的需要新增和刪除;
重復(fù)再添加服務(wù)器的賬號和密碼憑據(jù)
顯示效果如下:
系統(tǒng)配置:
系統(tǒng)配置是為了
找到兩個配置:
1、SSH remote hosts
2、SSH Servers
全局工具配置
配置JDK 和MAVEN
docker安裝的Jenkins的話JDK使用默認(rèn)的,Maven在線安裝即可
四、Jenkins部署Maven項目
新建項目
項目配置
通用配置
源碼管理
這里填寫我們倉庫的地址,票據(jù)那里選擇我們上面填寫的gitlab憑據(jù),也可以自己在添加憑據(jù),指定分支這里要注意,gitlab的分支是*/main 這個和github不一樣
構(gòu)建觸發(fā)器
在高級里找到generate按鈕獲取Secret令牌,這個令牌在gitlab設(shè)置webHook時需要用到
Build
這里添加參數(shù)的意思是在編譯過程中不執(zhí)行測試類
clean package -Dmaven.test.skip=true
Post Steps
這部分的設(shè)置是指在jenkins編譯打包完成后執(zhí)行的步驟,我這里執(zhí)行shell腳本來啟動jar包
添加構(gòu)建完成后執(zhí)行shell腳本:
# 這行代碼意思是告訴jenkins不要將這個運(yùn)行程序自動殺掉
BUILD_ID=dontKillMe
echo "停止已經(jīng)運(yùn)行的項目"
# 查找正在運(yùn)行的程序并kill掉
ps -ef |grep datasimulationsys-0.0.1-SNAPSHOT.jar |grep -v "grep" |grep -v "/bin/sh"|awk '{print $2}'| xargs kill -9
echo "啟動新項目"
# 進(jìn)入到target目錄并啟動jar包
cd /var/jenkins_home/workspace/fz/target
nohup java -jar datasimulationsys-0.0.1-SNAPSHOT.jar >> aa.txt &
echo "項目啟動成功"
五、Gitlab設(shè)置webHook
打開gitlab,找到項目-設(shè)置-webhook,點(diǎn)擊添加webHook,將上面獲取到的webHook地址和令牌拿到并粘貼到這里,然后出發(fā)來源設(shè)置所有分支(這里可以根據(jù)實際使用分支來進(jìn)行設(shè)置),如果不是SSL就取消SSL驗證,然后點(diǎn)擊保存更改,點(diǎn)擊測試驗證是否通過;
點(diǎn)擊測試,如果出現(xiàn)200成功則連接成功,如下圖所示,然后去jenkins中查看是否進(jìn)行了構(gòu)建,
通過查看Jenkins查看到已經(jīng)構(gòu)建成功了:
六、常見問題
An error occurred during installation: No such plugin: cloudbees-folder
提示報錯,因為下載的Jenkins.war里沒有cloudbees-folder插件
正確解決辦法
# 拉取這個鏡像,不要拉取jenkins鏡像就可以了;
docker pull jenkins/jenkins:lts
其它方法,我使用jenkins鏡像后仍然無法解決
下載插件:http://ftp.icm.edu.pl/packages/jenkins/plugins/cloudbees-folder/
選擇合適的版本下載并上傳到j(luò)enkins容器內(nèi)
將cloudbees-folder.hpi放在/usr/local/tomcatJenkins-8090/webapps/jenkins/WEB-INF/detached-plugins即可,
具體存放的地址可以自行搜索:
find / -name detached-plugins
然后訪問以下地址重啟jenkins: http://192.168.1.102:9001/restart
重啟后仍然報錯;
Url is blocked: Requests to the local network are not allowed
如果webHook報如下異常:Url is blocked: Requests to the local network are not allowed
那么在gitlab中添加以下設(shè)置即可:
接著左側(cè)菜單欄-settings-network-outbound requests,選中 Allow requests to the local network from web hooks and services并保存即可
文章來源:http://www.zghlxwxcb.cn/news/detail-832594.html
Hook execution failed: Failed to open TCP connection to xxxx:9001
gitlab無法訪問到指定IP和端口,檢查網(wǎng)絡(luò)配置和防火墻設(shè)置;文章來源地址http://www.zghlxwxcb.cn/news/detail-832594.html
到了這里,關(guān)于Jenkins+gitlab實現(xiàn)自動化部署的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!