ContOS 7 安裝Jenkins

Jenkins是一款能提升效率的軟件,它能幫你把軟件開發過程造成工做流,典型的工做流包括如下幾個步驟java

  1. 開發
  2. 提交
  3. 編譯
  4. 測試
  5. 發佈

有了Jenkins的幫助,在這5步中,除了第1步,後續的4步都是自動化完成的,具體的,當你完成了提交,Jenkins會自動運行你的編譯腳本,編譯成功後,再運行你的測試腳本,這一步成功後,接着它會幫你把新程序發佈出去,特別的,在最後一步,你能夠選擇手動發佈,或自動發佈,畢竟發佈這件事情,仍是須要人爲的確認一下比較好。簡而言之git

Jenkins能夠幫你在寫完代碼後,一鍵完成開發過程當中的一系列工做web

使用Jenkins的好處顯而易見,它減小了你的重複勞動。更重要的是,一個團隊的開發流程一開始是不一致的,不一致每每會帶來各類各樣的問題,最終體如今軟件的質量或開發效率不夠高,而Jenkins會幫你規範你們的行爲,從而避免一系列的問題。shell

安裝

Jenkins安裝很是簡單,以CentOS爲例,執行如下命令便可bash

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum -y install jenkins

值得注意的是,若是你的操做系統是CentOS,且運行的是GCJ版本的java,則須要作一下更新服務器

$ java -version
java version "1.5.0"
gij (GNU libgcj) version 4.4.6 20110731 (Red Hat 4.4.6-3)
$ sudo yum remove java
$ sudo yum install -y java-1.7.0-openjdk
$ java -version
java version "1.7.0_79"
OpenJDK Runtime Environment (rhel-2.5.5.1.el6_6-x86_64 u79-b14)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)

若是你的Jenkins使用git做爲數據傳輸的管道,那麼的全部Jenkins節點都要安裝git架構

$ sudo yum install -y git

設置git帳戶dom

$ git config --global user.name "yourname"
$ git config --global user.email "yourmail"

配置

安裝成功後,配置文件在/etc/sysconfig/jenkins下,默認端口爲8080,你須要設置一下防火牆,讓該端口能夠被外部訪問到ssh

設置容許開機啓動ide

$ sudo chkconfig jenkins on

確保系統中有一個jenkins帳戶,若是沒有則須要建立,理論上安裝了Jenkins後,會自動建立該用戶。

而後建立ssh密鑰,密鑰被用來在多個節點中進行免密訪問,同時幫助打通git數據通道。在這以前要確認jenkins用戶的home目錄是否有效(在下面的例子中home/var/bin/jenkins),並切換到jenkins用戶下

$ grep jenkins /etc/passwd
jenkins:x:496:496:Jenkins Continuous Integration Server:/var/lib/jenkins:/bin/bash
$ su jenkins
$ cd ~
$ pwd
/var/lib/jenkins

建立非對稱密鑰,執行ssh-keygen命令,並一路回車

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/fengyajie/.ssh/id_rsa): Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/fengyajie/.ssh/id_rsa.
Your public key has been saved in /home/fengyajie/.ssh/id_rsa.pub.
The key fingerprint is:
The key's randomart image is:
+--[ RSA 2048]----+
|        ....   +=|
|        ... .....|
|         . ...o +|
|          E. . *.|
|        S  .= +  |
|         . o + . |
|          . o o  |
|             o o |
|              o  |
+-----------------+
$ ls ~/.ssh/
id_rsa  id_rsa.pub  known_hosts

Jenkins是一個Master-Slave的架構,它能夠把任務發佈到不一樣的節點上執行,典型的應用場景是你有2個運行環境,一個是測試環境,一個是生產環境,你能夠指定工做流中,哪些任務在測試環境中執行,哪些任務在生產環境中執行。固然,若是你沒有這樣的需求,也能夠不配置Slave,這篇文章討論的是有Slave的狀況。

若是你須要配置Slave,在Slave節點上建立一個jenkins用戶,並創建Master和Slave的授信關係(你須要將下面的host替換爲具體的服務器IP,注意必定要保證Master和Slave之間是內網通訊的,不然公網環境延遲較大,常常會出現Slave掉線狀況)

ssh jenkins@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

同時,爲了讓jenkins能夠執行更高權限的命令,全部節點都須要把jenkins用戶設置爲sudo用戶。固然,我這是爲了偷懶,更好的辦法是設置一個專門的用戶組,讓這個組有必定的權限,而後把jenkins加入到這個用戶組。

$ sudo grep jenkins /etc/sudoers
jenkins          ALL=(ALL)   NOPASSWD: ALL

以上爲所有終端的配置,剩下操做基本都在Jenkins提供的web頁面上完成

設置Slave

打開Jenkins頁面http://hostname:8080,進入管理頁面,點擊New Node

配置Node,Labels是環境設置,例如開發環境,測試環境,編譯環境等,後續能夠根據Lables值,指定具體的任務在某個環境中執行

設置Master到Node間的授信方式

成功後,能夠在控制檯看到新增的Node

建立Pipeline

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

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

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

下面是具體的配置步驟

編寫Jenkinsfile

pipeline {
    agent {
        label 'Production'
    }
    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 {                
                sh './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 - 組成工做流的大的步驟,這些步驟是串行的,例如build,test,deploy等
  • steps - 描述stage中的小步驟,同一個stage中的steps能夠並行
  • sh - 執行shell命令
  • input - 須要你手動點擊肯定,Pipeline纔會進入後續環節,經常使用於部署環節,由於不少時候部署都須要人爲的進行一些確認
  • post - 全部pipeline執行完成後,會進入post環節,該環節通常作一些清理工做,同時還能夠判斷pipeline的執行狀態

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

建立pipeline

回到Jenkins web頁面,添加pipeline

 

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

 

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

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

 

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

 

下面咱們來總結一下,這篇教程主要講述瞭如下幾個方面:

  1. Jenkins是什麼,及它的應用場景舉例
  2. 如何搭建一個Jenkins服務
  3. Jenkins Pileline是什麼,咱們如何定義一個Pipeline
  4. 如何具體的操做一個Pipeline

Have fun!

相關文章
相關標籤/搜索