本文是《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