【问题标题】:Best way to set if build necessary in GitHub Actions在 GitHub Actions 中设置是否需要构建的最佳方式
【发布时间】:2022-11-08 15:34:33
【问题描述】:

我尝试使用 GitHub Actions 为开发环境实现 CD。

构建应用程序的常见触发器是合并到 develop/main 分支的拉取请求。但我有多个开发环境,并希望允许开发人员仅通过对任何个人分支的简单提交来更新它。

但并不是每个提交都需要构建(例如,可能只是文档更新)。因此,我试图找出确定是否需要构建的最佳方法。

现在我计划通过提交消息内容来确定是否进行构建。如果它以#b-[environment name] 开头,则应该进行构建。

name: Build me

on:
  push:
    # ignore common branches and run build only when personal branch is changed
    branches-ignore:    
      - 'main'
      - 'develop'

jobs:
  build_app:
    name: Build latest app
    runs-on: ubuntu-latest
    if: ${{ startsWith(github.event.head_commit.message, '#b-') }}
    steps:
      - uses: actions/checkout@v2
      ...

但在这种情况下,提交消息中将包含不必要的信息,这会使历史有点脏。

我也知道可以排除确切的非代码paths

on:
  push:
    paths-ignore:
      - 'docs/**'

但是我不想运行 build 以防里面只有 cmets代码已更新。

另外据我所知,可以避免通过标签和标签进行构建。它可以用于我的目的吗?

【问题讨论】:

  • [skip ci] 放在您不希望构建的提交的消息中。许多 CI 提供商 including GHA 都支持这一点。如果您最终在一些您并不严格需要的提交上运行 CI,那又如何。

标签: github-actions


【解决方案1】:

最后,我这样做了:

---

    name: "Build app"
    
    on:
      pull_request:
        branches:
          - develop
        types:
          - closed
      push:
        branches:
          - environment_name_1/**
          - environment_name_2/**
          - environment_name_3/**
        paths:
          - src/**.py
    
    env:
      IAM_ROLE_NAME: github-actions-role
      AWS_ACCOUNT_ID: 12345678
      AWS_REGION: us-east-1
      LOG_DIR: /tmp/logs

    jobs:
      build:
        # yamllint disable rule:line-length
        if: ${{ github.event.pull_request.merged }} || ${{ github.ref_name }} != 'develop'
        name: "Build app"
        runs-on: ubuntu-latest
        permissions:
          id-token: write
          contents: read
        steps:
    
          - name: Configure AWS credentials
            uses: aws-actions/configure-aws-credentials@v1
            with:
              role-to-assume: arn:aws:iam::${{ env.AWS_ACCOUNT_ID }}:role/${{ env.IAM_ROLE_NAME}}
              aws-region: ${{ env.AWS_REGION }}
              role-session-name: github-runner
    
          - name: Get env name to apply
            run: |
              ENV_NAME=$(python -c 'print("${{ github.ref_name }}".split("/")[0])')
              if [ "${ENV_NAME}x" = "developx" ]; then
                ENV_NAME="staging_environment"
              fi

              # check if ENV_NAME exists...

              if [ "${EXISTS}x" = "1x" ]; then
                echo "ENV_APPLY=${ENV_NAME}" >> "${GITHUB_ENV}"
              else
                echo "ENV_APPLY=" >> "${GITHUB_ENV}"
                echo "No running environments with name: `${ENV_NAME}`" >> "${GITHUB_STEP_SUMMARY}"
              fi

          - name: Checkout
            if: ${{ env.ENV_APPLY }}
            uses: actions/checkout@v2

          - name: "[${{ env.ENV_APPLY }}] build app"
            if: ${{ env.ENV_APPLY }}
            run: |
              # Build process here ...

          - name: Save logs
            if: ${{ env.ENV_APPLY }}
            uses: actions/upload-artifact@v3
            with:
              name: logs
              path: ${{ env.LOG_DIR }}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-29
    • 2021-05-07
    • 2011-02-15
    • 1970-01-01
    • 2022-01-19
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多