Нажатие на ветку «qa» не вызвало сборку «qa», вместо этого она запускает сборку «dev»

#github #continuous-integration #github-actions

Вопрос:

У меня есть этот рабочий процесс ci.yml.

 jobs:
  dev_build:
    if: ${{ !(contains(github.base_ref, 'master') || contains(github.base_ref, 'main') || contains(github.head_ref, 'master') || contains(github.head_ref, 'main') || contains(github.base_ref, 'qa') || contains(github.head_ref, 'qa')) }}

       .
       .
       .

   qa_build:
    if: ${{ contains(github.base_ref, 'qa') || contains(github.head_ref, 'qa') }}
       .
       .
       .
 

Но каждый раз, когда я нажимаю на ветку «qa», она запускает «dev_build» вместо «qa_build». Что-то не так с моим состоянием?

Спасибо!

Ответ №1:

В соответствии с документацией

Базовая ссылка или целевая ветвь запроса на извлечение при выполнении рабочего процесса. Это свойство доступно только в том случае, если событие, запускающее выполнение рабочего процесса, является либо pull_request, либо pull_request_target.

и

head_ref или исходная ветвь запроса на извлечение при выполнении рабочего процесса. Это свойство доступно только в том случае, если событием, запускающим запуск рабочего процесса, является либо pull_request, либо pull_request_target.

Так что простой переход в ветку контроля качества здесь не сработает, так как эти значения заполняются в событиях pull_request и pull_request_target.

И первое задание запускается, потому что эта часть !(contains(github.base_ref, 'master')

У вас также есть триггер onlu CI, а не PR-триггеры. Посмотрите на эту разницу:

Триггеры Ci:

введите описание изображения здесь

с помощью PR-триггеров:

введите описание изображения здесь

Я проверил это следующим образом:

 name: so-034-conditions

on:
  push:
    branches: [ master, main, qa ]
  pull_request:
    branches:
      - main
  workflow_dispatch:

jobs:
  dev_build:
    runs-on: ubuntu-latest
    if: ${{ !(contains(github.base_ref, 'master') || contains(github.base_ref, 'main') || contains(github.head_ref, 'master') || contains(github.head_ref, 'main') || contains(github.base_ref, 'qa') || contains(github.head_ref, 'qa')) }}
    steps:
      - name: Checkout this repo
        uses: actions/checkout@v2
        with:
          fetch-depth: 2
      - name: Dump GitHub context
        env:
          GITHUB_CONTEXT: ${{ toJSON(github) }}
        run: echo "$GITHUB_CONTEXT"
      - name: Test1
        id: test1
        run: |
          
          echo "Deploying $GITHUB_REF"
          echo "Deploying ${{ github.event_name }}"
  qa_build:
    runs-on: ubuntu-latest
    if: ${{ contains(github.base_ref, 'qa') || contains(github.head_ref, 'qa') }}
    steps:
      - name: Checkout this repo
        uses: actions/checkout@v2
        with:
          fetch-depth: 2
      - name: Dump GitHub context
        env:
          GITHUB_CONTEXT: ${{ toJSON(github) }}
        run: echo "$GITHUB_CONTEXT"
      - name: Test1
        id: test1
        run: |
          echo "${{ github.base_ref }}"
          echo "Deploying ${{ github.event_name }}"
 

Комментарии:

1. привет, у меня это есть в моем файле ci.yml. похоже, у меня также есть триггер PR: push: ветви: [ мастер,разработка,контроль качества ] pull_request: ветви: [ мастер,разработка,контроль качества ]

2. У вас есть пиар-предложения? Если нет, вы не получите событие pull_request. Только тогда ваш конвейер будет работать так, как вы ожидаете. Вам нужно открыть PR, а затем нажать на ветку. Пожалуйста, проверьте это.