在如今的互联网时代,随着软件开发复杂度的不断提高,软件开发和发布管理也越来越重要。目前已经形成一套标准的流程,最重要的组成部分就是持续集成(Continuous Integration,CI)及持续部署、交付(CD)。在此,我们来以一个案例初步了解 CI 流程。那么什么是 CI 呢?简单来讲,CI 就是将传统的代码合并、构建、部署、测试都集成在一起,不断地执行这个过程,并对结果进行反馈。
流程图
image image工作流程
1. 开发人员提交代码到Git版本仓库;
2. Jenkins人工/定时触发项目构建;
3. Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;
4. Jenkins在Docker主机创建容器并发布
主机环境规划
docker-jenkins: 10.0.0.98
docker-git-harbor:10.0.0.99
1. 部署Git代码版本仓库
安装:
image配置git用户:
image创建库:
image另一台docker-jenkins访问该仓库:
image模拟生产项目,拉取github上的一个demo,并上传至本地git库
image**2. jenkins环境部署 **
部署jdk环境及maven
image在10.0.0.98主机安装Jenkins,下载Tomcat二进制包将war包到webapps下即可:
image启动后,浏览器访问http://10.0.0.98:8080/,按提示输入密码,登录即可。
image3. 部署私有镜像仓库
企业级harbor镜像仓库部署:
https://www.cnblogs.com/kaye/p/10524391.html
构建Tomcat基础镜像,并推送到harbor镜像库:
image4. Jenkins安装必要插件
由于jenkins是离线安装,所有在此需要配置一下插件下载地址:系统管理-->插件管理-->Advanced
image image修改下方地址,将https修改为http 再点Submit
imageSubmit后点击Available,Check now此时我们可以看到很多可获得插件
image首先搜索并安装Pipeline插件
pipeline 是一套运行于jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与
可视化。
image再安装SCM to job 插件,同上步骤(搜索,安装)。
** 5. 项目创建**
创建jobs
image选择流水线类型
image到这里我们就开始配置Pipeline script,点击Pipeline语法,来自动生成我们需要的配置。
image如下图,我们Git方式,配置Git仓库地址,再添加认证相关。
image这里我们使用的是秘钥认证方式,需要将jenkins上生成的公钥发送到git服务器上,然后将jenkins上的生成的私钥内容粘贴到下图Key中,这样jenkins就可以免交互的拉取git仓库中的代码了。
image image image配置完成后,我们就可以生成Pipeline脚本了。点击下方Generate Pipeline Script,然后复制方框内的内容。
image编写我们所需要的Pipeline脚本如下,将其粘贴到script的拉取代码模块中,并修改分支master为${branch},其他模块内容自行编写。
node {
// 拉取代码
stage('Git Checkout') {
checkout([$class: 'GitSCM', branches: [[name: '${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'c42214eb-db1e-49fb-83c9-f78d1f4310a2', url: 'git@10.0.0.99:/home/git/tomcat-java-demo.git']]])
}
// 代码编译
stage('Maven Build') {
sh '''
export JAVA_HOME=/usr/local/jdk
/usr/local/maven/bin/mvn clean package -Dmaven.test.skip=true
'''
}
// 项目打包到镜像并推送到镜像仓库
stage('Build and Push Image') {
sh '''
REPOSITORY=reg.dingkai.com/library/tomcat-java-demo:${branch}
cat > Dockerfile << EOF
FROM reg.dingkai.com/library/tomcat:v1
MAINTAINER kai
RUN rm -rf /usr/local/tomcat/webapps/*
ADD target/*.war /usr/local/tomcat/webapps/ROOT.war
EOF
docker build -t $REPOSITORY .
docker login reg.dingkai.com -u admin -p 123456
docker push $REPOSITORY
'''
}
// 部署到Docker主机
stage('Deploy to Docker') {
sh '''
REPOSITORY=reg.dingkai.com/library/tomcat-java-demo:${branch}
docker rm -f tomcat-java-demo |true
docker pull $REPOSITORY
docker container run -d --name tomcat-java-demo -p 88:8080 $REPOSITORY
'''
}
}
image在Pipeline脚本里面我们指定了一个branch参数,所以我们需要传递一个参数变量,这里我们选择参数化构建,默认值为master分支。
image然后保存配置。
6. 开始构建任务
回到主界面,我们开始构建任务
image可以通过Console Output输出查看jenkins构建流程
image成功构建会提示: SUCCESS
image我们也可以查看构建成功后的图形构建过程
image通过浏览器来访问tomcat-java-demo项目:http://10.0.0.98:88/
可以正常访问,至此基于 Jenkins+Docker+Git 的流程已经成功部署了。
网友评论