環球焦點!Jenkins實現代碼的部署&回滾

2023-01-11 14:12:26 來源:51CTO博客

一、Jenkins介紹

Jenkins是一個獨立的開源軟件項目,是基于Java開發的一款CI(持續集成)&CD(持續交付)工具,用于監控持續重復的工作,旨在提供一個開放易用的軟件平臺。可用于各類自動化任務,比如構建、測試和部署軟件。 Jenkins只是一個調度平臺,其自身并不能完成項目的構建部署,需要借助各類插件實現各類構建部署。 Jenkins的特點如下:

開源免費跨平臺,支持所有平臺Master/slave支持分布式構建可視化管理頁面支持多種插件

二、Jenkins安裝和啟動

2.1 Java安裝?

Jenkins基于Java實現,需要安裝Java環境。命令如下:

apt-get -y install openjdk-11-jdk

2.2 Ubuntu 20.04環境下二進制包安裝Jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/debian-stable/jenkins_2.361.4_all.deb???dpkg -i jenkins_2.361.4_all.deb

2.3 啟動&初始化?

? 訪問??http://xxx.xxx.xxx.xxx:8080??


【資料圖】

初次登錄的密碼可以查看/var/lib/jenkins/secrets/initialAdminPassword文件?。

由于默認安裝插件需要連接國外的網站,故建議選擇插件安裝,先不安裝任何插件,后續做優化配置再去安裝就會快很多。而選擇安裝推薦的插件會安裝很慢,可以選擇不安裝。?

這里使用admin賬戶即可

三、Jenkins基礎配置

3.1 修改管理員密碼

點擊Admin下面的configure,修改密碼

3.2 修改Jenkins的啟動用戶

Jenkins默認使用Jenkins用戶啟動,會導致權限受限,需要修改為root啟動。 打開/lib/systemd/system/jenkins.service,做如下配置:

User=rootGroup=root

之后重啟Jenkins

3.3 Jenkins插件管理及安裝

插件安裝目錄位于/var/lib/jenkins/plugins目錄下

3.3.1 更改Jenkins的鏡像源為國內鏡像站

sed -i "s#updates.jenkins.io/download#mirror.tuna.tsinghua.edu.cn/jenkins#g" /var/lib/jenkins/updates/default.jsonsed -i "s#www.google.com#www.baidu.com#g" /var/lib/jenkins/updates/default.json

? 再將升級站點url替換成下面國內鏡像地址???https://mirror.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json??

3.3.2 安裝中文插件

之后等安裝成功后重啟Jenkins即可

3.4 Jenkins郵箱配置

點擊系統管理->系統配置,系統管理員郵件地址和SMTP中寫的用戶必須相同

?

測試發送郵件效果如下:

四、Jenkins實現CI&CD?

流程如下:

其中Jenkins需要做的就是從GitLab上拉取代碼,再將代碼傳到測試服務器。當然,實際工作中還要等測試通過了最終把代碼放到生產服務器。

4.1 創建自由風格的job

4.1.1 構建流程

新建任務。輸入任務名,選擇什么風格的項目,項目描述設置丟棄舊的構建。設置項目的構建產物保留多少天,項目最多保留多少產物,多余的自動刪除源碼管理。從倉庫下載源碼構建觸發器。定義自動構建的觸發器構建。即構建項目的具體過程,比如編譯、打包、部署等構建后操作。構建完成后可以執行的操作。比如郵件通知等

4.1.2 創建簡單的自由風格任務?

4.2 Jenkins與GitLab結合實現代碼下載?

4.2.1 安裝與GitLab相關的插件

4.2.2 基于ssh key拉取代碼

先在Jenkins服務器用ssh-keygen生成密鑰對,之后在GitLab中的具有項目訪問權限的賬號導入Jenkins服務器的公鑰

4.2.3 Jenkins服務器添加憑據

雖然Jenkins將root用戶的公鑰傳到GitLab服務器基于ssh key拉取代碼,但是Jenkins不能自動獲取root用戶的私鑰,從而無法直接在Jenkins中的項目直接連接GitLab倉庫。還需要將Jenkins服務器的root用戶的私鑰創建為Jenkins的憑據,便于后續連接GitLab。 Jenkins所支持的憑證類型如下:

用戶名和密碼(Username with password) SSH用戶名和私鑰(SSH Username with private key) Github App Secret file: 需要保密的文本文件,保存有Token等信息 Secret text:Token,串需要保密的文本,例如Github的API Token等 Certificate其它憑證類型還有二進制數據,或者更復雜形式的項目,例如OAuth憑證等

憑證的作用域決定了它可用的目標范圍

系統:作用于Jenkins系統自身,僅可用于系統和后臺任務,且一般用于連接到agent節點之上 全局:作用于Jenkins上的所有任務,以確保任務的正常執行 用戶:作用于用戶級別,僅生效于Jenkins中的線程代表該用戶進行身份驗證之時;

注意:在Jenkins內部,憑證被存放在JENKINS_ HOME目錄下的secrets目錄中,請務必確保該目錄的訪問 權限進行了正確的設置

添加憑據的過程如下:

4.2.4 Jenkins任務中使用憑據

使用基于key的憑據操作如下(注意代碼分支要指定正確):

點擊立即構建,查看構建結果

4.2.5 將代碼部署到后端服務器

后端服務器需要先安裝nginx。部署過程用腳本實現。腳本內容如下:

#!/bin/bashHOST_LIST="192.168.1.105192.168.1.106"APP_PATH=/var/www/htmldeploy () {  for i in ${HOST_LIST};do    scp -r * $i:${APP_PATH}/  done}deploy

啟動nginx后訪問后端頁面也正常

?

4.2.6 版本升級

在之前執行git clone的主機上執行如下操作,更新代碼

cd /root/wheel_of_fortunevim index.htmlgit add .git commit -m "2nd"git push -u origin main

之后在Jenkins再次構建,訪問后端頁面發現已經修改(至2nd版本)

4.2.7 版本回滾?

# git revert 撤銷某次操作,此次操作之前和之后的commit和history都會保留,并且把這次撤銷,作為一次最新的提交git revert HEADgit add. ;git commit -m "2nd-rollback";git push origin main

之后在Jenkins再次構建,查看后端頁面,已經修改為1st(2nd版本撤銷)的那一次

標簽: 服務器的 發送郵件 測試服務器

上一篇:天天短訊!視覺語言導航研究進展
下一篇:當前報道:【SpringBoot實戰專題】「開發實戰系列」從零開始教你舒服的使用RedisTemplate操作Redis數據