基于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打開客戶端。第一次打開客戶端會要求輸入初始密碼,可以通過如下命令獲?。?/p>

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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容