基于Jenkins快速搭建CI


本文接上篇碳胳,在VirtualBox+Vagrant搭建虛擬機成功后帘腹,一步步從零開始基于Jenkins平臺搭建CI嚎研,由于虛擬機剛建好后蝌蹂,不包含任何開發(fā)環(huán)境噩斟,因此本文也包括搭建
CI所需的 Java 環(huán)境,Git配置等輔助前提孤个。本文以Jenkins官方文檔的 Guided Tour 為學習指引剃允,文末配項目練習所用的工程鏈接。另齐鲤,特此感謝我的pair小伙伴:Benqing斥废,此練習與文章為我們一起完成。


Jenkins 是一個開源項目给郊,提供了一種易于使用的持續(xù)集成系統(tǒng)牡肉,使開發(fā)者從繁雜的集成中解脫出來,專注于更為重要的業(yè)務邏輯實現(xiàn)上丑罪。同時 Jenkins 能實施監(jiān)控集成中存在的錯誤荚板,提供詳細的日志文件和提醒功能,還能用圖表的形式形象地展示項目構(gòu)建的趨勢和穩(wěn)定性吩屹。下面將介紹 Jenkins 的基本功能跪另。

在開始本次學習之旅前,虛擬機需要包含以下開發(fā)環(huán)境:

  • Java 環(huán)境
  • Git 版本控制
安裝 Java8
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer
...
$ java -version
...
$ sudo apt-get install oracle-java8-set-default
$ vim ~/.bashrc
...
JAVA_HOME=/usr/lib/jvm/java-8-oracle
JRE_HOME=/usr/lib/jvm/java-8-oracle/jre
...
$ source ~/.bashrc
$ echo $JAVA_HOME
安裝 Git
$ sudo apt-get install git
$ git config --global user.name *******
$ git config --global user.email *****@thoughtworks.com
設置 SSH Key
$ ssh-keygen
$ cat ~/.ssh/id_rsa.pub
  • add SSH Key to GitHub

安裝運行 Jenkins服務器端

若為圖形界面:
  1. 下載Jenkins
  2. 進入下載項所在目錄
  3. 開啟服務器煤搜,運行剛下載的war包 java -jar jenkins.war --httpPort=8080
若為終端界面:
> mkdir jenkins
> cd jenkins
> wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
> java -jar jenkins.war --httpPort=8080

Jenkins客戶端

啟動Jenkins服務器端后免绿,打開瀏覽器,輸入地址 http://localhost:8080打開客戶端擦盾。第一次打開客戶端會要求輸入初始密碼嘲驾,可以通過如下命令獲忍视础:

cat /home/vagrant/.jenkins/secrets/initialAdminPassword

之后會要求設置Admin的名字和密碼,進行配置并確認后辽故,會進入安裝插件頁面徒仓,默認兩種該模式:suggestedcustomized,如果是第一次使用誊垢,對自定義下載的插件不太了解掉弛,可以選擇推薦模式。

全部成功后頁面如下:


創(chuàng)建第一個Pipeline

新建Jenkinsfile

在項目中新建文件Jenkinsfile喂走,并上傳項目至Github殃饿,

pipeline {
    agent any
    stages {
        stage('build') {
            steps {
                sh 'echo "Hello, world"'
            }
        }
    }
}
新建Pipeline
  • New Item


  • Multibranch Pipeline
  • Add Source: GitHub
  • Save
增加Build stage
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'echo "Hello World"'
                sh '''
                    echo "Multiline shell steps works too"
                    ls -lah
                '''
            }
        }
    }
}
增加執(zhí)行腳本
pipeline {
    agent any
    stages {
        stage('Deploy') {
            steps {
                retry(3) {
                    sh './flakey-deploy.sh'
                }

                timeout(time: 3, unit: 'MINUTES') {
                    sh './health-check.sh'
                }
            }
        }
    }
}

Tips:腳本文件需要增加執(zhí)行權限
chmod 777 ./flakey-deploy.sh
或者
chmod +x ./flakey-deploy.sh

pipeline {
    agent any
    stages {
        stage('Deploy') {
            steps {
                timeout(time: 3, unit: 'MINUTES') {
                    retry(5) {
                        sh './flakey-deploy.sh'
                    }
                }
            }
        }
    }
}
增加 post

當Pipeline執(zhí)行完畢有,有時需要清理內(nèi)存或者針對輸出結(jié)果進行處理芋肠,這些操作可以在 post中完成乎芳。

pipeline {
    agent any
    stages {
        stage('Test') {
            steps {
                sh 'echo "Fail!"; exit 1'
            }
        }
    }
    post {
        always {
            echo 'This will always run'
        }
        success {
            echo 'This will run only if successful'
        }
        failure {
            echo 'This will run only if failed'
        }
        unstable {
            echo 'This will run only if the run was marked as unstable'
        }
        changed {
            echo 'This will run only if the state of the Pipeline has changed'
            echo 'For example, if the Pipeline was previously failing but is now successful'
        }
    }
}
環(huán)境變量

進入”系統(tǒng)管理->系統(tǒng)設置”設置Jenkins的相關參數(shù)。

環(huán)境變量可以是全局的帖池,也可以只是在不同的stage中奈惑,具體與代碼位置相關,若是全局的碘裕,則在stage之前携取;若只是在stage中攒钳,則寫在stage中:

environment {
    DISABLE_AUTH = 'true'
    ...
    
    TEST_CREDENTIAL_PWD = credentials('TEST_CREDENTIAL_ID')
    TEST_CREDENTIAL_TEXT_ID = credentials('TEST_CREDENTIAL_TEXT_ID')
}
增加Gradle
build stage: ./gradlew build
test stage: ./gradlew check

項目添加Gradle

  • 下載Gradle
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

$ brew update && brew install gradle
$ gradle -v
  • 項目中新建文件build.gradle
apply plugin: 'idea'
apply plugin: 'java'

task wrapper(type: Wrapper) {
    gradleVersion = '4.2'
}

項目增加 Gradle Wrapper

$ gradle wrapper
$ ./gradlew build 

項目鏈接

Github

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末帮孔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子不撑,更是在濱河造成了極大的恐慌文兢,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件焕檬,死亡現(xiàn)場離奇詭異姆坚,居然都是意外死亡,警方通過查閱死者的電腦和手機实愚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門兼呵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人腊敲,你說我怎么就攤上這事击喂。” “怎么了碰辅?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我椎咧,道長,這世上最難降的妖魔是什么沸柔? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮铲敛,結(jié)果婚禮上褐澎,老公的妹妹穿的比我還像新娘。我一直安慰自己伐蒋,他們只是感情好乱凿,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著咽弦,像睡著了一般徒蟆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上型型,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天段审,我揣著相機與錄音,去河邊找鬼闹蒜。 笑死寺枉,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的绷落。 我是一名探鬼主播姥闪,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼砌烁!你這毒婦竟也來了筐喳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤函喉,失蹤者是張志新(化名)和其女友劉穎避归,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體管呵,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡梳毙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了捐下。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片账锹。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖坷襟,靈堂內(nèi)的尸體忽然破棺而出奸柬,到底是詐尸還是另有隱情,我是刑警寧澤啤握,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布鸟缕,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏懂从。R本人自食惡果不足惜授段,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望番甩。 院中可真熱鬧侵贵,春花似錦、人聲如沸缘薛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宴胧。三九已至漱抓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恕齐,已是汗流浹背乞娄。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留显歧,地道東北人仪或。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像士骤,于是被迫代替她去往敵國和親范删。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,747評論 25 707
  • 本文是2017年3月13日晚9點在“AHA面對面”線上分享的“單件流的力量-伍斌_Ben面對面”的操練步驟拷肌,這里是...
    程序員吾真本閱讀 3,677評論 3 14
  • 工作日常系列文章-論理論知識在大到旦、小公司的價值體現(xiàn) 上篇文章 持續(xù)交付-目標 Jenkins官網(wǎng) Jenkins下...
    適合自己的最好閱讀 5,232評論 2 18
  • 陽光闖入我的左眼, 他連忙躲閃廓块, 我的右眼卻在感嘆厢绝。 為什么總在黑暗中尋找光明, 卻在光明中思念黑暗带猴?
    郁孤閱讀 185評論 0 0
  • 這個世界上 太多一樣孤獨的旅客 帶著自己內(nèi)心的向往 乘著風踏著浪 到自己渴望的地方 做一個純粹的拾荒者 找找最真實...
    當拾荒者老了閱讀 137評論 0 0