使用 CODING 进行 SpringBoot 项目的持续集成

作者: wencst 分类: JAVA,云计算,架构设计 发布时间: 2019-01-09 11:17 阅读: 5,791 次

持续集成简介

持续集成(Continuous integration)是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。成员之间的代码相互影响,可能会出现各种编译、运行的错误,为了避免提交代码影响到其他开发者,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现错误,使得开发过程更加简单方便。

 image
通用的持续集成流程大体是像上图所示一样,借助Jenkins连通Git与Docker镜像仓库,为后续的持续部署做准备。
而在Coding中,可以省去其中很多环境部署的麻烦事,下面说一下我在Coding平台做的持续集成工作。

我与Coding之缘

Coding是国内首个一站式云端软件服务平台,致力于通过技术创新推动软件开发升级转型,让开发更简单。将代码托管、项目管理、Cloud Studio、一键部署等开发工具集成到浏览器中,免除繁杂的开发环境部署,降低软件开发部署成本。
最初了解Coding,是我在开发微信小程序时,腾讯云推荐托管代码到Coding上,于是注册了一个Coding账号。
开始使用时,主要以Web版开发工具为主,觉得只是一个Eclipse的Che版本,当时也自己部署一个Eclipse的Che版本。但部署Che版本时,才发现,Coding其实比Che好用得不是一点半点。流畅性、易用性已经高出Che一个等级了,功能上也比Che更丰富。后来逐渐用起来了,发现Coding不只是WebIDE,还是Git、Jenkins、Wiki、敏捷开发工具、项目管理工具……现在持续集成功能出来了,可以免费试用15天,于是注册一个玩一玩。
https://wencst.coding.net/user

Coding持续集成

基础操作

  • 首先需要创建企业账号;
  • 然后创建自己的项目;
  • 进入项目维护项目代码。

本文所使用的源代码为本人在Gitee中开源的自动开发框架。

Git操作

下面为Git的操作了,相信看文章的大部分人可以略过这一步。
详细的Git步骤可以参考:Coding中的Git操作
Git操作主要为后续持续集成操作的触发器。

持续集成

持续集成操作的设置相对比较简单,按照提示一步步下来即可。有一块需要注意的,就是构建所用的分支,在配置持续集成时,需要选择构建触发方式,触发时间(代码上传时触发/手动触发),以及完成时邮件发送提醒(提醒触发者/不做任何事/只有失败时提醒)。对于多分支代码工程一定要注意,选择自己所需的配置。我这里所用的为系统默认配置,即当有人提交代码至master时触发构建,完成时总是发邮件提示开发者。
官方提供了三套不同的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为开发者省去了很多工作,除了构建过程中必要的工作以外,其他的基本一键搞定,不用关心各个组件的安装配置,环境情况,网络情况,存储备份等内容。

Jenkinsfile拆解

重点解释一下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包都算作工程产物。

  • 第三步为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 的持续集成后的感受:

  1. 满足了从开发到代码管理,到代码集成,到单元测试,甚至到后续部署,一站式管理;

  2. 配置相对简单,只需配置 Jenkinsfile 即可完成,无需花费大量的人力物力来做各系统间的整合操作;

  3. 系统集成后,会给开发人员发送邮件,报告集成成功或失败,这一点还是比较人性化的;

  4. CODING 持续集成平台集成了很多种命令,起码我用到的 mvn/java/docker/git 这一类的命令基本都集成在服务中了。

希望 CODING 会越来越完善,越来越好!

如果文章对您有用,扫一下支付宝的红包,不胜感激!

欢迎加入QQ群进行技术交流:656897351(各种技术、招聘、兼职、培训欢迎加入)



Leave a Reply