首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在github操作中的作业级别上有条件地调用可重用工作流

如何在github操作中的作业级别上有条件地调用可重用工作流
EN

Stack Overflow用户
提问于 2022-03-23 01:06:04
回答 1查看 642关注 0票数 0

我对GitHub操作非常陌生,但这里是我的场景(简单地说)

构建-测试-上传(作业)

->停靠-快照(作业)

->停靠-释放(作业)(如果:{github.ref_type ==‘标记’}})-此作业永远不会工作

我看到一个问题,当作业调用到可重用的工作流'docker.yml‘时,"if:{{github.ref_type ==’tag‘}“在作业级别上不会被执行。但是,如果我将“docker.yml”中的所有内容作为作业直接添加到Build-test-upad.yml工作流中,那么条件语句在它下面的步骤就会正常工作。但我的目标是能够重用docker.yml代码,用于坞快照和坞库发行版,如下所示。

gitHub操作是否支持有条件地运行作业--作业调用可重用工作流?

如果我的问题不清楚,我很抱歉。

谢谢

代码语言:javascript
复制
name: Build, Test and Upload Artifacts

on:
  workflow_dispatch:
  push:


env:
  ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_GH_USER }}
  ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_TOKEN }}
  DOCKER_HARBOR_URL: ${{ secrets.HARBOR_ADDR }}
  HARBOR_REPO_BASE: docstore
  APP_ID_DOCSTORE: docstore
  APP_ID_PURGE: purge
  APP_ID_MIGRATION_UTILITY: migration-utility

jobs:
  get-version:
    uses: ./.github/workflows/version.yml

  build-test-upload:
    runs-on: [ self-hosted ]
    needs: [ get-version ]
    outputs:
      version: ${{ needs.get-version.outputs.version }}
    steps: <multiple steps complete successfully>

## docker-snapshot always runs successfully and uses the reusable workflow 'docker.yml' as I would expect
  docker-snapshot:
    name: docker-snapshot
    needs: build-test-upload
    uses: ./.github/workflows/docker.yml
    secrets:
      username: ${{ secrets.HARBOR_USER }}
      token: ${{ secrets.HARBOR_TOKEN }}
      harbor_addr: ${{ secrets.HARBOR_ADDR }}
    with:
      version: ${{ needs.build-test-upload.outputs.version }}
      repo_folder: snapshots

## docker-release is supposed to only run if: github.ref_type == 'tag'.  The "if: ${{ github.ref_type == 'tag' }}" condition works at the job level when the job contains steps, but does not seem to work when docker-release calls the reusable workflow "uses: ./.github/workflows/docker.yml" as seen here

  docker-release:
    if: ${{ github.ref_type == 'tag' }}
    needs: build-test-upload
    uses: ./.github/workflows/docker.yml
    secrets:
      username: ${{ secrets.HARBOR_USER }}
      token: ${{ secrets.HARBOR_TOKEN }}
      harbor_addr: ${{ secrets.HARBOR_ADDR }}
    with:
      version: ${{ needs.build-test-upload.outputs.version }}
      repo_folder: releases

docker.yml

代码语言:javascript
复制
name: Docker

on:
  workflow_call:
    inputs:
      repo_folder:
        required: true
        type: string
      version:
        required: true
        type: string
    secrets:
      username:
        required: true
      token:
        required: true
      harbor_addr:
        required: true

env:
  ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_GH_USER }}
  ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_TOKEN }}
  DOCKER_HARBOR_URL: ${{ secrets.HARBOR_ADDR }}
  HARBOR_REPO_BASE: docstore
  APP_ID_DOCSTORE: docstore
  APP_ID_PURGE: purge
  APP_ID_MIGRATION_UTILITY: migration-utility

jobs:

  docker:
    runs-on: [ self-hosted ]
    steps:
      - name: Checkout Code
        uses: actions/checkout@v2

      - name: Download artifacts
        uses: actions/download-artifact@v3
        with:
          name: build-test-upload
          path: .

      - name: Verify Artifacts Downloaded
        run: |
          pwd
          VERSION=${{ inputs.version }}
          webserviceFile=./webservice/target/webservice-${VERSION}.jar
          if [[ ! -f "${webserviceFile}" ]]; then
            echo "[ERROR] Webservice jar File ${webserviceFile} does not exist"
            ls -l ./webservice/target
            exit 2
          fi

          purgeFile=./purge/target/purge-${VERSION}.jar
          if [[ ! -f "${purgeFile}" ]]; then
            echo "[ERROR] Purge jar file ${purgeFile}r does not exist"
            ls -l ./purge/target
            exit 2
          fi

          migUtilFile=./migration-utility/target/migration-utility-${VERSION}.jar
          if [[ ! -f ${migUtilFile} ]]; then
            echo "[ERROR] Migration-Utility jar File ${migUtilFile} does not exist"
            ls -l ./migration-utility/target/
            exit 2
          fi

          xmlFile=./tests/target/coverage-report/coverage-report.xml
          csvFile=./tests/target/coverage-report/coverage-report.csv
          if [[ ! -f "${xmlFile}" || ! -f "${csvFile}" ]]; then
            echo "[ERROR] Coverage-report file ${xmlFile} or ${csvFile} does not exist"
            ls -l ./tests/target/coverage-report/
            exit 2
          fi
          echo "Successfully verified build artifacts for dockers were downloaded"

      - name: Create docker context for dind
        run: |
          docker context create dind --docker "host=tcp://localhost:2376,ca=/certs/client/ca.pem,cert=/certs/client/cert.pem,key=/certs/client/key.pem"

      - name: Set up Docker Buildx
        id: buildx
        uses: docker/setup-buildx-action@v1
        with:
          endpoint: dind
          driver: docker-container
          driver-opts: image=docker.apps.papt.to/akp/releases/buildkit:0.9.0-buildx
          buildkitd-flags: --debug

      - name: Harbor Login
        uses: docker/login-action@v1
        with:
          registry: ${{ secrets.harbor_addr }}
          username: ${{ secrets.username }}
          password: ${{ secrets.token }}

      - name: Docstore - Docker Build and Push to Harbor ${{ inputs.repo_folder }}
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          tags: ${{ secrets.harbor_addr }}/${{ env.HARBOR_REPO_BASE }}/${{ inputs.repo_folder }}/${{ env.APP_ID_DOCSTORE }}:${{ inputs.version }}
          build-args: |
            VERSION=${{ inputs.version }}

      - name: Purge - Always Docker Build and Push to Harbor ${{ inputs.repo_folder }}
        uses: docker/build-push-action@v2
        with:
          context: ./purge
          push: true
          tags: ${{ secrets.harbor_addr }}/${{ env.HARBOR_REPO_BASE }}/${{ inputs.repo_folder }}/${{ env.APP_ID_PURGE }}:${{ inputs.version }}
          build-args: |
            VERSION=${{ inputs.version }}

      - name: Migration-Utility - Docker Build and Push to Harbor ${{ inputs.repo_folder }}
        uses: docker/build-push-action@v2
        with:
          context: ./migration-utility
          push: true
          tags: ${{ secrets.harbor_addr }}/${{ env.HARBOR_REPO_BASE }}/${{ inputs.repo_folder }}/${{ env.APP_ID_MIGRATION_UTILITY }}:${{ inputs.version }}
          build-args: |
            VERSION=${{ inputs.version }}
EN

回答 1

Stack Overflow用户

发布于 2022-03-24 23:57:28

我认为问题是github.ref_type = branch而不是标签。我会进一步测试的。但我觉得我很好

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71580690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档