Coding.net 使用 Jenkins 实现自动部署(CI/CD)

最近在做一些后端部署的工作,本来打算使用 Travis 部署,但是用于我的服务器在国内,所以在外网也需要挂梯子登陆到国内。但是使用 Coding.net 部署到腾讯云就方便很多(毕竟是同一家公司)。

在 Coding 创建制品库和部署

往往创建好 Coding 仓库之后需要手动配置来获得部署和制品库功能。点击「项目设置>功能开关」把「构建与部署」和「制品库」打开即可。

点击「制品库」增加 docker 仓库,这里的指引很方便,可以本地写一个 hello-world 发布上去。

点击「构建与部属>构建」新建构建计划,默认我都是选择代码仓库中的 Jenkins 文件,但是可以使用 coding 自带的图形化 Jenkins 编辑器,个人感觉还是比较鸡肋的,但是作为一个文件格式化工具还是不错的。另外帮助文档中有详细的变量说明。

Jenkins 配置

Jenkins 的主要功能是检出代码(git clone),编译代码,执行测试,打包成 docker image 最后上传到制品库。详细内容可以参考代码

pipeline {
  agent any
  stages {
    stage('检出') {
      steps {
        checkout([
          $class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]],
          userRemoteConfigs: [[
            url: env.GIT_REPO_URL,
            credentialsId: env.CREDENTIALS_ID
          ]]
        ])
      }
    }
    stage('编译') {
      steps {
        script {
          docker.image('strapi/base').withRun {
            docker.image("strapi/base").inside {
              sh 'node -v && yarn --version && yarn install && NODE_ENV=production yarn build'
            }
          }
        }

      }
    }
    stage('打包镜像') {
      steps {
        script {
          sh "docker build -t strapi:${env.GIT_BUILD_REF} -t gongbaodd-docker.pkg.coding.net/query_gongbushang_com/docker/strapi:latest ."
        }

      }
    }
    stage('发布') {
      steps {
        script {
            sh "docker login -u ${env.REGISTRY_USER} -p ${env.REGISTRY_PASS} ${REGISTRY_URL}"
            sh "docker push ${REGISTRY_URL}/query_gongbushang_com/docker/strapi:latest"
        }
      }
    }
  }
}

服务器部分

接下来就需要服务器自己下载镜像并执行了,这里有一个比较好的工具叫watchtower,它会每五分钟检查镜像是否有更新并更新本地镜像。

sudo docker run -d \
    --name watchtower \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower

接下来在服务器执行刚才编译好的镜像即可。