workflow 만들기

2024. 11. 17. 16:49·Git/action
반응형

 

들어각기 전

 

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

  • 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를 정의해놓은 문서 
반응형

'Git > action' 카테고리의 다른 글

Runner란  (2) 2025.08.30
AutoAssign  (0) 2025.06.11
[ 부스트 캠프 ] CI를 통한 범인 찾기  (1) 2024.11.28
유용한 Marketplace workflow  (2) 2024.11.17
gitAction과 구조  (0) 2024.11.17
'Git/action' 카테고리의 다른 글
  • AutoAssign
  • [ 부스트 캠프 ] CI를 통한 범인 찾기
  • 유용한 Marketplace workflow
  • gitAction과 구조
Hamp
Hamp
남들에게 보여주기 부끄러운 잡다한 글을 적어 나가는 자칭 기술 블로그입니다.
  • Hamp
    Hamp의 분리수거함
    Hamp
  • 전체
    오늘
    어제
    • 분류 전체보기 (309) N
      • CS (30)
        • 객체지향 (2)
        • Network (7)
        • OS (6)
        • 자료구조 (1)
        • LiveStreaming (3)
        • 이미지 (1)
        • 잡다한 질문 정리 (0)
        • Hardware (2)
        • 이론 (6)
        • 컴퓨터 그래픽스 (0)
      • Firebase (3)
      • Programing Langauge (38)
        • swift (32)
        • python (5)
        • Kotlin (1)
      • iOS (132)
        • UIKit (37)
        • Combine (1)
        • SwiftUI (32)
        • Framework (7)
        • Swift Concurrency (22)
        • Tuist (6)
        • Setting (11)
        • Modularization (1)
        • Instruments (6)
      • PS (59)
        • 프로그래머스 (24)
        • 백준 (13)
        • LeetCode (19)
        • 알고리즘 (3)
      • Git (18)
        • 명령어 (4)
        • 이론 (2)
        • hooks (1)
        • config (2)
        • action (7)
      • Shell Script (2)
      • Linux (6)
        • 명령어 (5)
      • Spring (15) N
        • 어노테이션 (3) N
        • 튜토리얼 (11)
      • CI-CD (4)
      • Android (0)
        • Jetpack Compose (0)
      • AI (2) N
        • 이론 (2) N
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Spring
    dp
    dfs
    boostcamp
    백준
    UIKit
    CS
    property
    Swift
    투포인터
    IOS
    AVFoundation
    dispatch
    SwiftUI
    프로그래머스
    lifecycle
    Tuist
    protocol
    GIT
    concurrency
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
Hamp
workflow 만들기
상단으로

티스토리툴바