개발자로 후회없는 삶 살기
[문법] 다양한 이벤트 트리거를 알아보자 본문
서론
※ 아래 내용을 다룹니다.
- 컴포넌트 종류
- 이벤트 트리거 별 특징
본론
- 컴포넌트 종류
1. 워크플로우
깃헙 액션으로 동작할 전체 흐름을 의미하며, 푸시, 풀 리퀘 등 깃헙 이벤트에 의해서 트리거 된다. 특정 이벤트 외에도 특정 시간, 수동으로 워크 플로우를 실행할 수 있다.
2. 이벤트
워크플로우를 실행하는 활동이다. 푸시, 풀 이벤트 발생 시 워크플로우가 작동하려면, 원하는 레포지토리의 원하는 브랜치에 푸시, 풀 이벤트 설정이 되어 있어야 한다.
3. 러너
워크플로우가 동작하는 서버이다. 하나의 러너에서 하나의 잡이 동작한다. 위 사진에서 러너1, 러너2는 잡을 실행하는 서버로 하나의 잡을 실행할 수 있다.
4. 잡
러너에서 실행되며, 워크플로우에서 동작할 스탭이다. 하나의 워크 플로우에 여러 개의 잡을 설정할 수 있고 각 잡은 병렬로 실행되며, 순차적으로 실행하기 위해서 needs 키워드가 있다.
5. 스탭
잡안에서 사용되는 개별 명령어로 순차적으로 실행되고, 한 스텝이 실패하면 그다음 스텝은 실행되지 않는다.
6. 액션
코드 모음으로 구성된 라이브러리라고 볼 수 있다. 깃헙 액션에만 적용할 수 있는 라이브러리들이 깃헙 액션 마켓플레이스에 등록되어 있고 uses 키워드로 불러와서 사용할 수 있다. 위 예제에서는 체크아웃으로 해당 레포의 브랜치로 변경하고 노드를 설치한다. 어떤 액션은 인풋값이 필요하며, with 키워드로 넣어줄 수 있다.
- 다양한 트리거 이벤트
어떠한 이벤트로 워크플로우를 실행할 수 있는지 알아보자
-> yml 파일 구성
name: push-workflow
on: push
jobs:
push-job:
runs-on: ubuntu-latest
steps:
- name: step1
run: echo hello world
- name: step2
run: |
echo hhhhhh
echo dhhdhdhdh
위처럼 간단한 워크플로우가 구성되어 있을 때, 각 키워드에 대해서 알아보자.
name: 워크 플로우의 이름으로 깃헙 액션 탭에 시각화된다.
on: 트리거 이벤트
pull-job: 잡의 이름으로 자유롭게 지정하면 된다.
runs-on: 잡이 실행되는 러너로 1러너 1잡이다.
✅ yml 파일 구성 정리
1) 특정 레포지토리에 위 yml 파일이 등록되어있을 때, 푸시 이벤트가 발생하면 push-workflow라는 이름의 워크 플로우가 실행된다.
2) push-job이라는 잡이 우분투 러너에서 실행된다.
3) 잡은 2개의 스탭으로 이루어져 있고 순차적으로 실행된다.
-> 풀리퀘 이벤트
name: push-workflow 2
on: pull_request
jobs:
push-job:
runs-on: ubuntu-latest
steps:
- name: step1
run: echo hello world
- name: step2
run: |
echo hhhhhh
echo dhhdhdhdh
풀리퀘가 될 때 실행이 되는 워크플로우를 만들어봤다.
이벤트가 발생하는 yml을 설정하고 1차 푸시를 하여 풀리퀘를 생성하면 워크플로우가 정상적으로 동작한다.
하지만, 풀리퀘는 병합되기 전에 src 브랜치에서 커밋과 푸시를 할 수 있다. 이때, 2차 커밋과 푸시를 해도 이벤트가 발생하여 워크플로우가 동작하는 문제가 발생한다.
그 이유는, 풀리퀘 이벤트를 on 키워드에 기본으로 설정하면, 기본 실행 타입이 설정되고, 기본 실행 타입은 생성, 동기화 등으로 다양하기 때문이다.
name: pull-workflow
on:
pull_request:
types: [opened]
jobs:
pull-job:
runs-on: ubuntu-latest
steps:
- name: step1
run: echo hello world
- name: step2
run: |
echo hhhhhh
echo dhhdhdhdh
따라서, on 키워드에 실행 타입을 풀리퀘 생성 시에만 이벤트가 발생하도록 설정을 해줘야 한다.
-> 이슈 이벤트
이슈 이벤트 또한 기본 타입이 다양하여 수정, 삭제만 해도 워크플로우가 실행될 수 있다. 또한, 설정한 기본 브랜치에서만 이슈 이벤트가 동작한다는 옵션이 있다.
- 이슈 코멘트 이벤트
이슈나 PR에 댓글을 달았을 때 트리거되는 이벤트이다. 이슈 이벤트처럼 기본 브랜치에 워크플로우 yml이 설정되어 있어야만 한다.
name: issue-comment-workflow
on: issue_comment
jobs:
pr-comment:
if: ${{ github.event.issue.pull_request }}
runs-on: ubuntu-latest
steps:
- name: pr comment
run: echo ${{ github.event.issue.pull_request }}
issue-comment:
if: ${{ !github.event.issue.pull_request }}
runs-on: ubuntu-latest
steps:
- name: issue comment
run: echo ${{ github.event.issue.pull_request }}
pr 코멘트 잡과 이슈 코멘트 잡을 만든다. 각각 pr와 이슈에 댓글을 달 때 실행될 것이다. if 문과 깃헙 컨텍스트를 사용하면 조건을 줄 수 있다.
PR을 생성하고 댓글을 달아보면, 이슈 커멘트는 스킵된다.
- dispatch 이벤트
수동으로 워크플로우를 트리거 할 수 있는 이벤트로 기본 브랜치에 YML이 설정되어 있어야 한다.
이벤트를 트리거할 때 input 값을 줄 수 있으며 4가지 타입이 있다. 초이스는 깃헙 액션에서 제공하는 타입으로 선택바가 생긴다. 그 값을 깃헙 워크플로우에서 받아올 수 있다.
디스페치 이벤트를 사용하기 위해선, on 절에 inputs 키워드를 넣으면 된다. 위 사진은 2가지 inputs 값을 받는 YML 설정이다. 각 인풋값마다 4가지 값을 받는다.
des : 인풋값에 대해서 깃헙 액션 탭 화면에 보일 설명
req : 반드시 필요한 값이면 true
def : 기본값
type : 타입
options : 초이스 타입 시 선택바가 생김
위 YML처럼 input 값을 설정하면 2가지 input 값을 받고, 설정, 기본값, 타입이 등록된다.
사용자가 수동으로 인풋값을 넣어서 트리거하면 디스페치 이벤트에서 등록한 input 값은 깃헙 워크플로우에서 사용할 수 있다. inputs.{input 값이름} 형태로 불러와 사용하면 된다.
- needs 키워드
하나의 워크플로우에서 여러 개의 잡은 병렬로 실행된다. 이를 순차로 실행하려면 needs 키워드가 필요하다.
name: needs
on: push
jobs:
job1:
runs-on: ubuntu-latest
steps:
- name: echo
run: echo job1 done
job2:
runs-on: ubuntu-latest
needs: [job1]
steps:
- name: echo
run: echo job2 done
job3:
runs-on: ubuntu-latest
steps:
- name: echo
run: |
echo job3 failed
exit 1
job4:
runs-on: ubuntu-latest
needs: [job3]
steps:
- name: echo
run: echo job4 skip
위 yml에서 잡 1, 3은 종속적이지 않아서 병렬로 실행된다. 2는 1에 종속되어 실행되고 4는 3이 실패하여 스키된다.
job4처럼 스킵된 잡을 따로 실행하는 방법에는 if condition이 있다.
'[Infra] > [GitHub Actions]' 카테고리의 다른 글
[최적화] 유연하고 확장 가능한 워크플로우 활용법 (0) | 2025.02.06 |
---|---|
[문법] 다양한 깃헙 액션 기능을 알아보자 (0) | 2025.01.22 |