Git/action

workflow 만들기

Hamp 2024. 11. 17. 16:49
반응형

 

들어각기 전

 

gitAction과 구조

gitAction이란GitHub Actions는 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 CI/CD(연속 통합 및 지속적인 업데이트) 플랫폼이다. 구조Workflow하나 이상의 Job으로 구성된 실행할 가능한 자동화

hamp.tistory.com

 

이전 포스팅에서 gitAction에 대해 알아보고 그 구조를 살펴봤다.

 

이번 포스팅에서는 그 구조를 만들어보며 다양한 키워드를 학습해보자.


주의할 점

YAML 파일은 들여쓸 때 공백 2번으로 들여쓰고, 만약 잘못된 indent로 작성할 경우 실행되지 오류가 발생한다.


workflow 작성

# testAction.yml

name: testWorkflow # workflow 이름을 적어준다.

on: # 감지할 이벤트를 써준다.

  pull_request: # PR을 감지한다.
    paths: # PR에 CI.yml 파일이 변경되었거나, 어떤 디렉토리건 swift 확장자 파일이 변경되었을 경우 실행
      - ".github/workflows/CI.yml"
      - "**/**.swift"
      
  push: # push를 감지한다.
    branches: [ develop, "a/**", "b/**" ] # develop 브랜치 또는 a디렉토리, b디렉토리의 브랜치에 push 될 때
    
env: # workflow 전역 환경변수 설정
  A: aValue
  PATH: ${{ github.workspace }}/directory

 

name

  • 워크 플로우 이름을 명시한다.

on

  • 감지할 이벤트를 나열한다.

paths

  • paths필터는 file path 패턴을 명시하여 해당 이벤트에서도 특정 패턴만 인식하는 키워드
  • 반대로 인식하지 않기위해서는 다음과 같이 !를 쓰거나 path-ignore 키워드를 사용한다.
on:
  push:
    paths:
      - 'sub-project/**'
      - '!sub-project/docs/**'

# sub-project 디렉토리중 , docs폴더를 제외한 것만 추적

on:
  push:
    paths-ignore: # /docs 폴더 제외
      - 'docs/**'

env

  • workflow 또는 job 또는 step 스코프 별로 사용할 환경 변수를 명시한다.
  • 또한 동일한 변수명으로 재정의 될 경우 동일한 스코프 변수가 우선위된다. 
  • 사용할 때는 ${{ env.변수명 }} 형식으로 사용한다.
name: Hi Mascot
on: push
env:
  mascot: Mona
  super_duper_var: totally_awesome

jobs:
  windows_job:
    runs-on: windows-latest
    steps:
      - run: echo 'Hi ${{ env.mascot }}'  # Hi Mona , 가장위에서 Mona로 초기화
      - run: echo 'Hi ${{ env.mascot }}'  # Hi Octocat, 동일한 스코프에 Octocat으로 재정의
        env:
          mascot: Octocat
  linux_job:
    runs-on: ubuntu-latest
    steps:
      - run: echo 'Hi ${{ env.mascot }}'  # Hi Mona

 


jobs 작성

jobs: 
  prepare-ci: # job 생성, job_id 
    name: 🚧 Prepare CI # job 이름 설정
    runs-on: macos-14 # 가상환경 설정
test: # test job 생성
  name: 🧪 Test
  runs-on: macos-14 # 가상환경 설정
  needs: prepare-ci # 선행작업

name

  • job이름을 명시한다.

runs-on

  • 가상환경을 설정한다.
  • 최신버전은 여기서  확인하자.(링크) 

needs

  • 작업간의 의존관계를 명시한다.
  • 선행 작업에 접근 시 needs.[job_id]로 접근 할 수 있다.

outputs

  • job안에서 사용하던 변수를  다른까지 사용할 수 있게 끌어올린다.
  • 접근할 때는 jobs.[job_id].output.변수명으로 접근한다.
outputs: # 다른 job에서 접근할 수 있게 output 값을 job 수준으로 끌어올림
  package_dependency_cache_key: ${{ steps.compute_package_hash.outputs.package_hash }}
  # 외부에서 접근 시
  # jobs.[job name].outputs.변수명
  # jobs.prepare-ci.outputs.package_dependency_cache_key

 


steps 작성

steps: # steps 순차적으로 수행할 작업을 명시 
  # action 1
  - uses: actions/checkout@v3 # GitHub Marketplace에 있는 checkout을 실행
  
  # action 2 
  - name: Compute package dependency cache key # 액션 이름 
    id: compute_package_hash # action id 설정
    run: echo "package_hash=${{ hashFiles('Package.swift') }}" >> $GITHUB_OUTPUT # 실행할 액션
    
   # action 3
   - name: Check package dependency cache
    uses: actions/cache@v3 # GitHub Marketplace에 있는 cache 실행
    id: cache_package_dependencies # action id 설정
    with: # cache@v3에 사용할 파라미터 명시
      path: ${{ env.CACHED_PACKAGE_DEPENDENCY_PATHS }}
      key: ${{ steps.compute_package_hash.outputs.package_hash }}
    # steps.cache_package_dependencies.outputs.cache-hit = cache-hit 여부 저장
    
    
    outputs: # 다른 job에서 접근할 수 있게 output 값을 job 수준으로 끌어올림
      dependency_cache_key: ${{ steps.compute_hash.outputs.hash }}

 

- uses

- name

  • action의 이름을 명시한다.

id:

  • action id를 명시한다.

with

  • uses로 다른 workflow를 이용할 때 넘겨줄 파라미터를 명시한다.
  • 자세한 파라미터명은 해당 workflow 문서를 읽어보면 나와있다.

run

  • 내가 만들 액션의 내용이다.
  • 터미널에서 실행하는 것과 같이 해당 명령어를 명시하면된다.
  • | 을이용하면 순차적으로 한번에 여러 명령어를 실행할 수 있다.
  • 또한 output 변수를 만들 수도 있다.
run: |
  echo "A = A"
  echo "B = B"
  echo echo "저장할 변수명=값" >> $GITHUB_OUTPUT

 


공식문서

컨텍스트 문서

  • 링크
  • 각 컨텍스트에 따른 property를 정의해놓은 문서 
반응형