利用Github Action做CICD并集成Git Secret

最近两天把一个项目的CICD流水线从jenkins迁移到github action,中间遇到一些问题,做个记录。

同步发表于个人站点:http://www.panzhixiang.cn

先放几个这两天看到的还不错的教程连接:

  1. 第一个是大佬阮一峰在2019年写的一个教程,浅显易懂,大佬还是大佬,那个时候action刚刚出来他就开始写教程了
    Github Actions 入门教程

  2. 第二个是github官方的工作流语法教程,建议把目录通读一遍,然后找到自己需要的部分详细阅读
    Workflow syntax for Github Actions

  3. 第三个是git secrets的官方repo,git secrets是一个可以用来扫描代码是否包含密码、用户名等敏感信息的工具
    git secrets


说明:

  1. 结合下面的yml文件看说明,并仔细查看yml文件中的注释,我把很多信息写在注释中了
  2. 我们的环境是github 企业版,自己托管的runner服务器,不同于github.com
  3. 我们采用了比较常见的方式来触发CICD job:当有分支发起pull request的时候会触发测试环境的CICD;当有代码merge到master分支后出触发生产环境的CICD
  4. 我选择把流水线的实际运行过程放在容器中,因为这样可以把所有的依赖都封装进容器,即使以后更换了runner的服务器,只要能运行docker就能进行编译
  5. 重要!!! 因为我是在workflow的配置文件(下面的yml)中配置git secrets的pattern(也就是git secrets --add xxxxx 命令),所以需要配置git secrets 不检测这个yml文件(git secrets --add --allowed .github/workflows/main.yml:.* ),不然git secrets 永远提示代码中含有私密信息,流水线也就会失败
  6. 重要!!! git secrets的配置信息在repo里面的 .git 目录里面,所以每次开始运行的时候都要记得删除这个不要,不然执行git secrets --scan的时候就会失败,rm -rf *不能删除隐藏目录,所以要单独执行rm -rf .git才行,4和5两点花了我将近一天时间。。。
  7. 我利用if语法和分支名称条件来判断应该发布到测试环境还是生产环境
name: CICD

# 触发流水线的条件
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # runs-on 后面是runner所在服务器的tag
    runs-on: [ myTag ]
    # container下面的配置是用来在上面的服务器上启动一个docker作为流水线实际执行的环境
    # 这几如果使用的docker hub的公开镜像就不需要credentials,如果是私有仓库就需要配置
    container:
      image: xxxxxxxxxxxxxxxxxxxxxxx
      credentials:
        # ${{secrets.xxxxxxxxxxx}} 是利用了github的secrets功能,在repo的setting-->Secrets里面可以添加需要的
        # 秘钥和token等信息,然后以${{secrets.xxxxxxxxxxx}}形式在workflow中使用,这一点比起jenkins要好很多
        username: ${{secrets.xxxxxxxxxxx}}
        password: ${{secrets.xxxxxxxxxx}}
      env:
       # 设置容器内的环境变量
        AAA: BBB

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # 正式开始编辑之前先清理环境,
      # rm -rf * 不能删除隐藏目录,所以 .git 要单独删除,因为git secrets 相关的配置文件都在这里面,
      # 如果不删除的话,在执行git secrets --scan命令的时候shell退出码会返回1,这样action 的workflow就会失败
      # 我在这里花了一天时间....
      - name: Initial Env
        run: |
          rm -rf *
          rm -rf .git
          ls -a
          
      # 利用官方的action把代码拉下来
      - uses: actions/checkout@v2

      - name: Secrets Scan
        run: |
          git secrets --install -f
          git secrets --register-aws
          git secrets --add --allowed .github/workflows/main.yml:.*
          git secrets --add xxxxxxxxxxx
          git secrets --scan

      - name: Stg Build Image
        if: ${{github.ref != 'refs/heads/master'}}
        run: |
          Stg Build Command
      
      # 利用if语法和分支名称条件来判断应该发布到测试环境还是生产环境
      - name: Stg Deploy
        if: ${{github.ref != 'refs/heads/master'}}
        run: |
          Stg Deploy Command
          
      - name: Prod Build Image
        if: ${{github.ref == 'refs/heads/master'}}
        run: |
          Prod Build Command
          
      - name: Prod Deploy
        if: ${{github.ref == 'refs/heads/master'}}
        run: |
          Prod Build Command
       
      # 最后记得要清理环境,尽量避免信息泄露
      - name: Clean up
        run: |
          rm -rf *
          rm -rf .git
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值