들어각기 전
이전 포스팅에서 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
- GitHub Marketplace에 있는 workflow를 이용할 때 사용 , @버전을 명시할 수 있다.
- 다양한 Marketplace workflow 정리 링크
- name
- action의 이름을 명시한다.
id:
- action id를 명시한다.
with
- uses로 다른 workflow를 이용할 때 넘겨줄 파라미터를 명시한다.
- 자세한 파라미터명은 해당 workflow 문서를 읽어보면 나와있다.
run
- 내가 만들 액션의 내용이다.
- 터미널에서 실행하는 것과 같이 해당 명령어를 명시하면된다.
- | 을이용하면 순차적으로 한번에 여러 명령어를 실행할 수 있다.
- 또한 output 변수를 만들 수도 있다.
run: |
echo "A = A"
echo "B = B"
echo echo "저장할 변수명=값" >> $GITHUB_OUTPUT
공식문서
컨텍스트 문서
- 링크
- 각 컨텍스트에 따른 property를 정의해놓은 문서
'깃 > action' 카테고리의 다른 글
[ 부스트 캠프 ] CI를 통한 범인 찾기 (1) | 2024.11.28 |
---|---|
유용한 Marketplace workflow (1) | 2024.11.17 |
gitAction과 구조 (0) | 2024.11.17 |