本文接上篇碳胳,在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服務器端
若為圖形界面:
- 下載Jenkins
- 進入下載項所在目錄
- 開啟服務器煤搜,運行剛下載的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的名字和密碼,進行配置并確認后辽故,會進入安裝插件頁面徒仓,默認兩種該模式:suggested
和 customized
,如果是第一次使用誊垢,對自定義下載的插件不太了解掉弛,可以選擇推薦模式。
全部成功后頁面如下:
創(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