Jenkins使用簡易教程

題圖

Jenkins是一款能提高效率的軟件客年,它能幫你把軟件開發(fā)過程形成工作流屡谐,典型的工作流包括以下幾個步驟

  1. 開發(fā)
  2. 提交
  3. 編譯
  4. 測試
  5. 發(fā)布

有了Jenkins的幫助筷登,在這5步中,除了第1步先舷,后續(xù)的4步都是自動化完成的艰管,具體的,當你完成了提交蒋川,Jenkins會自動運行你的編譯腳本牲芋,編譯成功后,再運行你的測試腳本捺球,這一步成功后缸浦,接著它會幫你把新程序發(fā)布出去,特別的氮兵,在最后一步裂逐,你可以選擇手動發(fā)布,或自動發(fā)布泣栈,畢竟發(fā)布這件事情絮姆,還是需要人為的確認一下比較好。簡而言之

Jenkins可以幫你在寫完代碼后秩霍,一鍵完成開發(fā)過程中的一系列工作

使用Jenkins的好處顯而易見,它減少了你的重復(fù)勞動蚁阳。更重要的是铃绒,一個團隊的開發(fā)流程一開始是不一致的,不一致往往會帶來各種各樣的問題螺捐,最終體現(xiàn)在軟件的質(zhì)量或開發(fā)效率不夠高颠悬,而Jenkins會幫你規(guī)范大家的行為,從而避免一系列的問題定血。

安裝

Jenkins安裝非常簡單赔癌,以CentOS為例,執(zhí)行以下命令即可

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

值得注意的是澜沟,如果你的操作系統(tǒng)是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作為數(shù)據(jù)傳輸?shù)墓艿烂K洌敲吹乃蠮enkins節(jié)點都要安裝git

$ sudo yum install -y git

設(shè)置git賬戶

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

配置

安裝成功后刊苍,配置文件在/etc/sysconfig/jenkins下,默認端口為8080濒析,你需要設(shè)置一下防火墻正什,讓該端口可以被外部訪問到

設(shè)置允許開機啟動

$ sudo chkconfig jenkins on

確保系統(tǒng)中有一個jenkins賬戶,如果沒有則需要創(chuàng)建号杏,理論上安裝了Jenkins后婴氮,會自動創(chuàng)建該用戶。

然后創(chuàng)建ssh密鑰,密鑰被用來在多個節(jié)點中進行免密訪問主经,同時幫助打通git數(shù)據(jù)通道荣暮。在這之前要確認jenkins用戶的home目錄是否有效(在下面的例子中home/var/bin/jenkins),并切換到j(luò)enkins用戶下

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

創(chuàng)建非對稱密鑰旨怠,執(zhí)行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的架構(gòu),它可以把任務(wù)發(fā)布到不同的節(jié)點上執(zhí)行鉴腻,典型的應(yīng)用場景是你有2個運行環(huán)境迷扇,一個是測試環(huán)境,一個是生產(chǎn)環(huán)境爽哎,你可以指定工作流中蜓席,哪些任務(wù)在測試環(huán)境中執(zhí)行,哪些任務(wù)在生產(chǎn)環(huán)境中執(zhí)行课锌。當然厨内,如果你沒有這樣的需求,也可以不配置Slave渺贤,這篇文章討論的是有Slave的情況雏胃。

如果你需要配置Slave,在Slave節(jié)點上創(chuàng)建一個jenkins用戶志鞍,并建立Master和Slave的授信關(guān)系(你需要將下面的host替換為具體的服務(wù)器IP瞭亮,注意一定要保證Master和Slave之間是內(nèi)網(wǎng)通信的,否則公網(wǎng)環(huán)境延遲較大固棚,經(jīng)常會出現(xiàn)Slave掉線情況)

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

同時统翩,為了讓jenkins可以執(zhí)行更高權(quán)限的命令,所有節(jié)點都需要把jenkins用戶設(shè)置為sudo用戶此洲。當然厂汗,我這是為了偷懶,更好的辦法是設(shè)置一個專門的用戶組呜师,讓這個組有一定的權(quán)限娶桦,然后把jenkins加入到這個用戶組。

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

以上為全部終端的配置汁汗,剩下操作基本都在Jenkins提供的web頁面上完成

設(shè)置Slave

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

配置Node碰酝,Labels是環(huán)境設(shè)置霎匈,例如開發(fā)環(huán)境,測試環(huán)境送爸,編譯環(huán)境等铛嘱,后續(xù)可以根據(jù)Lables值暖释,指定具體的任務(wù)在某個環(huán)境中執(zhí)行

設(shè)置Master到Node間的授信方式

成功后,可以在控制臺看到新增的Node

創(chuàng)建Pipeline

基本環(huán)境搭建好后墨吓,我們來配置一個工作流親自感受一下

工作流在Jenkins中被稱為pipeline球匕,pipeline的運行行為由用戶自己定義,定義的內(nèi)容存放在一個Jenkinsfile文件中帖烘,并將該文件存放在git倉庫的根目錄亮曹,大致的流程如下:

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

下面是具體的配置步驟

編寫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模板秘症,其中有以下幾個關(guān)鍵概念

  • agent - 指定在哪臺機器上執(zhí)行任務(wù)照卦,還記得上面配置Node時候填的Label嗎,如果這兩個label匹配得上乡摹,就在該Node中執(zhí)行
  • stage - 組成工作流的大的步驟役耕,這些步驟是串行的,例如build聪廉,test瞬痘,deploy等
  • steps - 描述stage中的小步驟,同一個stage中的steps可以并行
  • sh - 執(zhí)行shell命令
  • input - 需要你手動點擊確定板熊,Pipeline才會進入后續(xù)環(huán)節(jié)框全,常用于部署環(huán)節(jié),因為很多時候部署都需要人為的進行一些確認
  • post - 所有pipeline執(zhí)行完成后干签,會進入post環(huán)節(jié)津辩,該環(huán)節(jié)一般做一些清理工作,同時還可以判斷pipeline的執(zhí)行狀態(tài)

了解了這些后筒严,你會發(fā)現(xiàn)寫一個Jenkinsfile是一件很容易的事情。好了情萤,現(xiàn)在要測試pipeline功能鸭蛙,把上面的代碼中的sh換成echo,拷貝到你的Jenkinsfile中筋岛,并存放在git倉庫的根目錄

創(chuàng)建pipeline

回到Jenkins web頁面娶视,添加pipeline


如果你想每次git commit時自動執(zhí)行該pipeline,有兩種方法睁宰,一種是讓Jenkins對git進行輪詢肪获,每分鐘檢查git倉庫有沒有更新,如下配置

另一種方式是使用git提供的hook柒傻,該方式原理是git一旦提交孝赫,便會觸發(fā)hook中的腳本,讓腳本給Jenkins發(fā)送執(zhí)行pipeline的指令红符,這種方式更優(yōu)雅青柄,但相應(yīng)要做的事情更多一點伐债,這里就不演示這種方法了,感興趣的同學可以自己研究一下致开。

最后峰锁,我們需要設(shè)置git的地址,其中的授信設(shè)置双戳,和上面說的Master到Node的授信設(shè)置一致


設(shè)置完畢后虹蒋,一旦你的git倉庫收到新的提交,就會觸發(fā)這個pipeline的運行飒货,以下這張圖是上面Jenkinsfile例子的運行狀態(tài)魄衅,可以看到當運行到Sanity check這一步時,需要你手動觸發(fā)是否執(zhí)行后面的操作膏斤。

下面我們來總結(jié)一下徐绑,這篇教程主要講述了以下幾個方面:

  1. Jenkins是什么,及它的應(yīng)用場景舉例
  2. 如何搭建一個Jenkins服務(wù)
  3. Jenkins Pileline是什么莫辨,我們?nèi)绾味x一個Pipeline
  4. 如何具體的操作一個Pipeline

Have fun傲茄!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市沮榜,隨后出現(xiàn)的幾起案子盘榨,更是在濱河造成了極大的恐慌,老刑警劉巖蟆融,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件草巡,死亡現(xiàn)場離奇詭異,居然都是意外死亡型酥,警方通過查閱死者的電腦和手機山憨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弥喉,“玉大人郁竟,你說我怎么就攤上這事∮删常” “怎么了棚亩?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長虏杰。 經(jīng)常有香客問我讥蟆,道長,這世上最難降的妖魔是什么纺阔? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任瘸彤,我火速辦了婚禮,結(jié)果婚禮上笛钝,老公的妹妹穿的比我還像新娘钧栖。我一直安慰自己低零,他們只是感情好,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布拯杠。 她就那樣靜靜地躺著掏婶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪潭陪。 梳的紋絲不亂的頭發(fā)上雄妥,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機與錄音依溯,去河邊找鬼老厌。 笑死,一個胖子當著我的面吹牛黎炉,可吹牛的內(nèi)容都是我干的枝秤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼慷嗜,長吁一口氣:“原來是場噩夢啊……” “哼淀弹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起庆械,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤薇溃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后缭乘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沐序,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年堕绩,在試婚紗的時候發(fā)現(xiàn)自己被綠了策幼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡奴紧,死狀恐怖特姐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绰寞,我是刑警寧澤到逊,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布铣口,位于F島的核電站滤钱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏脑题。R本人自食惡果不足惜件缸,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望叔遂。 院中可真熱鬧他炊,春花似錦争剿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至凿叠,卻和暖如春涩笤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盒件。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工蹬碧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人炒刁。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓恩沽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親翔始。 傳聞我的和親對象是個殘疾皇子罗心,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 現(xiàn)有混合云平臺的場景下,即有線下和線上的環(huán)境绽昏,又有測試與正式的場景协屡,而且結(jié)合了Docker,導(dǎo)致打包內(nèi)容有所區(qū)分全谤,...
    歡醉閱讀 3,118評論 3 61
  • Jenkins是一款能提高效率的軟件肤晓,它能幫你把軟件開發(fā)過程形成工作流,典型的工作流包括以下幾個步驟 開發(fā) 提交 ...
    jony456123閱讀 1,801評論 0 2
  • 朋友的真實操作流程认然,使用 Jenkins 和 Kubernetes 完成持續(xù)集成和持續(xù)部署补憾,有搭建,有入門卷员,手把手...
    我是石巍閱讀 6,694評論 10 41
  • 前言 Jenkins就不用做多余的介紹了盈匾,作為CI/CD首選的開源解決方案,持續(xù)集成 (Continous Int...
    王奧OX閱讀 3,125評論 1 13
  • 久違的晴天毕骡,家長會削饵。 家長大會開好到教室時,離放學已經(jīng)沒多少時間了未巫。班主任說已經(jīng)安排了三個家長分享經(jīng)驗窿撬。 放學鈴聲...
    飄雪兒5閱讀 7,523評論 16 22