일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 완전탐색
- spring event
- 누적합
- 검색어 추천
- 백준
- 구현
- docker
- 깊게 생각해보기
- AWS
- 셀러리
- 객체지향패러다임
- 이분탐색
- branch 전략
- 주식
- 카카오
- BFS
- 쿠키
- 결제서비스
- 트랜잭샨
- 레디스 동시성
- 알람 시스템
- gRPC
- 디버깅
- 좋은 코드 나쁜 코드
- 숫자 블록
- 프로그래머스
- prg 패턴
- JPA
- piplining
- jwt 표준
- Today
- Total
코딩관계론
Git Action - Git Action.YAML 본문
아래부터는 Git-Action.yaml 파일을 workflow라고 통칭하겠다.
또한 대표적인 기능만 소개하고, 대표적인 기능에 대한 세부적인 동작은 "참고사항의 링크"에 접속해서 확인하길 바란다
작성위치
workflow파일 위치는 반드시 프로젝트의 최상단 폴더의 .github/workflows에 존재해야 한다.
Something.repo
- .github
- workflows
- app
- sms
- db
run-name
workflow가 실행되면 자동으로 생성되는 이름이다. 보통은 Push로 실행된 액션은 커밋 메시지가 이름이 되고 Pull Request로 실행된 액션은 Pull Request의 제목이 이름이 된다.
하지만 아래의 workflow 파일처럼 run-name을 수정하면 변경이 가능하다.
name: Dynamic name
run-name: Run with ${{ github.sha }} commit by ${{ github.actor }}
On
특정 이벤트가 발생할 때 workflow를 실행할지 정의하는 곳이다.
아래의 파일을 해석하면 'dev' or 'master' 브랜치로 'push이벤트' 가 발생하면 'workflow를 실행해라'라는 뜻이다. (on-filter라는 기능을 이용했다)
name: Dynamic name
run-name: Run with ${{ github.sha }} commit by ${{ github.actor }}
on:
push:
branches:
- master
- dev
jobs
workflow는 하나 이상의 jobs로 구성되어 있다. 기본적으로 모든 jobs는 병렬적으로 실행되지만 job_id를 이용하면 순차적으로 실행되게 만들 수 있다.
job_id의 규칙은 '_'으로 시작하거나 영문으로 시작해야 하며 '_', '-'이외의 특수문자는 허용하지 않는다.
jobs:
#my_first_job = job_id
my_first_job:
#job_id.name = My first job
name: My first job #github ui에 표시되는 잡이름이다
my_second_job:
name: My second job
의존성을 주는 예시
#순차적으로 실행하기 위해 의존성을 주는 방법
jobs:
job1:
#job2가 실행되기 위해선 job1(job_id)가 끝나야 한다
job2:
needs: job1
job3:
needs: [job1, job2]
runs-on
job을 어떤 환경에서 실행할지 설정하는 명령어
jobs:
#my_first_job = job_id
my_first_job:
runs-on: ubuntu-latest
#job_id.name = My first job
name: My first job #github ui에 표시되는 잡이름이다
my_second_job:
name: My second job
steps
스텝은 각 잡들의 일의 순서이다. 모든 스텝이 run action은 아니지만 모든 액션은 스텝처럼 실행된다.
name: Greeting from Mona
on: push
jobs:
my-job:
name: My Job
runs-on: ubuntu-latest
steps:
- name: Print a greeting
env:
MY_VAR: Hi there! My name is
FIRST_NAME: Mona
MIDDLE_NAME: The
LAST_NAME: Octocat
run: |
echo $MY_VAR $FIRST_NAME $MIDDLE_NAME $LAST_NAME.
steps.uses
특정 action을 job안에서 실행하기 위해서 사용함
#다른 사람이 만든 액션을 참조하는 경우
jobs:
my_first_job:
steps:
- name: My first step
# steps라는 잡에서 actions/heroku@main의 액션 파일을 사용함
# actions/heroku@main = {owner}/{repo}@{ref}
uses: actions/heroku@main
- name: My second step
# Uses a specific version tag of a public repository
uses: actions/aws@v2.0.1
jobs:
my_first_job:
steps:
- name: Check out repository
uses: actions/checkout@v3
- name: Use local my-action
#내가 만든 액션을 참조하는 경우
uses: ./.github/actions/my-action
steps. run
run 커맨드는 runs-on에서 정의한 환경의 shell에서 실행된다.
커스텀한 쉘을 사용하려면 "참조" 바란다
각 run keyword는 새로운 프로세스를 생성해서 실행한다. 즉 새로운 쉘을 만들어서 run 명령어를 실행한다.
- name: Install Dependencies
run: npm install
하지만 아래와 같이 실행하면 하나의 쉘에서 run 명령어들을 실행할 수 있다.
- name: Clean install dependencies and build
run: |
npm ci
npm run build
job_id.strategy
strategy - matrix 인자를 사용하면 어떤 버전, os에서 테스트할지 확인할 수 있음.
jobs:
example_matrix:
strategy:
matrix:
version: [10, 12, 14]
os: [ubuntu-latest, windows-latest]
job_id.strategy.fail-fast
fail-fast가 true로 설정되어 있는 경우, 어느 한 Job이 실패했을 때 다른 모든 Job들을 캔슬시킨다. 기본값은 true이다.
jobs:
test:
runs-on: ubuntu-latest
continue-on-error: ${{ matrix.experimental }}
strategy:
fail-fast: true
matrix:
version: [6, 7, 8]
experimental: [false]
include:
- version: 9
experimental: true
예시
name: sms-test
# master branch로 push, pr 요청이 발생하면 아래의 workflow들이 실행됨
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
build:
#build라는 잡은 ubuntu-latest의 환경에서 실행됨
runs-on: ubuntu-latest
#이 잡의 전략들을 설정함 이 잡이 실패해도 계속해서 다음 잡을 실행하고, python-version은 3.7로 구성됨
strategy:
fail-fast: false
matrix:
python-version: ["3.7"]
steps:
- uses: actions/checkout@v3 #현재 브랜치의 내용을 ci 서버로 체크아웃
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3 #특정 파이썬 버전을 사용하는 action을 불러옴
with:
python-version: ${{ matrix.python-version }} #파이썬 버전 입력
- name: Install dependencies
#하나의 프로세스에 아래의 명령어들을 실행함
run: |
cd sms_handler
python3 -m pip install --upgrade pip
python3 -m pip install -r requirements.txt
- name: run_test_code
run: |
cd sms_handler
python3 -m unittest test_sms.py
참고
참고
https://docs.github.com/ko/actions/using-workflows/workflow-syntax-for-github-actions
'Git_Action' 카테고리의 다른 글
Git action을 통한 test 자동화 프로세스 구축 (0) | 2023.03.19 |
---|---|
Git Action - YAML (1) | 2023.02.05 |