体验GitHub的CI构建工具Action

最近在找一个能拉取Github代码并执行构建的CI系统,看了Google的Cloud Build和一些其他的云构建工具,甚至想着不是还有自己的服务器嘛,大不了直接搭个Jenkins也得了…然后再找找居然发现了Github就有一个这样的工具,叫Github Action,开源项目可以直接全免使用,微软爸爸还是牛逼呀,直接上车。

CI/CD就不多说了,基本上已经是现行的互联网软件开发领域DevOps的老生常谈话题了。Github Action的使用网上的教程也很多,只保留参考链接。这里主要记录一下自己的初体验。

名词概念参考官方文档:https://docs.github.com/cn/actions/learn-github-actions/introduction-to-github-actions

简易使用方法可以参考:https://www.ruanyifeng.com/blog/2019/09/getting-started-with-github-actions.html

应用的仓库是自己写的轻量的跨进程通讯库TiMultiServerSupport,通讯库包含RPC和DataSet两种模式(扯远了)。Github Action的CI构建还是吃的yaml文件,放在仓库的根目录下的.github/workflows下,Github Action会自己扫这个目录下的yaml文件并自动应用,我写了一个Windows.yml,用于在Windows平台上构建项目,放在了这:
https://github.com/KondeU/TiMultiServerSupport/blob/master/.github/workflows/Windows.yml

从GitHub Desktop中推yaml到workflows目录下需要授权GitHub Desktop:

workflows_github_desktop_auth

Github官方提供了很多workflows的模板,TiMultiServerSupport的构建采用了脚本文件,Windows上是bat,因此没有采用模板,而是手写。

name: Windows
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]
jobs:
  build:
    runs-on: windows-latest
    steps:
    - uses: actions/checkout@v2
    - uses: ilammy/msvc-dev-cmd@v1
    - name: Build
      shell: cmd
      run: call "${{github.workspace}}\build.bat" ci
    - name: Publish
      uses: actions/upload-artifact@v2
      with:
        name: TiMultiServerSupport
        path: ${{github.workspace}}\build\archive

如上,当master分支上有push或pull_request的时候触发该构建。构建发生在Action支持的最新的Windows平台上(runs-on: windows-latest)。

steps下就是一次构建需要的步骤(一个“-”就是一个步骤):首先checkout代码,然后配置MSVC的编译环境,这里的-uses会使用Action的一些已经封装好的组件。之后就是Build步骤,在这个步骤中会运行cmd指令call "${{github.workspace}}\build.bat" ci,${{github.workspace}}是当前的仓目录。Build完成后,TiMultiServerSupport项目会在项目根目录的build\archive下生成发布的文件,在Publish任务中,会将这个文件夹下的文件打包到artifacts中,在Github Action的构建页面能看到artifacts并能下载,这里我们同样通过uses用了upload-artifact组件,但是仅在该步骤中使用。

yaml挺香的,配合Github Action更香了 🙂

协议

本文以上内容遵循CC BY-ND 4.0协议,署名-禁止演绎。

转载请注明出处:https://tis.ac.cn/blog/kongdeyou/github_action/
作者:kongdeyou(https://tis.ac.cn/blog/author/kongdeyou/)

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注