本地Jenkins.war+SVN實現全自動化持續整合

YF-GX發表於2024-03-29

本地Jenkins+Tomcat+SVN持續整合
準備工作:
Jenkins.war包

tomcat9

JDK19

SVN

Jenkins官網下載:

https://www.jenkins.io/download/
Tomcat下載

https://tomcat.apache.org/
image-20240327142646762

SVN下載

https://tortoisesvn.en.softonic.com/
DJK下載

https://www.oracle.com/java/technologies/downloads/

一、配置JDK環境變數
設定---》系統資訊---》高階系統設定---》環境變數,在系統變數裡新建JAVA_HOME,在path裡中新增%JAVA_HOME%\bin

image-20240327143723872

image-20240327143835085

檢查JDK的環境變數是否配置成功,開啟cmd,java -version

image-20240327144130827

二、配置Tomcat的
解壓apache-tomcat-9.0.87-windows-x64.zip,把解壓後的tomcat放在一個沒有中文的路徑下

image-20240327144714684

進入bin目錄,找到startup.bat,雙擊啟動,訪問http://localhost:8080/能正常開啟如下介面,說面tomcat已配置好

image-20240327145541974

三、Jenkins相關設定
1、解鎖Jenkins
把jenkins.war放到tomcat中的webapps裡,點選startup.bat重啟,訪問http://localhost:8080/Jenkins,如能開啟以下介面,則證明Jenkins環境已配置好

image-20240327154921684

管理員密碼:複製下面密碼上去,點選繼續

image-20240327142107180

2、安裝外掛
選擇預設第一個:安裝推薦的外掛即可

image-20240327155021360

跳轉到如下介面,jenkins會自動安裝頁面中顯示的外掛,根據你的網路情況,這個過程會持續數分鐘。

image-20240327155100896

3、建立第一個管理員使用者
外掛安裝完後會自動跳入管理員建立頁面:

image-20240327155634767

4、Jenkins配置URL:
使用預設的Jenkins url即可

image-20240327155733037

點選開始使用Jenkins按鈕

image-20240327155814227

成功進入Jenkins介面

image-20240327155837048

5、修改Jenkins登入密碼
由於初始密碼比較長,不好記。 滑鼠移動到右上角使用者名稱上,點選,然後再下拉選擇框點選設定(configure),進入設定頁面,找到password,填寫新密碼,點選save。

image-20240327142316214

image-20240327152612658

密碼修改成功,退出重新登入

image-20240327160046511

6、安裝相關外掛
點選Manage Jenkins ---》Manage Plugins---》Available

再搜尋框中輸入:Subversion回車,勾選---》安裝

image-20240327160138685

7、新建專案
點選新建item

image-20240327160322103

填寫任務名稱,選擇第一個自由風格即可,點選確定

image-20240327160409778

設定保持構建的天數和保持構建的最大個數

image-20240327160540161

原始碼管理

選擇Subversion,Repository URL填寫SVN的遠端倉庫地址

image-20240327160810676

Credentials--》點選新增Jenkins,型別選擇使用者名稱和密碼,新增完成後,點選新增

image-20240327160857513

點選Credentials下拉選擇框選擇剛才新增的使用者名稱和密碼

image-20240327161051046

往下翻,到:Check-out Strategy,有5個選項供選擇,預設選擇第一個即可。

image-20240327161158506

1、Use‘svn update’ as much as possible

(1)第一次釋出把工作空間清空,然後checkout一份到工作空間

(2)以後更新的時候只要svn裡面的檔案沒有更新就用工作空間的,如果SVN中有檔案更新則會同步到工作空間中。

(3)有個侷限就是工作空間的檔案內容修改了跟svn不一樣了,也不會更新了,不過一般不會修改工作空間的檔案內容

(4)svn刪除了檔案,工作目錄也會刪除

2、Always check out a fresh copy

(1)第一次釋出把工作空間清空,然後checkout一份到工作空間

(2)以後的每一次更新都清空工作空間然後checkout一份下來。也就是說svn裡有一個檔案更新,也會把整個目錄checkout一次到工作空間

3、Do not touch working copy, it is updated by other script.

(1)不要更新工作空間,由其他控制更新

4、Emulate clean checkout by first deleting unversioned/ignored files,then ‘svn update’

(1)第一次釋出把工作空間清空,然後checkout一份到工作空間

(2)以後更新的時候會判斷工作目錄下的檔案是否在svn裡存在,不存在則刪除,存在且SVN有新版本則更新,沒有新版本則不更新

(3)如果工作空間目錄被修改了,則不管有沒有新版本都會checkout下svn中的最新版本

(4)svn刪除了檔案,工作目錄也會刪除

5、Use‘svn update’ as much as possible,with ‘svn revert’ before update

(1)第一次釋出把工作空間清空,然後checkout一份到工作空間

(2)以後更新的時候不會判斷工作目錄下的檔案是否在svn裡存在

(3)如果工作空間目錄被修改了,則不管有沒有新版本都會checkout下svn中的最新版本

(4)svn刪除了檔案,工作目錄也會刪除
————————————————

設定Poll SCM

設定每分鐘輪詢一次,主要監測程式碼迭代更新,如果有新版本,則構建,否則,不構建

image-20240327161442809

新增構建步驟

由於我們的Jenkins部署在本地,所以選擇:Execute Windows batch command即可,填寫:python main.py執行專案

image-20240327161634485

image-20240327161816822

點選儲存,專案新增完成,點選Build Now立即構建啟動專案,第一次構建,會先去SVN遠端倉庫拉取程式碼到Jenkins本地的工作空間

image-20240327161950347

專案啟動成功,正在執行

image-20240327162133961

實現當有新的迭代程式碼提交時,Jenkins能夠自動構建,並且在構建完成後自動觸發下一個構建。實現一個連續的自動化流程,而不需要手動干預

1、建立Pipeline專案,命名為:Aci-EM_Pipeline

image-20240329151703780

2、配置

設定不允許併發構建(Do not allow concurrent builds)

設定輪詢 SCM(時間根據實際需求設定)

編寫Pipeline script指令碼

pipeline {
agent any

stages {
    stage("Autotest") {
        steps {
            script {
                // 檢出程式碼
                checkout([$class: 'SubversionSCM', 
                          additionalCredentials: [], 
                          excludedCommitMessages: '', 
                          excludedRegions: '', 
                          excludedRevprop: '', 
                          excludedUsers: '', 
                          filterChangelog: false, 
                          ignoreDirPropChanges: false, 
                          includedRegions: '', 
                          locations: [[
                              credentialsId: '238c9f81-94f9-4dec-bb25-af703b470422', 
                              depthOption: 'infinity', 
                              ignoreExternalsOption: true, 
                              local: '.', 
                              remote: 'https://svn.svnbucket.com/AciMicro_W1/Aci_EM_EEG/branches/Aci_EM_EEG_V1_TEST/trunk/'
                          ]], 
                          quietOperation: true, 
                          workspaceUpdater: [$class: 'UpdateUpdater']])
                
                // 執行自動化部署
                bat 'python main.py'
            }
        }
    }
}

post {
    success {
        echo 'Autotest succeeded!'
    }
    failure {
        echo 'Autotest failed!'
    }
}

}

相關文章