使用github actin做CICD并集成git secrets
最近两天把一个项目的CICD流水线从jenkins迁移到github action,中间遇到一些问题,做个记录。
先放几个这两天看到的还不错的教程连接:
第一个是大佬阮一峰在2019年写的一个教程,浅显易懂,大佬还是大佬,那个时候action刚刚出来他就开始写教程了
Github Actions 入门教程第二个是github官方的工作流语法教程,建议把目录通读一遍,然后找到自己需要的部分详细阅读
Workflow syntax for Github Actions第三个是git secrets的官方repo,git secrets是一个可以用来扫描代码是否包含密码、用户名等敏感信息的工具
git secrets
说明:
- 结合下面的yml文件看说明,并仔细查看yml文件中的注释,我把很多信息写在注释中了
- 我们的环境是github 企业版,自己托管的runner服务器,不同于github.com
- 我们采用了比较常见的方式来触发CICD job:当有分支发起pull request的时候会触发测试环境的CICD;当有代码merge到master分支后出触发生产环境的CICD
- 我选择把流水线的实际运行过程放在容器中,因为这样可以把所有的依赖都封装进容器,即使以后更换了runner的服务器,只要能运行docker就能进行编译
- 重要!!! 因为我是在workflow的配置文件(下面的yml)中配置git secrets的pattern(也就是git secrets –add xxxxx 命令),所以需要配置git secrets 不检测这个yml文件(git secrets –add –allowed .github/workflows/main.yml:.* ),不然git secrets 永远提示代码中含有私密信息,流水线也就会失败
- 重要!!! git secrets的配置信息在repo里面的 .git 目录里面,所以每次开始运行的时候都要记得删除这个repo,不然执行
git secrets --scan
的时候就会失败,rm -rf *
不能删除隐藏目录,所以要单独执行rm -rf .git
才行,4和5两点花了我将近一天时间。。。 - 我利用if语法和分支名称条件来判断应该发布到测试环境还是生产环境
1 | name: CICD |