基于 PR 构建,但仅在合并或发布时推送图像

问题描述 投票:0回答:1

我有一个 GitHub 项目,我想使用 Docker 构建并通过操作推送到 GHCR。

我希望每当有拉取请求时就构建它,以验证构建是否有效。但是,我只希望当通过推送到

main
分支或标记的版本来触发操作时将图像推送到 GHCR。

这是我的

build-and-push.yml

name: Build

on:
  push:
    branches: ['main']
    tags: ['v*']
  pull_request:
    branches: ['main']

env:
  # ...
  DO_PUSH: ${{ github.ref == 'refs/heads/main' || github.event_name == 'release' }}

jobs:
  build-and-push:
    # ...
    
    steps:
      - 
        name: Checkout repository
        uses: actions/checkout@v3
      - 
        name: Log in to GHCR
        if: env.DO_PUSH == true
        uses: docker/login-action@v2
        # ...
      - 
        name: Get Docker metadata
        if: env.DO_PUSH == true
        id: meta
        uses: docker/metadata-action@v4
        # ...
      - 
        name: Only build
        if: env.DO_PUSH != true
        uses: docker/build-push-action@v4
        with:
          context: .
          push: false
      - 
        name: Build and push
        if: env.DO_PUSH == true
        uses: docker/build-push-action@v4
        with:
          context: .
          push: true
          # ...

所以,这是一个非常标准的构建和推送工作流程,有一个关键的区别。

env.DO_PUSH
定义为
github.ref == 'refs/heads/main' || github.event_name == 'release'
,如果 Action 由
true
分支或发布触发,则应为
main
,如果由 PR 触发,则应为
false

通过添加

run: echo ${{ env.DO_PUSH }}
步骤进行一些基本调试,确认该值已设置为我想要的值。但是,标有条件
if: env.DO_PUSH == true
的步骤永远不会运行,标有
if: env.DO_PUSH != true
的“仅构建”步骤始终运行。

例如,从推送到

main

github github-actions
1个回答
0
投票

docker/build-push-action@v4
具有
push
属性,您可以这样设置:

      push: ${{ github.event_name != 'pull_request' }}
© www.soinside.com 2019 - 2024. All rights reserved.