jenkins

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

開發(fā)

提交

編譯

測試

發(fā)布

有了Jenkins的幫助,在這5步中竭恬,除了第1步熬的,后續(xù)的4步都是自動化完成的,具體的岔绸,當(dāng)你完成了提交橡伞,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ù)墓艿烂戎欤敲吹乃蠮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í)行。當(dāng)然踪区,如果你沒有這樣的需求吊骤,也可以不配置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用戶。當(dāng)然,我這是為了偷懶扶供,更好的辦法是設(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倉庫的根目錄垛贤,大致的流程如下:

用戶將代碼提交到git

Jenkins從git拉取最新代碼

讀取根目錄下的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)要做的事情更多一點丰榴,這里就不演示這種方法了,感興趣的同學(xué)可以自己研究一下换况。

最后盗蟆,我們需要設(shè)置git的地址,其中的授信設(shè)置姆涩,和上面說的Master到Node的授信設(shè)置一致

設(shè)置完畢后骨饿,一旦你的git倉庫收到新的提交,就會觸發(fā)這個pipeline的運行宏赘,以下這張圖是上面Jenkinsfile例子的運行狀態(tài),可以看到當(dāng)運行到Sanity check這一步時闷游,需要你手動觸發(fā)是否執(zhí)行后面的操作贴汪。

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

Jenkins是什么业簿,及它的應(yīng)用場景舉例

如何搭建一個Jenkins服務(wù)

Jenkins Pileline是什么阳懂,我們?nèi)绾味x一個Pipeline

如何具體的操作一個Pipeline

Have fun柜思!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赡盘,一起剝皮案震驚了整個濱河市缰揪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌邀跃,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件途戒,死亡現(xiàn)場離奇詭異喷斋,居然都是意外死亡,警方通過查閱死者的電腦和手機星爪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門顽腾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诺核,“玉大人,你說我怎么就攤上這事窖杀。” “怎么了入客?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵桌硫,是天一觀的道長。 經(jīng)常有香客問我皱埠,道長,這世上最難降的妖魔是什么边器? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任忘巧,我火速辦了婚禮,結(jié)果婚禮上睦刃,老公的妹妹穿的比我還像新娘。我一直安慰自己际长,他們只是感情好兴泥,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著如绸,像睡著了一般旭贬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上稀轨,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天奋刽,我揣著相機與錄音,去河邊找鬼杨名。 笑死,一個胖子當(dāng)著我的面吹牛须喂,可吹牛的內(nèi)容都是我干的趁蕊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼是己,長吁一口氣:“原來是場噩夢啊……” “哼任柜!你這毒婦竟也來了片习?” 一聲冷哼從身側(cè)響起唐全,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤偎血,失蹤者是張志新(化名)和其女友劉穎代兵,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體剿牺,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡晒来,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年镐捧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片懂酱。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡列牺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瞎领,到底是詐尸還是另有隱情,我是刑警寧澤九默,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布驼修,位于F島的核電站,受9級特大地震影響乙各,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜恩静,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一蹲坷、第九天 我趴在偏房一處隱蔽的房頂上張望邑飒。 院中可真熱鬧级乐,春花似錦、人聲如沸唇牧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至崖蜜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間豫领,已是汗流浹背舔琅。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留课蔬,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓二跋,卻偏偏與公主長得像流昏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子横缔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353

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