#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, а затем нажать на ветку. Пожалуйста, проверьте это.