Jenkins 管道 工做流 自動化部署

jenkins

Jenkins是一個用Java編寫的開源的持續集成工具。在與Oracle發生爭執後,項目從Hudson項目復刻。git

Jenkins提供了軟件開發的持續集成服務。它運行在Servlet容器中(例如Apache Tomcat)。它支持軟件配置管理(SCM)工具(包括AccuRev SCM、CVS、Subversion、Git、Perforce、Clearcase和RTC),能夠執行基於Apache Ant和Apache Maven的項目,以及任意的Shell腳本和Windows批處理命令。Jenkins的主要開發者是川口耕介。Jenkins是在MIT許可證下發布的自由軟件。github

能夠經過各類手段觸發構建。例如提交給版本控制系統時被觸發,也能夠經過相似Cron的機制調度,也能夠在其餘的構建已經完成時,還能夠經過一個特定的URL進行請求。web

建立Pipeline

基本環境搭建好後,咱們來配置一個工做流親自感覺一下docker

工做流在Jenkins中被稱爲pipeline,pipeline的運行行爲由用戶本身定義,定義的內容存放在一個Jenkinsfile文件中,並將該文件存放在git倉庫的根目錄,大體的流程以下shell

  1. 用戶將代碼提交到git
  2. Jenkins從git拉取最新代碼
  3. 讀取根目錄下的Jenkinsfile文件,並依次執行文件中定義的任務

下面是具體的配置步驟微信

編寫Jenkinsfile

pipeline {
    agent {
        label 'master' /* 執行節點 */
    }
    stages {
        stage('Build') {
            steps {
                echo 'Building'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing'
            }
        }
        stage('Deploy - Staging') {
            steps {
                sh './deploy staging'
                sh './run-smoke-tests'
            }
        }
        stage('Sanity check') {
            steps {
                input "Does the staging environment look ok?"
            }
        }
        stage('Deploy - Production') {
            steps {
                echo './deploy production'
            }
        }
    }

    post {
        always {
            echo 'One way or another, I have finished'
            deleteDir() /* clean up our workspace */
        }
        success {
            echo 'I succeeeded!'
        }
        unstable {
            echo 'I am unstable :/'
        }
        failure {
            echo 'I failed :('
        }
        changed {
            echo 'Things were different before...'
        }
    }
}

以上是一個基本的Jenkinsfile模板,其中有如下幾個關鍵概念工具

  • agent - 指定在哪臺機器上執行任務,還記得上面配置Node時候填的Label嗎,若是這兩個label匹配得上,就在該Node中執行
  • stage - 組成工做流的大的步驟,這些步驟是串行的,例如buildtestdeploy
  • steps - 描述stage中的小步驟,同一個stage中的steps能夠並行
  • sh - 執行shell命令
  • input - 須要你手動點擊肯定,Pipeline纔會進入後續環節,經常使用於部署環節,由於不少時候部署都須要人爲的進行一些確認
  • post- 全部pipeline執行完成後,會進入post環節,該環節通常作一些清理工做,同時還能夠判斷pipeline的執行狀態

瞭解了這些後,你會發現寫一個Jenkinsfile是一件很容易的事情。好了,如今要測試pipeline功能,把上面的代碼中的sh換成echo,拷貝到你的Jenkinsfile中,並存放在git倉庫的根目錄post

建立pipeline

回到Jenkins web頁面,添加pipeline測試

若是你想每次git commit時自動執行該pipeline,有兩種方法,一種是讓Jenkins對git進行輪詢,每分鐘檢查git倉庫有沒有更新,以下配置ui

另外一種方式是使用git提供的hook,該方式原理是git一旦提交,便會觸發hook中的腳本,讓腳本給Jenkins發送執行pipeline的指令,這種方式更優雅,但相應要作的事情更多一點,這裏就不演示這種方法了,感興趣的同窗能夠本身研究一下。

最後,咱們須要設置git的地址,其中的授信設置,和上面說的Master到Node的授信設置一致

設置完畢後,一旦你的git倉庫收到新的提交,就會觸發這個pipeline的運行,如下這張圖是上面Jenkinsfile例子的運行狀態,能夠看到當運行到Sanity check這一步時,須要你手動觸發是否執行後面的操做。

其餘

項目地址:https://github.com/changdaye/jenkins-docker-demo/

步驟圖形化插件介紹: https://wiki.jenkins.io/display/JENKINS/Pipeline+Stage+View+Plugin

**如感受文章對你有所幫助,能夠關注微信公衆號【五彩的顏色】鼓勵一下**
![](https://img2018.cnblogs.com/blog/1821244/201910/1821244-20191015093409498-1359691274.jpg)
相關文章
相關標籤/搜索