03月07日
持续集成之 Spring Boot 实战篇

本文作者: CODING 用户 - 何健

这次实战篇,我们借助「CODING 持续集成」,实现一个简单的 Spring Boot 项目从编码到最后部署的完整过程。本教程还有 B 站视频版,帮助读者更好地学习理解。


思路

在线上环境构建、测试、部署

这种情况,通常会将 jenkins 安装在服务器上,确保构建测试等操作环境和线上环境一致。

此时通常会在 jenkins 中配置好需要持续集成的仓库,以及具体流程。

这种方式非常简单粗暴,也非常有效,但是缺点也很明显。可能 jenkins 会成为线上环境的旁站漏洞,这是非常不安全的。

那么,我们就需要更高级的方式,可以线上环境之外的构建测试,最终部署到线上环境。「CODING 持续集成」正是提供这类持续集成模式的平台。

不在实际部署服务器上构建、测试

为了避免占用线上服务器的资源,也为了避免安全问题,我们可以使用单独的 jenkins (或者其它此类软件)完成构建、测试、分发,实际部署通过单独的 webhook 实现。这样就可以避免在线上环境安装 Jenkins,还可以避免更复杂的系统安全维护。

这样做的优点:不会影响在线服务;
缺点:部署地机器最好是可以公网访问的,否则会无法完成后续分发步骤。

终极解决方案:使用 SaaS 化的 Jenkins

Software as a Service,软件即服务。「CODING 持续集成」集成了 SaaS 化的 Jenkins 等主流企业开发流程工具,实现了 DevOps 流程全自动化。开箱即用,直接用它就好!

捋一下思路

我们这次实战针对后一种思路

  1. 检出代码

  2. 构建

  3. 测试

  4. 分发

  5. 触发部署


实战

实际体验,还是很不错的。

视频地址:CODING 持续集成 - Spring Boot 项目
图片

第一步:初始化一个持续集成

1、首先,我们需要进入准备持续集成的项目。

 这里我用 [start.spring.io](https://start.spring.io) 初始化一个 demo 示例项目,并推送到仓库。
  为了方便大家,亲自体验,我准备了一个现成的仓库,可以直接 git clone 下来再 git push 到自己账户下使用。仓库地址:[demoForCI](https://dev.tencent.com/u/ipaddr/p/demoForCI)
 ![图片](https://ws1.sinaimg.cn/large/6ccda21fgy1g0s17bwc1cj20zc0ootbd.jpg)

2、解压 demo 项目,进入 demo 目录,初始化仓库。

      cd g:\demo\
      git init
      git set remote giturl
      git add ./
      git commit -m 'init repo'
      git push -u origin master

别忘了 git config user.name yournamegit config user.email youremail

3、开始体验
仓库准备好后,就可以开始体验「CODING 持续集成」
图片

  第一次的使用,需要先创建一个 Jenkinsfile,很多小伙伴会说,第一次用,不知道是啥。

  没关系,[「CODING 持续集成」](https://e.coding.net/?utm_source=zhihu&utm_medium=expreport&utm_campaign=devops&utm_content=do05)已经给我们准备好了模板,非常容易理解,可以认为是特定格式语法写一套 task 流程。

  点击一下 “简易模板”,更具实际情况修改一下就可以。

  ![图片](https://ws1.sinaimg.cn/large/6ccda21fgy1g0s1auivl6j210m0kjwgo.jpg)

第二步:编写 Jenkinsfile

为了方便理解,我们从简易模板开始,分别修改对应阶段的任务。

1、配置构建环境,「CODING 持续集成」目前支持 java-8、python-3.5、ruby-2.3、go-1.11 等等。
在 Jenkinsfile 的 pipeline 里添加:

    agent {
      // 此处设定构建环境,目前可选有
      // default, java-8, python-3.5, ruby-2.3, go-1.11 等
      // 详情请阅 https://dev.tencent.com/help/knowledge-base/how-to-use-ci#agents
      label "java-8"
    }

2、检出
这里不得不说,「CODING 持续集成」这里做的还是很方便的,提供了适用于好几种不同场景的模板。默认简易模板是带有检出部分的,我们可以根据实际情况进行修改。默认情况下,env.GIT_BUILD_REF 的值就是 master 主分支,实际上我们可以定制为其它专门用于构建发的分支。

这里,大家可以自己修改具体要检出的分支。
    stage("检出") {
      steps {
          sh 'ci-init'
          checkout(
            [$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]], 
            userRemoteConfigs: [[url: env.GIT_REPO_URL]]]
          )
      }
    }

3、构建

    stage("构建") {
      steps {
        echo "构建中..."
        sh 'java -version'
        sh 'mvn package'
        echo "构建完成."
        archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true // 收集构建产物
      }
    }

这里需要注意,Spring Boot 的 pom 中需要添加一个插件。
修改后:

    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</ar