coding上的免费的编译、打包、推镜像工具(cicd)太强了,必须分享一下

发布于:2022-12-21 ⋅ 阅读:(186) ⋅ 点赞:(0)

在做一些自己感兴趣的开源项目时,常常也会遇到需要进行持续集成的场景

如将一个项目进行编译、打包、推镜像

如果是在公司,一般会用公司的jenkins来进行持续集成

如果是个人项目,又没有jenkins等资源或者嫌麻烦,我尝试过用以下办法来解决:

  1. 如果是maven项目,可以使用fabric8docker-maven-plugin打包插件来进行,实现半自动化的方式进行打包和推镜像
  2. 如果是Github的项目,可以使用其中的Actions功能实现CICD,不过可能会遇到连国内镜像仓库网络不顺畅的问题,或高级功能需要付费

actions

一直在想有没有更好的方式实现CICD,正好今天就看到了coding上的持续集成功能,尝试了一下感觉非常好用,分享一下。

coding

主要流程

coding上的这个cicd功能比较多,devops的那一套感觉基本都实现完了,也有关于项目管理的一些功能,感觉着实很强。感兴趣的可以仔细研究一下,其官网地址为:https://coding.net/

使用起来个人感觉也是比较简单的,以一个github上的开源项目进行编码、打包、推镜像为例,主要步骤大致有以下:

1. 创建项目

顾名思义,就是创建一个项目
createProject

2. 关联代码仓库

项目创建好了之后,进入到项目中。

将这个项目对应的项目代码关联一下,支持多种仓库地址,如我这里的,将github上的代码关联一下
linkgit

3. 创建制品仓库

在【制品管理】中,创建一个制品。也就是产出物是什么,可以是docker、maven的jar包、helm啥的

productResult

如我这里的应用产出物是一个docker

4. 创建持续集成配置文件

在【持续集成】中选择构建计划,再点创建构建计划。

这个步骤也是最关键的地方,也就是jenkinsfile的定义。由它来进行项目的CICD的过程定义。

创建时可以选择某个模板来创建,改一改基本就可以用了。

cicdDef

也可以自己在文本编辑器中输入jenkinsfile的方式来创建。如我这里的:

pipeline {
  agent any
  environment {
    CODING_DOCKER_REG_HOST = "${CCI_CURRENT_TEAM}-docker.pkg.${CCI_CURRENT_DOMAIN}"
    CODING_DOCKER_IMAGE_NAME = "${PROJECT_NAME.toLowerCase()}/${DOCKER_REPO_NAME}/${DOCKER_IMAGE_NAME}"

  }
  stages {
    stage("检出") {
      steps {
        checkout(
          [$class: 'GitSCM',
          branches: [[name: GIT_BUILD_REF]],
          userRemoteConfigs: [[
            url: GIT_REPO_URL,
              credentialsId: CREDENTIALS_ID
            ]]]
        )
      }
    }
        

    stage('编译') {
      
      steps {
        sh "mvn clean package -Dmaven.test.skip=true -pl ${DOCKER_IMAGE_NAME} -am"
      }
    }
    
    stage('构建镜像并推送到 CODING Docker 制品库') {
      steps {
       script {
          env.cusversionall=sh(returnStdout: true, script: 'date +%Y%m%d%H%M').trim()
          echo "${cusversionall}"
          }

        sh "docker build -t ${CODING_DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_VERSION}-${cusversionall} -f ${DOCKERFILE_PATH} ${DOCKER_BUILD_CONTEXT}"
        useCustomStepPlugin(
          key: 'SYSTEM:artifact_docker_push',
          version: 'latest',
          params: [
            image:"${CODING_DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_VERSION}-${cusversionall}",
            repo:"${DOCKER_REPO_NAME}"
          ]
        )
      }
    }

  }
}

创建好了之后,点构建,输入启动参数就可以了。和jenkins上还是比较像的。

其中这上面的jenkinsfile我也是用模板里的改的,主要是将打包语句修改了一下,让其只打maven聚合工程中的某一个工程以搞高打包速度:

      steps {
        sh "mvn clean package -Dmaven.test.skip=true -pl ${DOCKER_IMAGE_NAME} -am"
      }

以及docker镜像以分支+时间戳的方式进行命名

       script {
          env.cusversionall=sh(returnStdout: true, script: 'date +%Y%m%d%H%M').trim()
          echo "${cusversionall}"
          }

doCicd

构建过程也还算是比较快的。

构建好了之后,在制品仓库中就可以看到对应的产出制品了。

dockerResult

最后再提一点的就是,由于这个是免费的,也有一定的资源限制,如构建分钟数每个月只有300分钟,不过对于个人的开源项目来讲感觉也足够了。

limit


网站公告

今日签到

点亮在社区的每一天
去签到