devops系列002——jenkins-pipeline介紹

至於安裝jenkins 這裡就不多說了 ,如果熟悉docker 的話 一條命令就解決了。

<code>docker run -d -u root -p 8080:8080 -p 5000:5000 --name jenkins -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai -v /data/jenkins_home/:/var/jenkins_home $(cat /etc/hosts|awk -F ' ' '{if(NR>2){print "--add-host "$2":"$1}}') -v /etc/localtime:/etc/localtime -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean:1.19.0/<code>

說到Jenkins 不可避免的就是pipeline ,即pipeline as code。Groovy語言被選擇作為基礎來實現pipeline,為用戶提供了巨大的靈活性和可擴展性。

流水線的運行系統

1.主節點master :

是一個Jenkins實例的主要控制系統,它能夠完全訪問所有Jenkins配置選項和任務列表,如果沒有指定其他系統,它也是默認的任務執行節點。

不過不推薦在主節點上執行高負載任務,任何需要大量處理的任務都應該在主節點之外的系統上運行。

這樣做的另外一個原因是,凡是在主節點上執行的任務,都有權限訪問所有的數據,配置和操作,這樣會造成安全風險。


2.節點node :

在Jenkins2中,節點是一個概念,代表了任何可以執行Jenkins任務的系統。節點包括了主節點和從節點,也可以指一個容器,如Docker。

在任何Jenkins實例中主節點都會存在。


3.代理節點agent

在早先的版本的Jenkins中,代理節點被稱為從節點(slave),其代表了所有非主節點系統。這類系統由主系統管理,按需分配或者指定執行特定的任務。

隨著代理節點和節點之間關係的演進,代理節點在節點上運行。在腳本式流水線中,'節點'特指一個運行代理節點的系統,而在聲明式流水線中,其指代一個

特定的代理節點來分配節點。


4.執行器executor

簡單的說,執行器就是節點/代理節點用於執行任務的一個插槽。一個節點可以有任意多個執行器。執行器的數量定義了該節點可以執行的併發任務的數量。

當主節點將任務分配給特定節點時,該節點上必須有可用的執行器插槽來立即執行該任務,否則任務會一直處於等待狀態,直到一個執行器變為可用。

執行器的數量和其他參數可以在創建節點的時候進行配置。

新建pipeline

新建任務現在流水線


執行pipeline方式

直接使用pipeline>


使用Jenkinsfile



pipeline 語法選擇

腳本式:語法靈活、可擴展,但是也意味著更復雜。

優點:

更少的代碼段落和弱規範要求更強大的程序代碼能力更靈活的自定義代碼操作能夠構建更復雜的工作流和流水線

缺點:

要求更高的編程水平語法受限於goovy語法和環境比聲明式語法更復雜

<code>node { stage("build") { // 執行構建 } stage("test") { // 執行測試 } stage("deploy") { try { // 執行部署 }catch(err){ currentBuild.result = "FAILURE" mail body: "project build error is here:${env.BUILD_URL}", from: 'xxx@yy.com', replyTo: 'xxxx@yy.com', subject: 'project build failed', to: 'xxxxx@yy.com' } }}/<code>

優點:

更結構化、貼近傳統的jenkins web表單形式可以通過Blue Ocean圖形化界面自動生成更友好的語法檢測和錯誤識別

缺點:

對迭代邏輯比較弱部分功能缺乏支持對於複雜的流水線支持弱

<code>pipeline { agent any stages { stage("build") { steps { echo 'building...' } } stage("test") { steps { echo 'testing...' } } stage("deploy") { stpes { echo 'deploying...' } } } post { failure { mail to: 'xx@yy.com', subject: 'the pipeline failed' } }}/<code>

下一節開始 pipeline 語法

如果對您有幫助,記得不要忘了給個關注哦!!!

還可以關注我之前的文章: