코딩관계론

Git Action - Git Action.YAML 본문

Git_Action

Git Action - Git Action.YAML

개발자_티모 2023. 2. 5. 17:42
반응형

아래부터는 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