您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    我用 GitHub Action 搭建了一套 CI/CD 系统(2)
    时间:2020-05-12 21:05 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    Code Coverage 的阐明见博文:图数据库 Nebula Graph 的代码变更测试掩盖率实际。

    https://nebula-graph.io/cn/posts/integrate-codecov-test-coverage-with-nebula-graph/

    3. Nightly 构建

    在 Nebula Graph 的集成测试框架中,希望可以在每天早晨对 codebase 中的代码全量跑一遍一切的测试用例。同时有些新的特性,有时也希望能快速地打包交给用户体验运用。这就需求 CI 系统能在每天给出当日代码的 docker 镜像和 rpm/deb 安装包。

    GitHub Action 被触发的事情类型除了 pull_request,还可以执行 schedule 类型。schedule 类型的事情可以像 crontab 一样,让用户指定任何重复义务的触发时间,比如每天清晨两点执行义务如下所示:

    on: 

      schedule: 

        - cron: '0 18 * * *' 

    由于 GitHub 采用的是 UTC 时间,所以东八区的清晨 2 点,就对应到 UTC 的前日 18 时。

    docker

    每日构建的 docker 镜像需求 push 到 docker hub 上,并打上 nightly 的标签,集成测试的 k8s 集群,将 image 的拉取策略设置为 Always,每日触发便能滚动晋级到当日最新停止测试。由于当日的成绩目前都会尽量当日处置,便没有再给 nightly 的镜像再额外打一个日期的 tag。对应的 action 部分如下所示:

    - name: Build image 

           env: 

             IMAGE_NAME: ${{ secrets.DOCKER_USERNAME }}/nebula-${{ matrix.service }}:nightly 

           run: | 

             docker build -t ${IMAGE_NAME} -f docker/Dockerfile.${{ matrix.service }} . 

             docker push ${IMAGE_NAME} 

           shell: bash 

    package

    GitHub Action 提供了 artifacts 的功用,可以让用户耐久化 workflow 运转进程中的数据,这些数据可以保留 90 天。关于 nightly 版本安装包的存储而言,曾经绰绰不足。应用官方提供的 actions/upload-artifact@v1  action,可以方便的将指定目录下的文件上传到 artifacts。最后 nightly 版本的 nebula 的安装包如下图所示。

    我用 GitHub Action 搭建了一套 CI/CD 系统

    上述残缺的 workflow 文件见 package.yaml

    https://github.com/vesoft-inc/nebula/blob/master/.github/workflows/package.yaml

    4. 分支发布

    为了更好地维护每个发布的版本和停止 bugfix,Nebula Graph 采用分支发布的方式。即每次发布之行停止 code freeze,并创立新的 release 分支,在 release 分支上只接受 bugfix,而不停止 feature 的开发。bugfix 还是会在开发分支上提交,最后 cherrypick 到 release 分支。

    在每次 release 时,除了 source 外,我们希望能把安装包也追加到 assets 中方便用户直接下载。假设每次都手工上传,既容易出错,也十分耗时。这就比较适宜 Action 来自动化这块的任务,而且,打包和上传都走 GitHub 外部网络,速度更快。

    在安装包编译好后,经过 curl 命令直接调用 GitHub 的 API,就能上传到 assets 中,详细脚本 内容如下所示:

    curl --silent \ 

         --request POST \ 

         --url "$upload_url?name=$filename" \ 

         --header "authorization: Bearer $github_token" \ 

         --header "content-type: $content_type" \ 

         --data-binary @"$filepath" 

    同时,为了安全起见,在每次的安装包发布时,希望可以计算安装包的 checksum 值,并将其一同上传到 assets 中,以便用户下载后停止残缺性校验。详细步骤如下所示:

    jobs: 

      package

        name: package and upload release assets 

        runs-on: ubuntu-latest 

        strategy: 

          matrix: 

            os: 

              - ubuntu1604 

              - ubuntu1804 

              - centos6 

              - centos7 

        container: 

          image: vesoft/nebula-dev:${{ matrix.os }} 

        steps: 

          - uses: actions/checkout@v1 

          - name: package 

            run: ./package/package.sh 

          - name: vars 

            id: vars 

            env: 

              CPACK_OUTPUT_DIR: build/cpack_output 

              SHA_EXT: sha256sum.txt 

            run: | 

              tag=$(echo ${{ github.ref }} | rev | cut -d/ -f1 | rev) 

              cd $CPACK_OUTPUT_DIR 

    (责任编辑:admin)