本文是《Jenkins流水線(pipeline)實戰》系列的第三篇,前面已對Jenkins流水線有了基本認識,也試過從GitHub下載pipeline腳本並執行,今天的實戰是編寫一段pipeline腳本,該腳本的做用是從GitHub下載一個Java項目(Maven構建的),而後編輯構建此項目,並將構建結果製做成Docker鏡像而且推送到私有鏡像倉庫;git
爲了快速完成Jenkins部署,本次實戰用到了Docker,請在實戰前準備好如下環境:github
今天的實戰功能以下圖所示:docker
構建好的Docker鏡像,會被推送到Docker鏡像倉庫Harbor,此倉庫是我本身在本地搭建的,詳細搭建步驟請參考《CentOS部署Harbor鏡像倉庫》若是您有hub.docker.com網站的帳號,也能夠直接將鏡像推送到此網站,這樣你們都能使用到您製做的鏡像了。jvm
本次實戰會將一個GitHub上的項目先編譯,再構建成Docker鏡像,我這邊準備了一個基於Maven構建的SpringBoot項目,這是個Hello world級別的工程,惟一特別之處是pom.xml中用到了Jib插件,用來將SpringBoot項目構建成Docker鏡像。maven
該項目的源碼能夠從GitHub上下載,地址和連接信息以下表所示:工具
這個git項目中有多個文件夾,本章的應用在hellojib文件夾下,以下圖所示:來看看此工程的pom.xml,重點是Jib插件部分,以下所示:網站
<!--使用jib插件-->
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>1.3.0</version>
<configuration>
<!--from節點用來設置鏡像的基礎鏡像,至關於Docerkfile中的FROM關鍵字-->
<from>
<!--使用openjdk官方鏡像,tag是8-jdk-stretch,表示鏡像的操做系統是debian9,裝好了jdk8-->
<image>openjdk:8-jdk-stretch</image>
</from>
<to>
<!--鏡像名稱和tag,使用了mvn內置變量${project.version},表示當前工程的version-->
<image>bolingcavalry/hellojib:${project.version}</image>
</to>
<!--容器相關的屬性-->
<container>
<!--jvm內存參數-->
<jvmFlags>
<jvmFlag>-Xms4g</jvmFlag>
<jvmFlag>-Xmx4g</jvmFlag>
</jvmFlags>
<!--要暴露的端口-->
<ports>
<port>8080</port>
</ports>
</container>
</configuration>
</plugin>
</plugins>
</build>複製代碼
使用Jib將SpringBoot項目構建成Docker鏡像的更多信息,請參考《Docker與Jib(maven插件版)實戰》;ui
pipeline {
agent any
tools {
maven 'mvn-3.6.2'
}
stages {
stage('Checkout') {
steps {
echo '從GitHub下載項目源碼'
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'git-account-passwd', url: 'https://github.com/zq2599/pipeline.git']]])
}
}
stage('Build') {
steps {
echo '開始編譯構建'
sh 'cd hellojib && mvn clean compile -U -DskipTests jib:dockerBuild'
}
}
stage('Push') {
steps {
echo '將本地Docker鏡像推送到Harbor鏡像倉庫'
echo '給當前鏡像設置帶有Harbor地址和項目名稱的Tag,這樣才能推送到Harbor的library項目之下'
sh 'docker tag bolingcavalry/hellojib:0.0.1-SNAPSHOT 192.168.50.167/library/hellojib:0.0.1-SNAPSHOT'
echo '登陸Harbor'
sh 'docker login 192.168.50.167 -u admin -p Harbor12345'
echo '登陸chengg成功,開始推送鏡像'
sh 'docker push 192.168.50.167/library/hellojib:0.0.1-SNAPSHOT'
}
}
stage('Clean') {
steps {
echo '清理Maven工程'
sh 'cd hellojib && mvn clean'
echo '刪除鏡像'
sh 'docker rmi bolingcavalry/hellojib:0.0.1-SNAPSHOT 192.168.50.167/library/hellojib:0.0.1-SNAPSHOT'
echo '清理完畢'
}
}
}
}複製代碼
今天的實戰中,編寫的pipeline腳本是保存在任務的設置中的,還記得 《讓Jenkins執行GitHub上的pipeline腳本》一篇的內容麼?您能夠嘗試將今天的pipeline腳本存放在GitHub上,這樣從構建腳本到業務項目都實現了版本控制,在多人開發階段更加實用。google
至此,基於pipeline操做的GitHub項目的實戰就完成了,若是您正在尋求容器化環境的CI && CD方案,願本文能給您提供一些參考。url