01 Jenkins pipeline 模板(jenkins 2 pipeline怎么獲取各個階段的log)

时间:2024-05-12 11:14:33 编辑: 来源:

如何用Jenkins/Hudson創建真正的pipeline

如何用Jenkins/Hudson創建真正的pipeline

這幾天嘗試用Jenkins/Hudson創建pipeline,發現網上的信息很少,所以寫一篇跟大家分享。

在開始之前,得告訴你被我的標題給忽悠了,不是Jenkins/Hudson,只是Jenkins!如果你還在用Hudson,那么我建議你立即切換到Jenkins。理由就不說了,看看這個投票就行。(此中,我吃盡了苦頭)

接下來,就讓我們一步一步用Jenkins搭建真正的pipeline吧。

第一步

第一步,我們先創建一個最簡單的pipeline。所謂pipeline,顧名思義,就是一個流水線,由多個步驟(steps)組成。每走完一步,就來到下一步。用Build Pipeline Plugin就可以很方便地實現。

實現的效果如下圖:

上例中,UnitTest是我們的初始任務。UnitTest結束之后,自動觸發AC Test。如果通過了AC Test,團隊可以有選擇地部署到任意測試環境。

在配置這個插件時,最重要的就是選擇Initial Job。

然后,在每一個step(job)中選擇downstream step。可以是自動觸發(Build Other Projects),也可以選擇手動觸發(Manually Execute Downstream Project)。

第二步

第一步中我們實現了一個流水線,但這個只是看上去的流水線而已。在工廠的流水線中,歷經流水線上游到下游的,應該是同一個產品。但上例中顯然不是,Unit Test和Acceptance Test所運行的可能是不同版本的代碼。

要讓幾個step的代碼運行在同一個版本,可以使用一個叫做Parameterized Trigger Plugin。如下圖:

選擇把Subversion revision傳到下面的steps,則接下來的Steps都會checkout同一個版本的代碼。但這個也有限制,就是這些Steps必須有相同的subversion URL配置。

另外,你應該還注意到我們還傳了另一個參數:PL_BUILD_NUMBER。這個參數會另有用途。

除了希望保持相同版本,我們很可能希望重用upstream step生成的artifact。比如,在AC Test step會生成一些artifacts,這些artifacts經過測試之后,希望可以用于Deploy步驟。一方面,這會節省重新構建artifact的時間;另一方面,這些artifact是已經經過測試的,是可用的,而重新構建生成的卻是未經測試的,可用與否未知。(雖然他們應該是一樣的,但誰知道呢。。)我們可以使用ArtifactDepolyerPlugin實現。

jenkins 2 pipeline怎么獲取各個階段的log

建議你這樣試試看:

在每個stage{ } 中, 用 post { } 上傳日志

再整個 pipeline{ } 末尾, 用 post{ } 上傳日志

 

這樣做的好處:

層次清晰

可以聚合各個 stage 的日志, 如 robotframework log, build log ......

By Xiak

jenkins之pipeline相關概念

pipeline是什么,有什么作用,用groovy語言編寫

創建pipeline操作步驟:

1、安裝jenkins 和安裝插件 pipeline。

2、新建一個pipeline項目,在pipeline中加入腳本,構建執行。

部署流水線:Deployment pipeline,從軟件版本控制庫到用戶手中這一過程的自動化表現形式。

所有的部署流水線都寫在jenkins-file文件中,需要安裝插件pipeline插件后才能使用jenkins-file。

1.pipeline最簡單的結構

pipeline是什么,用于描述整條流水線是如何進行的。流水線的內容包括執行編譯、打包、測試、輸出測試報告等步驟。以下5個部分是pipeline的必需存在的,少一個,jenkins都會報錯。

2.pipeline的步驟

pipeline基本結構決定的是pipeline整體流程。

pipeline plugin的github倉庫: 買粉絲s://github.買粉絲/jenkinsci/pipeline-plugin/blob/master/README.md

jenkins pipeline支持的指令有:

聲明式(Delar-ative)語法&腳本式(Scripted)語法如圖:

在容器中運行 Jenkins pipeline 任務

持續集成中的 pipeline 技術和 docker 都是當前正在發展的主流方向,當然把它們結合起來在 CI/CD 過程中發揮出更強大的威力也是大家共同的目標。本文將介紹如何在 Jenkins pipeline 中集成使用 docker,好在當前的 Jenkins 已經默認通過插件實現了與 docker 的集成,所以這將是一段輕松愉快的旅程。

簡單起見,我們使用一臺安裝了 docker 的 linux 虛機,并通過 ssh 將其啟動為 Jenkins server 的 build agent。主要操作步驟如下:

我們通過下面的腳本一次搞定這些操作(docker 的安裝請參考官方文檔):

在 linux 虛機上執行上面的腳本,然后在 Jenkins 中添加 node(build agent):

其中的 "Remote root directory" 就是剛才創建的 /var/jenkins 目錄。"Launch method" 選擇 "Launch slave agents via SSH"。Host 為 linux 虛機的 IP,Credentials 則為剛才創建的 jenkins 用戶。

先來運行一個簡單的 demo。創建一個 pipeline 類型的 job,并輸入下面的 pipeline script:

運行該任務,執行結果如下:

其中的命令 node --version 就是在容器中執行的。

Jenkins 默認會把任務分配給任何可用的 agent,如果我們要指定任務執行的 agent,可以在 docker 的配置中指定 label,這樣該任務只會被分配到具有某個 label 的 agent 上運行:

我們還可以在 folder 級別指定 label,這樣的設置會應用在 folder 內所有沒有設置 label 的任務上:

除了 label,還可以設置 docker registry URL 及其身份認證的憑據。

我們還可以在不同的 stage 中運行不同的容器,其實就是每個 stage 用自己的容器鏡像創建容器并執行任務,stage 之間沒啥關系:

通過指定 Dockerfile 文件,在 build agent 上直接構建容器鏡像,然后生成容器并執行命令。下面的 demo 中我們通過 Dockerfile 創建一個包含 curl 工具的容器鏡像,然后通過該鏡像啟動容器并執行 HTTP 請求。該 demo 一共包含三個文件:Dockerfile 、entrypoint.sh 和 Jenkinsfile,大家可以直接從這里下載它們。先看一下 Dockerfile 文件的內容:

其中的 entrypoint.sh 內容如下:

Jenkinsfile 的內容如下:

注意,該文件中我們設置了 dir 為 curl 目錄,這是因為此項目的 Dockerfile 文件不是在代碼庫的根目錄下,所以需要指定其相對目錄的路徑。

然后在 Jenkins 中創建 pipeline 類型的 job,并把 pipeline 的 Definition 設置為 "Pipeline script from SCM" 。接下來設置好代碼倉庫的路徑就可以了。運行該任務,從日志上可以看到取完代碼后先通過 Dockerifle 文件構建了容器鏡像:

并在容器中運行了 curl 買粉絲://買粉絲.買粉絲blogs.買粉絲/sparkdev/p/8795141.買粉絲 命令。

上面的例子中我們通過 Dockerfile 生成了容器鏡像,并且完成了相關的測試(通過 curl 請求了測試網頁)。接下來就是把生成的容器鏡像推送到鏡像倉庫中。下面將演示如何在 pipeline 中把構建的鏡像推送的鏡像倉庫。首先在 Folder 的配置界面中添加訪問 dockerhub.買粉絲 憑據如下:

如果是訪問 dockerhub 就不需要填寫 "Docker registry URL"。然后添加下面的 Pipeline script:

注意, 9e70c1eb-814c-4cf2-97e9-5bfc20461231 剛才創建的憑據的 ID,可以從 folder 的 Credentials 界面中獲得。運行這個任務,執行成功后去 dockerhub.買粉絲 上看一下,是不是已經把新構建的鏡像推送上去了:

從本文的幾個簡單 demo 可以看出,jenkins pipeline 和 docker 集成的已經很好了。當然你還可以實現更多更復雜的用例,趕緊動手吧!

參考:

Using Docker with Pipeline

Pipeline Syntax

作者:sparkdev

出處:買粉絲://1t.click/aerf

Jenkins-pipeline中SSH方式登錄遠程機器

     pipeline{

   agent any

   stages {

       

搜索关键词: