
http://hulk.corp.qihoo.net:8360/help/detail/1504878254
https://jenkins.io/doc/book/pipeline/jenkinsfile/
https://blog.csdn.net/boonya/article/details/77941975
Jenkins Pipleline插件介紹

Advanced

File System

Flow Control

Docker


Jenkins Pipleline 腳本示例
參考地址:https://www.cloudbees.com/blog/using-pipeline-plugin-accelerate-continuous-delivery-part-3
[plain] view plaincopy
<embed id="ZeroClipboardMovie_1" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="15" height="16" name="ZeroClipboardMovie_1" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&width=15&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">
<embed id="ZeroClipboardMovie_5" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="15" height="16" name="ZeroClipboardMovie_5" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=5&width=15&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">
- stage 'build'
- node {
- git 'https://github.com/cloudbees/todo-api.git'
- withEnv(["PATH+MAVEN=${tool 'm3'}/bin"]) {
- sh "mvn -B –Dmaven.test.failure.ignore=true clean package"
- }
- stash excludes: 'target/', includes: '**', name: 'source'
- }
- stage 'test'
- parallel 'integration': {
- node {
- unstash 'source'
- withEnv(["PATH+MAVEN=${tool 'm3'}/bin"]) {
- sh "mvn clean verify"
- }
- }
- }, 'quality': {
- node {
- unstash 'source'
- withEnv(["PATH+MAVEN=${tool 'm3'}/bin"]) {
- sh "mvn sonar:sonar"
- }
- }
- }
- stage 'approve'
- timeout(time: 7, unit: 'DAYS') {
- input message: 'Do you want to deploy?', submitter: 'ops'
- }
- stage name:'deploy', concurrency: 1
- node {
- unstash 'source'
- withEnv(["PATH+MAVEN=${tool 'm3'}/bin"]) {
- sh "mvn cargo:deploy"
- }
- }
注:m3表示Jenkins配置的maven名稱。
Jenkins Pipeline Docker腳本示例
Docker Pipeline插件公開了一個(gè)Docker全局變量,它為普通的Docker操作提供DSL,只需要在運(yùn)行步驟的執(zhí)行程序上使用一個(gè)Docker客戶端(在您的節(jié)點(diǎn)步驟中使用一個(gè)標(biāo)簽來定位啟用Docker的代理)。
默認(rèn)情況下,Docker全局變量連接到本地Docker守護(hù)程序。 您可以使用docker.withServer步驟連接到遠(yuǎn)程Docker主機(jī)。 圖像步驟為特定的Docker圖像提供句柄,并允許執(zhí)行其他與圖像相關(guān)的其他步驟,包括image.inside步驟。 內(nèi)部步驟將啟動(dòng)指定的容器并在該容器中運(yùn)行一個(gè)步驟:
示例1:
[plain] view plaincopy
<embed id="ZeroClipboardMovie_2" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="15" height="16" name="ZeroClipboardMovie_2" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=2&width=15&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">
<embed id="ZeroClipboardMovie_6" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="15" height="16" name="ZeroClipboardMovie_6" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=6&width=15&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">
- docker.image('maven:3.3.3-jdk8').inside('-v ~/.m2/repo:/m2repo') {
- sh 'mvn -Dmaven.repo.local=/m2repo clean package'
- }
示例2(參考:http://www.youruncloud.com/blog/127.html):
[plain] view plaincopy
<embed id="ZeroClipboardMovie_3" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="15" height="16" name="ZeroClipboardMovie_3" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=3&width=15&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">
<embed id="ZeroClipboardMovie_7" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="15" height="16" name="ZeroClipboardMovie_7" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=7&width=15&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">
node{
// 代碼檢出
stage('get Code') {
git credentialsId: 'git-credentials-id', url: 'http://192.168.19.250/ufleet/uflow.git'
}
// 鏡像中進(jìn)行單元測試
stage('unit testing'){
// 啟動(dòng)golnag:1.7并在golang內(nèi)編譯代碼
docker.image('golang:1.7').inside {
sh './script/unittest.sh'
}
}
// 鏡像中代碼構(gòu)建
stage('Build'){
def confFilePath = 'conf/app.conf'
def config = readFile confFilePath
writeFile file: confFilePath, text: config
// 啟動(dòng)golnag:1.7并在golang內(nèi)編譯代碼
docker.image('golang:1.7').inside {
sh './script/build.sh'
}
}
// 編譯鏡像并push到倉庫
def imagesName = '192.168.18.250:5002/ufleet/uflow:v0.9.1.${BUILD_NUMBER}'
stage('Image Build And Push'){
docker.withRegistry('http://192.168.18.250:5002', 'registry-credentials-id') {
docker.build(imagesName).push()
}
}
// 啟動(dòng)剛運(yùn)行的容器
stage('deploy iamegs'){
// 需要?jiǎng)h除舊版本的容器,否則會(huì)導(dǎo)致端口占用而無法啟動(dòng)。
try{
sh 'docker rm -f cicdDemo'
}catch(e){
// err message
}
docker.image(imagesName).run('-p 9091:80 --name cicdDemo')
}
}
更多使用方法請(qǐng)參考Jenkins Pipeline docker語法。
另外可以借助Pipeline Syntax來生成基本的腳本:
Jenkins Pipeline war 包部署示例
Pipeline通過增強(qiáng)stage原語來提供此功能。 例如,一個(gè)階段可以具有一個(gè)定義的并發(fā)級(jí)別,以指示在任何時(shí)候只有一個(gè)線程應(yīng)該在該階段中運(yùn)行。 這實(shí)現(xiàn)了運(yùn)行部署的期望狀態(tài),就像運(yùn)行一樣快。
參考:https://jenkins.io/doc/book/pipeline-as-code/
[plain] view plaincopy
<embed id="ZeroClipboardMovie_4" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="15" height="16" name="ZeroClipboardMovie_4" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=4&width=15&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">
<embed id="ZeroClipboardMovie_8" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="15" height="16" name="ZeroClipboardMovie_8" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=8&width=15&height=16" wmode="transparent" style="box-sizing: border-box; outline: 0px; word-break: break-all;">
- stage name: 'Production', concurrency: 1
- node {
- unarchive mapping: ['target/x.war' : 'x.war']
- deploy 'target/x.war', 'production'
- echo 'Deployed to http://localhost:8888/production/'
- }
本博參考文章:
持續(xù)集成 Jenkins 2.7 pipeline 功能使用介紹
Pipeline as Code Introduction (包含war包部署介紹)
Jenkins2 Pipeline: deploy on tomcat
更多閱讀Jenkinsfile參考: