GitHub Actions 集成 CI/CD 功能,推进开发编译测试部署流程自动化

机器之心报道

参与:一鸣、张倩

开发者除了开发程序代码之外,有时候需要面对各种编译、测试和部署过程中的繁琐流程。这些流程往往需要手动完成,且由于不同开发者的开发环境、版本和平台不同,需要专门针对特定的环境定制工作流,因此阻碍了开源代码在社区中的传播。现在,这一切可能会自动化地完成了。近日,GitHub Actions,一个让开发者自动化实现定制化工作流逻辑的平台,集成了持续集成和交付(CI/CD)功能,可以让开发者自动化完成一系列工作流。

GitHub 今天开源了一个新版 GitHub Actions 的测试版,该版本内置了持续集成和交付(CI/CD)功能。CI/CD 是开发人员在同一个项目中将更改合并和集成到代码库中而不产生冲突的一种方法。整个平台计划于 11 月 13 日正式发布。

新版 Actions 的特性包括:

  1. 跨平台多语言支持的测试环境
  2. 自动化代码构建和部署工作流
  3. 可复用的 action 和工作流文件
  4. 实时显示运行结果
  5. 自动构建集成化的包和容器库
  6. 基于机器学习的建议工作流
  7. 对公开代码库免费的定价策略

Actions 平台是什么

GitHub Actions 是微软于 2018 年秋季推出的一个平台。这一平台可以让开发者实现定制化的程序逻辑,而不需要专门创建一个应用去完成需要的任务。开发者可以借助 Actions 平台建立工作流,使用他们代码仓库中定义好的 action、或者 GitHub 公开代码库中的 action,甚至是一个公开的 Docker 容器镜像。action 在这里指的是开发、测试、部署和发布代码中的各种流程,举个例子,一个 action 可以是公开发布某个 npm 模块,在创建紧急 issue 时为开发者发送 SMS 警告,或者部署生产流程中的代码的过程。这些工作流程过去需要开发者自己去手动实现。现在有了 Actions 平台后,借助 Actions 平台和 GitHub 中百万级别的公开库,任何一个开发者都可以直接建立上述工作流程,不需要专门去创建实现这些 action 的应用了。此外,开发者创建的工作流也可以分享给 GitHub 社区供其他人使用。

能够实现这样的功能是因为,GitHub Actions 平台是定制化的,可以使用 GitHub 的 API 和任何开源的第三方 API,以便于和代码库进行交互。当开发者把存储库中的代码转换成一个 action 时,只需为它编写一个 Docker 文件。Docker 文件可以被 GitHub 构建运行,并链接到工作流程中。此外,GitHub 还提供了一个可视化编辑器,用于帮助开发者在不使用 Docker 的情况下构建工作线程。

在 2018 年 Actions 平台刚建立的时候,就已经有很多 action 保存在 GitHub 上了,总数已超过 9600 万个。海量的公开代码库是 GitHub 开源这一平台的技术基础。

Actions 平台对开发者的意义

对于开发者而言,Actions 最大的意义在于自动化了代码开发之外的很多流程。

熟悉 GitHub、程序编译、部署、发布流程的开发者朋友应该知道,开发过程中有许多目前无法自动化的环节。例如,在项目开源时,出现了各种 issue 和 merge 请求,需要开发者手动管理。在源代码编译为程序时,需要集成各种依赖和相关的库,其中需要管理各种各样的编译流程,为代码创造合适的编译环境。在部署程序前,需要在各个平台和各个版本进行测试,避免发生不兼容等问题。有了 Actions 平台后,开发者可以自己编写工作流 YAML 文件,并借助 Actions 平台完成上述工作。更重要的是,在发布自己的程序后,编译、测试和部署的工作流也可以共享给其他开发者。其他开发者可以直接 fork 并运行,不再需要繁琐的准备程序运行环境和安装相关依赖。这些都加快了开源代码的传播,使开发者社区有了更紧密的联系和交流。

新版 Actions 的改进

在开源之初,Actions 平台的功能相对有限。首先,最初的公开的 Actions 只能在 Linux 平台上使用,而且只支持 Docker 容器。近日公开的新版本中,Actions 支持基本上所有的编程语言,因此也可以在多个平台上使用,如 Linux、Linux Container、Windows 和 macOS 等。此外,开发者也可以使用 Javascript 语言编写 action 的代码。这样一来,受益的开发者更多了。此外,和 2018 年公开的版本相比,Actions 支持了更多的编程语言,包括主流的开发语言,如 Node.js、Python、Java、PHP、Ruby、C/C++、.NET,以及 Android 和 iOS 设备上的开发语言。

本次更新后,开发者在任何平台上构建、测试和发布代码并在容器或虚拟机上运行他们的工作流。基于「矩阵构建(matrix builds)」功能,开发者可以同时在多个平台测试多个版本的项目,例如,可以同时在 Linux、macOS 和 windows 平台上测试三个不同版本的 Node.js 项目。因为 GitHub Actions 是基于 YAML 文件构建的,开发者只需要在文件中添加几行代码就可以完成设置,而 Actions 平台会完成剩下的工作。

另外,Actions 平台也集成了一个名为「建议工作流」的功能,由 GitHub 的机器学习团队和其他公司内部从事自动化工作流开发的团队打造。这一功能会为开发者提供构建工作流的建议。例如,开发者使用了一个 node 项目,则 Actions 平台会自动提供针对 node 项目的工作流建议。而 GitHub 官方仍在优化这一功能,希望为特定的项目提供特定的工作流建议。

这一功能背后使用了机器学习算法。模型会首先分析公开 repo 中的代码,并根据代码进行预测。这样一来,当开发者提交了某个代码的时候,机器学习模型就可以预测出这种代码会需要什么样的工作流。

根据官方提供的介绍,机器之心整理了 Actions 平台的新功能。

用动态日志显示实时运行结果

动态日志可以在程序运行过程中显示结果。GitHub 流可以将程序日志导入到 Actions 的显示框中,实时展示运行过程。

像运行代码那样创建和复用工作流

因为 GitHub Actions 的文件是代码,开发者可以编辑、复用,或者像 fork 代码那样 fork 这些文件。特别是当开发者 fork 了一个代码库的时候,其中的 action 会和源代码一样被 fork。因此开发者可以像代码提供者那样进行测试和编译工作。

如前文所述,action 是通过 YAML 文件进行定义和编辑的,因此开发者也可以在 YAML 文件中复用其他 action 和工作流。具体而言,开发者可以引用这些 action 和工作流,就像是在代码仓库中引用别的代码一样。同样,每个开发者提供的 action 的文件可以被其他开发者复用,丰富了开发者社区。

对任意事件都可以构建的自动化工作流

同样,GitHub Actions 可以自动化开发者管理代码时使用的一些工作流。比如审核和管理 issue、自动发布新版本等。这些工作流通过 GitHub 上的事件自动触发,能够贯穿整个开发流程。任何 GitHub 应用现在都可以添加自己的定制化事件,因此开发者也可以根据需要为自己的每个项目定制不同的流程。

构建集成化的包和容器库

在持续集成和部署中,发布包和容器是关键的一环,特别是发布开源库或部署大型网络服务。GitHub Actions 简化了发布流程。接入 Actions 平台的开发者同时也能够接入 GitHub Package Registry,可以自动化从构建包到部署中间的所有工作流程。

建议工作流

前文提及,为了帮助开发者更快地构建和发布自己的代码,GitHub Actions 集成了建议工作流功能。这一功能会为每个开发者的项目提供合适的工作流建议,方便上手。

定价策略

对于公开代码库,Actions 平台是免费的。对于私有仓库,Actions 提供了简单的定价策略,有兴趣的开发者可以注册使用 beta 测试版并了解价格。

Actions 的工作流程演示

根据 GitHub 官方提供的资料,机器之心整理了使用 Actions 工具的示例代码。

矩阵构建

建立矩阵构建的 action 可以让开发者在项目中并行测试多个版本的代码。只需要在 Actions 的 YAML 文件中加入几行代码,GitHub 平台会代为执行剩余的任务。

如下所示,可以在 YAML 文件中定义 node 的版本号(8、10、12),以及运行的平台(ubuntu-latest、windows-latest、macOS-latest),指定需要运行的代码,剩余的工作交由 GitHub 执行。

jobs: 
  test: 
    name: Test on node ${{ matrix.node_version }} and ${{ matrix.os }} 
    runs-on: ${{ matrix.os }} 
    strategy: 
      matrix: 
        node_version: [8, 10, 12] 
        os: [ubuntu-latest, windows-latest, macos-latest]

     steps: 
       - uses: actions/checkout@v1

       - name: Use Node.js ${{ matrix.node_version }} 
         uses: actions/setup-node@v1 
         with: 
           version: ${{ matrix.node_version }}  
           
       - name: npm install, build and test 
         run: | 
           npm install 
           npm run build --if-present 
           npm test

微软收购后的 GitHub

除了开源新工具以外,GitHub 今天还宣布,其平台上已有超过 4000 万名开发人员,而 2018 年秋季和 2017 年这一数字分别为 3100 万和 2400 万。其用户数量的迅速增长离不开一次又一次的更新。

GitHub 是一个面向开源 及私有软件 项目的托管平台,于 2008 年 4 月正式上线。

2018 年 6 月,微软宣布要以 75 亿美元高价收购 GitHub,并于 10 月份正式完成这项交易。微软开发者服务副总裁、Xamarin 创始人 Nat Friedman 出任 GitHub CEO。

在被微软收购不久之后,GitHub 就开启了首次重大变革——提供免费私有 Repo。这种定价策略的改变,可以帮助开发者节省很多使用成本。

此外,为了满足用户多元化的需求并提高社区的活跃度,GitHub 一直在推出各种更新。

今年 5 月份,GitHub 发布了一项重要更新——GitHub Package Registry,它可以帮助开发者们轻松查找、管理和发布确保项目正常运行的软件包,而且对于个人用户是免费的。

在同一个月,为了提高社区的活跃度,GitHub 还推出了「打赏」功能——GitHub Sponsors。为了启动这一新项目并激发社区打赏积极性,GitHub 还推出了 GitHub Sponsors Matching Fund,每个开发者第一年最多可匹配到 5000 美元的赞助基金。此外,GitHub 还表示,为了表示对贡献者的感谢,GitHub Sponsors 在用户打赏其他开发者时不会收取平台费用。

今年 6 月份,GitHub 推出新功能 repository templates,帮助开发者在所有项目中重用代码。该功能操作简单,使用者只需将一个 repo 标记为 template,就可以立即使用 repository template 生成新的 repo,且新 repo 具备 template repo 的所有文件和文件夹。

参考链接:https://help.github.com/en/categories/automating-your-workflow-with-github-actions

本文为机器之心报道,转载请联系本公众号获得授权。

✄------------------------------------------------

加入机器之心(全职记者 / 实习生):hr@jiqizhixin.com

投稿或寻求报道:content@jiqizhixin.com

广告 & 商务合作:bd@jiqizhixin.com

原文发布于微信公众号 - 机器之心(almosthuman2014)

原文发表时间:2019-08-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券