将 Go 项目从 Travis 迁移至 GitHub Actions

Posted Go语言中文网

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将 Go 项目从 Travis 迁移至 GitHub Actions相关的知识,希望对你有一定的参考价值。

点击上方蓝色“ Go语言中文网 ”关注我们, 领全套Go资料 ,每天学习 Go 语言

周末的时候,我决定将我 Go 语言的开源项目 Flipt[1] 的 CI 流程从 TravisCI 转移到 GitHub Actions,我想要替换我现有的 CI,并尝试使用新的 GitHub Actions 将手动发版过程自动化。

说明:我在 GitHub 工作,但不在 Actions 团队。我想在我的开源项目中配置 Actions,并且不从 Actions 团队或 GitHub 的任何人那里获得任何帮助。我没有被 Github 的同事要求写这篇文章,我的目的很简单,以一个用户的经验来使用这个平台。仅代表个人观点和想法。

不用说,经过我几个小时的调试,我成功了twitter 链接[2]

推特截图

管道

我不打算对比 workflow (流程) 、job(任务)、step(步骤) 等细节, GitHub 有广泛的文档来介绍 Actions 的 用法[3]概念[4],我认为我想要的是很普通的一个 CI/CD 流程:

. push 代码到分支后运行一些单元测试,最好能够使用 Go 的多个版本 . 在 PR 上,我还希望运行一些更广泛的集成测试,用来测试面向公众的 API 和 CLI . 推送 tag 后,我想触发 goreleaser[5] 来构建一个 Docker 镜像并推送到 Docker Hub[6],同时打包一个发版的压缩文件 . 在新版本更新文档时更新 文档网站[7]

前两个步骤主要的 TravisCI 工作是在这个 config 文件[8]配置的,虽然有一些差异:

  1. 我只测试了 Go 一个版本 (1.12.x),我知道我可以使用 travis-ci 的 matrix [9]设置来测试多个版本,只是我从来没有这样去用。
  2. 我只针对 PR 在 Postgres DB 实体环境上运行测试,

我缺少的是用于实际构建发版和更新文档的 CD (持续部署)部分。我在本地机器上运行脚本依赖于设置一些需要保密的环境变量,依然是一个手动操作过程。这不是最理想的情况。

容易实现的目标

我创建的第一个 action 实际上是自动更改文档部分。这一部分会被移动到管道作业流的最后一步,但也是能正常运行的最简单的一步。

它主要由两个文件组成,一个 Dockerfile[10] 用于安装必要的依赖项,另一个脚本[11] 用于运行构建和部署步骤。我使用 mkdocs[12] 来构建文档并发布到 GitHub pages[13]

我(最终)把它连接起来作为发布工作流程的最后一步:

name: Publish Docs
uses: ./.github/actions/publish-docs
env:
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

它将通知 Actions 我希望使用 local action[14] 存在的 action,并设置 GITHUB_TOKEN 环境变量,该变量是推送到 GitHub pages 所必需的。

这些繁琐的测试

接下来我做的是让管道的单元测试部分运作起来。因为 Flipt[15] 是一个服务端应用程序,所以我目前只针对 Linux 环境,因此我不需要测试 Windows 或 MacOS 环境。虽然我知道 Actions 很酷并且也支持

以上是关于将 Go 项目从 Travis 迁移至 GitHub Actions的主要内容,如果未能解决你的问题,请参考以下文章

Travis CI + Go:为不同的操作系统创建特定的构建流程

svn迁移至git指南

从log4j日志无缝迁移至logback

Django:将项目从 sqlite 迁移到 PostgreSQL 的最佳实践是啥

如何将项目迁移至 Spring Boot 2.0 ?

数据库迁移(sqlserver至mysql)