0.前言
在互聯(lián)網(wǎng)時(shí)代,對于每一家公司,軟件開發(fā)和發(fā)布的重要性不言而喻赖草,目前已經(jīng)形成一套標(biāo)準(zhǔn)的流程,最重要的組成部分就是持續(xù)集成(CI)及持續(xù)部署剪个、交付(CD)秧骑。本文基于Jenkins+Docker+Github實(shí)現(xiàn)一套CI自動化發(fā)布流程。
??本文想介紹下,對于沒有接觸過CI腿堤,CD的同學(xué)阀坏,如何基于Jenkins+Docker+Github搭建一套自動化發(fā)布流程,本文會以一個(gè)簡單Java Web項(xiàng)目為例子笆檀,每次Push代碼到github上忌堂,jenkins都會重新拉取代碼,并跑完UT IT測試酗洒,然后將最新的war包構(gòu)建好士修,發(fā)布到docker的容器上。
1. 環(huán)境搭建
1.1 Docker安裝
我的環(huán)境是CentOS7.5樱衷,首先在server上安裝Docker棋嘲。具體步驟可以參照以下文章:
Docker入門安裝使用教程
1.2 Jenkins安裝
- docker 安裝jenkins非常方便執(zhí)行下面的腳本就OK了
docker run --name devops-jenkins --user=root -p 8080:8080 -p 50000:50000 -v /opt/data/jenkins_home:/var/jenkins_home -d jenkins/jenkins:lts
- registry安裝,做這一步的目的是作為開發(fā)者矩桂, 自然會自己制作一些鏡像沸移, 在公司內(nèi)網(wǎng)分發(fā), 或者開發(fā)團(tuán)隊(duì)制作鏡像侄榴, 然后交付給測試團(tuán)隊(duì)進(jìn)行測試雹锣, 這就需要一個(gè)內(nèi)部分發(fā)鏡像的服務(wù)器, 這個(gè) Docker 團(tuán)隊(duì)自然也想到了癞蚕, 并且提供了一個(gè)鏡像 retistry 蕊爵, 先把這個(gè)鏡像拉倒本地
docker run --name devops-registry -p 5000:5000 -v /opt/devdata/registry:/var/lib/registry -d registry
- 啟動完jenkins后通過瀏覽器輸入地址:
http://部署jenkins主機(jī)IP:端口
- 根據(jù)提示從輸入administrator password 或者可以通過啟動日志
docker logs devops-jenkins
image.png
-
進(jìn)入插件安裝界面,連網(wǎng)等待插件安裝桦山,安裝完插件后攒射,進(jìn)入創(chuàng)建管理員界面,輸入完管理員賬號后恒水,點(diǎn)擊continue as admin 就安裝完成了会放,如果需要安裝一些自己想要的插件,則可以Manage jenkins=>Manage Plugin進(jìn)行修改钉凌。
image.png
1.3 Java 項(xiàng)目介紹
這個(gè)就不詳細(xì)介紹了鸦概,就是利用Eclipse簡單的建了一個(gè)簡單的Maven(Spring Boot)項(xiàng)目,包含了一個(gè)簡單的Controller和UT甩骏,IT測試case窗市,項(xiàng)目結(jié)構(gòu)如下:
Github地址如下:https://github.com/Syfhehe/CI-CD-Demo
2. Jenkins Pipeline
2.1 Jenkins Pipeline 打通 Github集成的橋梁。
- Maven配置
進(jìn)入Jenkins-->Global Tool Configuration饮笛,添加一個(gè)Maven咨察。
- 進(jìn)入Github --> Setting -->Develper Settings --> Personal Access Token --> Generate new token,生成一個(gè)新的Token福青。
image.png
自己先保存此token
摄狱,如果丟失脓诡,之后再也無法找到這個(gè)token
。
3.為了讓Pipeline捕獲倉庫中的事件(例如push)媒役,應(yīng)該在GitHub上正確設(shè)置Jenkins GitHub webhook祝谚。
在Payload URL中設(shè)置xxx/github-webhook/,如下所示:
- 登錄Jenkins酣衷,進(jìn)入系統(tǒng)管理 --> 系統(tǒng)設(shè)置 --> GitHub --> Add GitHub Sever交惯,添加一個(gè)Github Server
image.png
API URL 輸入 https://api.github.com,Credentials點(diǎn)擊Add添加穿仪,Kind選擇Secret Text,具體如下圖所示席爽。
image.png
設(shè)置完成后,點(diǎn)擊TestConnection
,提示Credentials verified for user UUserName, rate limit: xxx
,則表明有效啊片。
2.2 建立一個(gè)Github有push事件只锻, Jenkins Pipeline 就會自動運(yùn)行的Jenkins Item
1.在我們之前建的Java項(xiàng)目的Git倉庫的根目錄創(chuàng)建并保存一個(gè)名為 Jenkinsfile 的文本文件。
復(fù)制以下聲明式流水線代碼并粘貼到 Jenkinsfile 文件中:
pipeline {
agent any
stages {
stage ('Compile Stage') {
steps {
withMaven(maven : 'Maven-3.6.1') {
sh 'mvn clean compile'
}
}
}
stage ('Testing Stage') {
steps {
withMaven(maven : 'Maven-3.6.1') {
sh 'mvn test'
}
}
post {
always {
junit 'target/surefire-reports/*.xml'
}
}
}
}
}
2.在Jenkins上創(chuàng)建一個(gè)Pipeline紫谷。名字隨便齐饮。
3.勾選GitHub hook trigger for GITScm polling ,這樣每次push就會執(zhí)行一遍jenkinsfile的腳本笤昨。
如果希望pipeline執(zhí)行Jenkinsfile的腳本沈矿,還需進(jìn)行以下設(shè)置,這里的Credentials就是在上一章生成的咬腋。
-
保存退出,然后隨便push一點(diǎn)修改到github睡互,你就會發(fā)現(xiàn)Jenkins Pipeline會自動build根竿。
image.png
5.這樣CI-CD的前半部分:CI,就算完成了就珠。
To Be Continue.....