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


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

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

    如果是在公司,一般会用公司的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}"
              ]
            )
          }
        }
    
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

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

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

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

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

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

    doCicd

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

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

    dockerResult

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

    limit

  • 相关阅读:
    java计算机毕业设计基于安卓Android的校园快药APP-药店管理app
    【MyBatis】三、使用mybatis完成CRUD
    Django--31Django知识体系梳理总结
    Mybatis:Mybatis的各种查询功能(5)
    记录Vagrant常用的一些命令
    SpringBoot——静态资源及原理
    《Web安全基础》01. 基础知识
    【云原生】项目上云最佳实践
    多线程使用不当导致的 OOM
    10.03
  • 原文地址:https://blog.csdn.net/puhaiyang/article/details/126806413