Pipeline as Code with Jenkins

##什麼是jenkins 請參看這個連接java

輸入圖片說明

pipeline就是一套運行於jenkins之上的工做流框架,將本來獨立運行於單個或者多個節點的任務鏈接起來,實現單個任務難以完成的複雜發佈流程,pipeline的實現方式是一套groovy DSL,任何發佈流程均可以表述爲一段groovy腳本,而且jenkins支持從代碼庫直接讀取腳本,從而實現pipeline as code的理念。node

##pipeline功能:linux

  • 可持續的,即在發佈過程當中,若是jenkins掛掉,正在運行中的pipeline並不會受到影響,也就是pipeline的進程是獨立於jenkins進程自己的。
  • 可停頓的,和bash中的read命令相似,jenkins2.0容許暫停發佈流程,等待人工確認後繼續下一步流程。
  • 多功能的,pipeline支持複雜的CD需求,包括fork,loop,parallel等。
  • 可擴展的,能夠在pipeline插件上集成其餘的插件。
  • 有利於工做流的構建步驟的遷移
  • 更好地控制環境變量
  • 暫存和檢索文件

##pipeline的基本概念git

  • stage 一個pipeline能夠劃分爲若干個stage,每一個stage表明一組操做,stage是一個邏輯分組的概念,是能夠跨多個node的
  • node 一個node即指一個jenkins的節點,或者是master,或者是agent,在不指定時,是隨機分配在任意一個節點上執行的,其是執行step的具體運行環境。
  • step step是最基本的操做單元,小到一個目錄的建立,大到構建一個docker鏡像,其具體是由各種jenkins插件提供的。

##熟悉jenkins的術語github

  • master
  • agent
  • executor executor是指具體執行構建或pipeline step的計算資源。

##pipeline對jenkins版本的要求docker

  • jenkins 1.642.3 之後的版本(推薦是jenkins 2.0及以上)

##安裝pipeline插件及其周邊插件windows

##pipeline with SCMbash

##jenkins的docker demo 能夠用docker安裝一個docker版的jenkins,這是連接地址框架

##建立一個pipelinemaven

node {
    echo 'Hello from Pipeline'
}
Started by user anonymous
[Pipeline] echo
Hello from Pipeline
[Pipeline] End of Pipeline
Finished: SUCCESS

##並行執行

parallel 'integration-tests':{
    node('mvn-3.3'){}
}, 'functional-tests':{
    node('selenium'){}
}

##使用片斷生成器

##添加tools

node {
     git url: 'https://github.com/joe_user/simple-maven-project-with-tests.git'
     def mvnHome = tool 'M3'
     sh "${mvnHome}/bin/mvn -B verify"
  }

注意:sh是在linux或類unix系統上,而在windows上表示爲

bat "${mvnHome}\\bin\\mvn -B verify"

##一個java環境下的Maven自動化構建流程 輸入圖片說明

##groovy語法的pipeline配置

git([url: 'https://github.com/joe_user/simple-maven-project-with-tests.git', branch: 'master'])

通常的,在step只有一個參數時,你能夠省略參數的名稱,如:

sh 'echo hello'

其原意爲

sh([script: 'echo hello'])

##管理環境變量

node {
  git url: 'https://github.com/joe_user/simple-maven-project-with-tests.git'
  def mvnHome = tool 'M3'
  env.PATH = "${mvnHome}/bin:${env.PATH}"
  sh 'mvn -B verify'
 }
  • 把一個執行的路徑添加到環境變量env.PATH中,這樣在當前node中其就被加入到環境變量中了。
  • 你也能夠覆蓋某些環境變量。
  • 在執行mvn就不須要完整的路徑。

##也能夠添加爲一個局部的環境變量

node {
   git url: 'https://github.com/jglick/simple-maven-project-with-tests.git'
   withEnv(["PATH+MAVEN=${tool 'M3'}/bin"]) {
     sh 'mvn -B verify'
   }
 }

##收集測試結果

node {
   git 'https://github.com/joe_user/simple-maven-project-with-tests.git'
   def mvnHome = tool 'M3'
   sh "${mvnHome}/bin/mvn -B -Dmaven.test.failure.ignore verify"
   archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true
   junit '**/target/surefire-reports/TEST-*.xml'
 }

##pipeline一些具體的實例 請參考這個連接jenkins pipeline example

##jenkins全部插件 位置jenkins
gitlab插件

相關文章
相關標籤/搜索