使用 CODING 进行 SpringBoot 项目的持续集成
持续集成简介
持续集成(Continuous integration)是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。成员之间的代码相互影响,可能会出现各种编译、运行的错误,为了避免提交代码影响到其他开发者,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现错误,使得开发过程更加简单方便。
我与Coding之缘
Coding持续集成
基础操作
- 首先需要创建企业账号;
- 然后创建自己的项目;
- 进入项目维护项目代码。
本文所使用的源代码为本人在Gitee中开源的自动开发框架。
Git操作
持续集成
pipeline {
agent {
label "default"
}
stages {
stage("检出") {
steps {
sh 'ci-init'
checkout(
[$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]],
userRemoteConfigs: [[url: env.GIT_REPO_URL]]]
)
}
}
stage("构建") {
steps {
echo "构建中..."
sh 'mvn clean install'
echo "构建完成."
archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true // 收集构建产物
}
}
stage("Docker") {
steps {
echo "Docker镜像生成中..."
sh 'cd wencst-generatorJPA/target && cp classes/Dockerfile . && docker build -t wencst/wencst-generatorJPA .'
echo "镜像生成完成."
sh 'docker push wencst/wencst-generatorJPA'
echo "镜像上传完毕"
}
}
}
}
pipeline {
agent {
label "default"
}
stages {
stage("检出") {
steps {
sh 'ci-init'
checkout(
[$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]],
userRemoteConfigs: [[url: env.GIT_REPO_URL]]]
)
}
}
stage("构建") {
steps {
echo "构建中..."
sh 'cd wencst-generatorJPA && mvn clean install'
echo "构建完成."
archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true // 收集构建产物
}
}
stage("Docker") {
steps {
echo "Docker镜像生成中..."
sh 'cd wencst-generatorJPA/target && cp classes/Dockerfile . && docker build -t wencst/wencst-generatorJPA .'
echo "镜像生成完成."
sh 'docker push wencst/wencst-generatorJPA'
echo "镜像上传完毕"
}
}
}
}
Jenkinsfile拆解
- 第一步为代码检出
stage("检出") {
steps {
sh 'ci-init'
checkout(
[$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]],
userRemoteConfigs: [[url: env.GIT_REPO_URL]]]
)
}
}
这一步检出项目中的代码到jenkins的workspace目录下,这一步是Coding默认的配置,无需过多解释。
- 第二步为编译构建
stage("构建") {
steps {
echo "构建中..."
sh 'cd wencst-generatorJPA && mvn clean install'
echo "构建完成."
archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true
}
}
这一步是执行代码编译,我所用的是maven编译spring boot工程,Coding集成了mvn命令,可以直接执行maven操作。
注意:jenkins执行sh命令的根路径都是在当前workspace下,所以切换路径与maven编译命令要在同一个sh命令下。
编译执行后,收集编译的产物,archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true
这一步的意思是,将所有工程的target路径下的jar包都算作工程产物。
- 第三步为docker镜像生成
stage("Docker") {
steps {
echo "Docker镜像生成中..."
sh 'cd wencst-generatorJPA/target && cp classes/Dockerfile . && docker build -t wencst/wencst-generatorJPA .'
echo "镜像生成完成."
sh 'docker push wencst/wencst-generatorJPA'
echo "镜像上传完毕"
}
}
对于熟悉docker的人并不是很陌生,依旧使用shell命令来执行docker build操作。
cd wencst-generatorJPA/target
首先切换路径到jar包所在目录。
cp classes/Dockerfile .
拷贝Dockerfile到当前路径下。
docker build -t wencst/wencst-generatorJPA .
执行docker build操作,用以创建docker镜像。
docker push wencst/wencst-generatorJPA
将创建出来的docker镜像上传到dockerhub中去。
总结
整体来说 CODING 想的很周全了,无论从易用性、美观度以及人性化角度上来说,做得都非常不错。下面着重说说我使用 CODING 的持续集成后的感受:
-
满足了从开发到代码管理,到代码集成,到单元测试,甚至到后续部署,一站式管理;
-
配置相对简单,只需配置 Jenkinsfile 即可完成,无需花费大量的人力物力来做各系统间的整合操作;
-
系统集成后,会给开发人员发送邮件,报告集成成功或失败,这一点还是比较人性化的;
-
CODING 持续集成平台集成了很多种命令,起码我用到的 mvn/java/docker/git 这一类的命令基本都集成在服务中了。