Search
Duplicate
📒

[GitOps CICD] 01. Github Action 소개 및 기본 구성

상태
완료
수업
GitOps CICD
주제
GithubAction
4 more properties
참고

Github Action

NOTE
깃허브에서 제공하는 CI/CD 플랫폼으로, 빌드 테스트, 배포를 자동화시키는 파이프라인을 작성할 수 있다!
기본적인 작업흐름
GitHub Action의 모든 코드는 ./github/workflows에 작성된다.

기본 구성요소

NOTE
Workflow → Job → Step의 단계로 구성된다.
name: PART3 - CH1 - Basic Sample # 워크 플로우 이름 on: workflow_dispatch # 이벤트 트리거(workflow_dispatch => 사용자가 클릭을 통해 수동으로 실행) jobs: build: # job1 runs-on: ubuntu-latest # 우분투 환경에서 실행 # 3개의 step이 차례대로 실행된다. steps: - name: Checkout # uses는 이미 만들어진 액션을 사용할때 사용 # {user}/{repo}@{ref} uses: actions/checkout@v2 - name: Build project run: | echo "Build Project" - name: Run tests run: | echo "Run Test" deploy: # job 2 needs: build runs-on: ubuntu-latest steps: - name: Deploy to production run: | echo "Deploying to production server"
YAML
복사
간단한 예시코드 (작업, 작업기(Runner), 스텝 단계로 구성된다.)

변수 사용방법

NOTE
name: PART3 - CH1 - Variables 1 on: workflow_dispatch env: fruit: Apple jobs: build_1: runs-on: ubuntu-latest env: fruit: Orange steps: # build_1 전역 변수 사용 - name: Step 1 run: | echo "Run Step 1, Make $fruit Juice!" # Run Step 1, Make Orange Juice! # 지역변수 사용 - name: Step 2 run: | echo "Run Step 2, Make $fruit Juice!" # Run Step 2, Make Strawberry Juice! env: fruit: Strawberry build_2: runs-on: ubuntu-latest steps: # workflow의 전역변수 사용 - name: Step 1 run: | echo "Run Step 1, Make $fruit Juice!" # Run Step 1, Make Apple Juice!
YAML
복사
기본적인 변수의 스코프는 일반적인 프로그래밍과 동일하다.
변수명에 대한 규칙
이름에 영문, 숫자, 언더바(_)만 사용 가능
공백 허용 X
GITHUB_로 시작하지 않을 것
숫자로 시작 불가, 대소문자 구분하지 않음
name: PART3 - CH1 - Variables 2 on: workflow_dispatch env: GITHUB_ACTOR: "RyanSong" jobs: build_1: runs-on: ubuntu-latest steps: # GitHub Action에서 제공하는 기본 변수는 GITHUB로 시작한다. # 만약 본인이 작성한 변수가 GITHUB로 시작한다면, env.으로 접근해야한다. - name: Step 1 run: | echo "Run Step 1, Say Hello to ${{ env.GITHUB_ACTOR }}" echo "Hello to $GITHUB_ACTOR" echo "Event : $GITHUB_EVENT_NAME" - name: Step 2 run: | echo "Job: $GITHUB_JOB" echo "Run ID : $GITHUB_RUN_ID"
YAML
복사
깃허브에서 제공하는 기본변수 사용
Variable Name
Description
GITHUB_ACTION
현재 실행중인 Action ID
GITHUB_ACTION_PATH
현재 실행중인 Action 의 경로 (e.g., /home/runner/work/_actions/repo-owner/name-of-action-repo/v1)
GITHUB_ACTOR
워크플로우를 시작한 사람 또는 앱 이름
GITHUB_ACTOR_ID
워크플로우를 시작한 사람 또는 앱 의 ID (e.g., 1234567)
GITHUB_ENV
러너 내 변수 설정 파일 경로 (e.g., /home/runner/work/_temp/_runner_file_commands/set_env_87406d6e-4979-4d42-98e1-3dab1f48b13a)
GITHUB_EVENT_NAME
워크플로우를 트리거한 이벤트 이름 (e.g., workflow_dispatch)
GITHUB_JOB
현재 실행중인 작업(Job) ID
GITHUB_REPOSITORY
레포지토리 소유자와 이름
GITHUB_WORKFLOW
워크플로우 이름
RUNNER_ARCH
실행기(Runner) 의 architecture (e.g., X86, X64, ARM, ARM64)
RUNNER_NAME
실행기(Runner) 이름
RUNNER_OS
실행기(Runner) 의 운영체제 (e.g., Linux, Windows, macOS)
name: PART3 - CH1 - Variables 3 on: workflow_dispatch jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 - name: Build project run: | echo "Build Project ${{ vars.PROJECT_NAME }}" - name: Run tests run: | echo "Run Test ${{ vars.TEST_ENVIRONMENT }}" deploy: needs: build runs-on: ubuntu-latest steps: - name: Deploy to production run: | echo "Deploying to production server ${{ vars.PRODUCTION_SERVER }}"
YAML
복사
vars.xxx ⇒ 깃허브 내에 설정한 변수를 불러온다.
Setting → Secrets and variables → Action에 설정된 변수를 불러온다.
개별 변수값은 조직 변수의 경우 1000개, 개인 레포지토리의 경우 500개이다.

작업(Job) 데이터 활용

NOTE
만약, 이전 단계의 결과를 다음 단계에서 사용하고 싶다면 어떻게 해야하는가?
Step 1의 결과를 Step 2로 받고싶다면?
name: PART3 - CH1 - Step Output 1 on: workflow_dispatch jobs: test-job: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 - id: generate-random-id name: Generate random string run: echo "random_id=$RANDOM" >> "$GITHUB_OUTPUT" # $RANDOM으로 생성된 임의의 숫자를 random_id라는 이름의 변수와 연결하고 추가 - id: build-project name: Build project run: | echo "Random ID: ${{ steps.generate-random-id.outputs.random_id }}" - id: run-tests name: Run tests run: | echo "Random ID: ${{ steps.generate-random-id.outputs.random_id }}"
YAML
복사
$GITHUB_OUTPUT 파일에 변수를 추가하고 사용! → steps.[step_id].outputs.random_id 형식으로 참조
Step이 아닌 Job 단계의 데이터 전달도 가능한가?
실행기(Runner)가 다르기 때문에 기본적으로는 전달이 불가능하다.
Artifact와 같은 기능이나, 외부 스토리지를 사용해야 한다.

조건 및 연산자 활용

NOTE
name: PART3 - CH1 - Condition 1 on: workflow_dispatch jobs: build: if: github.repository == 'scofe97/github-action-course' runs-on: ubuntu-latest steps: - name: Step 1 run: | echo "Run Step 1, Say Hello" - name: Step 2 if: github.event_name == 'xxxxxxxx' run: | echo "Run Step 2, Say Hello"
YAML
복사
if문을 통한 일반적인 워크플로우 실행
Step2의 event_name은 workflow_dispatch이므로 스킵되어 실행
name: PART3 - CH1 - Function 1 on: issues: # 이슈 생성, 수정, 라벨에 관련된 이벤트가 발생했을 때 types: [opened, edited, labeled, unlabeled] jobs: auto-assignee: runs-on: ubuntu-latest permissions: issues: write # 만약 깃허브 이슈라벨의 이름에 bug가 존재한다면 if: ${{ contains(github.event.issue.labels.*.name, 'bug') }} steps: - name: Auto assign issue uses: pozil/auto-assign-issue@v1 with: assignees: ${{ vars.BUG_HUNTERS }}
YAML
복사
이슈 라벨에 따른 자동 이벤트
위에서 사용한 contains()함수 이외에도 다양한 함수가 존재한다.
함수명
설명
startsWith(searchString, searchValue)
searchStringsearchValue로 시작하는지 여부를 확인합니다. 시작한다면 true를 반환합니다.
endsWith(searchString, searchValue)
searchStringsearchValue로 끝나는지 여부를 확인합니다. 끝난다면 true를 반환합니다.
format(string, replaceValue0, replaceValue1, …)
주어진 string 내에서 {0}, {1} 등의 형식으로 지정된 부분을 replaceValue0, replaceValue1 등으로 대체합니다.
join(array, optionalSeparator)
array 내의 모든 요소를 optionalSeparator로 지정된 구분자를 사용하여 연결합니다. 구분자가 제공되지 않으면 기본적으로 쉼표(,)를 사용합니다.
jobs: build: runs-on: ubuntu-latest. steps: # ... - name: Job is succeeded if: ${{ success() }} # 성공했을 때 if: ${{ failure() }} # 실패했을 때 if: ${{ canceled() }} # 취소했을 때 if: ${{ always() }} # 항상
YAML
복사
상태확인 함수