本文做者:CODING 用户 - 高文
持续集成 (Continuous integration) 是一种软件开发实践,即团队开发成员常常集成他们的工做,经过每一个成员天天至少集成一次,也就意味着天天可能会发生屡次集成。成员之间的代码相互影响,可能会出现各类编译、运行的错误,为了不提交代码影响到其余开发者,每次集成都经过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现错误,使得开发过程更加简单方便。java
通用的持续集成流程大致是像上图所示同样,借助 Jenkins 连通 Git 与 Docker 镜像仓库,为后续的持续部署作准备。git
而在「CODING 持续集成」中,能够省去其中不少环境部署的麻烦事,下面说一下我在 CODING 平台作的持续集成工做。spring
CODING 是国内首个一站式云端软件服务平台,致力于经过技术创新推进软件开发升级转型,让开发更简单。将代码托管、项目管理、Cloud Studio、一键部署等开发工具集成到浏览器中,免除繁杂的开发环境部署,下降软件开发部署成本。docker
最初了解 「CODING」 ,是我在开发微信小程序时,腾讯云推荐托管代码到 CODING 上,因而注册了一个 CODING 帐号。shell
开始使用时,主要以Web版开发工具为主,以为只是一个 Eclipse 的 Che 版本,当时也本身部署一个 Eclipse 的 Che 版本。但部署 Che 版本时,才发现, CODING 其实比 Che 好用得不是一点半点。流畅性、易用性已经高出 Che 一个等级了,功能上也比 Che 更丰富。后来逐渐用起来了,发现 「CODING」 不仅是 WebIDE ,仍是 Git 、 Jenkins 、 Wiki 、敏捷开发工具、项目管理工具……如今持续集成功能出来了,能够免费试用15天,因而注册一个玩一玩。apache
wencst 的我的主页json
本文所使用的源代码为本人开源的自动开发框架。小程序
下面为 Git 的操做了,相信看文章的大部分人能够略过这一步。微信小程序
详细的 Git 步骤能够参考:《 CODING 中的 Git 操做》浏览器
Git 操做主要为后续持续集成操做的触发器。
持续集成操做的设置相对比较简单,按照提示一步步下来便可。有一块须要注意的,就是构建所用的分支,在配置持续集成时,须要选择构建触发方式,触发时间(代码上传时触发/手动触发),以及完成时邮件发送提醒(提醒触发者/不作任何事/只有失败时提醒)。对于多分支代码工程必定要注意,选择本身所需的配置。我这里所用的为系统默认配置,即当有人提交代码至 master 时触发构建,完成时老是发邮件提示开发者。
「CODING 持续集成」提供了三套不一样的 Jenkinsfile 模板供开发者使用:简易模板、并行模板、自定义模板。我这里选用简易模板,并稍做修改。
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 "镜像上传完毕" } } } }
更新 Jenkinsfile 后,代码 push 到对应的分支上,会自动执行构建,发现构建失败。
点开后,查看构建失败的具体缘由,输出与 maven 编译时输出的没有什么差异。
缘由提示: there is no POM in this directory。
原来我中间还有一层目录,须要进入目录后才能编译。
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 "镜像上传完毕" } } } }
提交代码后,会自动执行构建。
能够显示程序编译过程,能够显示每一步详细输出,能够增长状态徽标到相应的文档或网页中。能够说「CODING 持续集成」 想的是比较周到的,基本集成了绝大部分开源系统中相应的职能。
构建使用默认的 https://repo.maven.apache.org 源,构建速度也还能够。
至此持续集成完成,界面清晰整洁,而且能够对测试报告和构建结果进行下载,构建过程也会发邮件给相关人员。确实让开发更简单了。之前在作这一系列工做时,架构师起码要作几件事情:
1.搭建 git 仓库
2.搭建 jenkins
3.在 git 仓库中增长 CI 配置
4.邮箱配置
「CODING 持续集成」为开发者省去了不少工做,除了构建过程当中必要的工做之外,其余的基本一键搞定,不用关心各个组件的安装配置,环境状况,网络状况,存储备份等内容。
重点解释一下 stages 部分,总体分为三个 stages:
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 包都算做工程产物。
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 企业版」 的持续集成后的感觉:
但愿 CODING 会愈来愈完善,愈来愈好!