새로운 내용을 공부할 때
새로운 내용의 공부를 시작할 때 용어의 정의를 이해하지 못하거나 정확하게 알지 못한다면 그 용어가 포함된 문장을 이해하지 못합니다.
작은 단어 하나가 내용을 이해하지 못하게 하기 때문에 용어를 정확하게 이해하는 것이 중요합니다.
Github Actions 학습
목표 D-day : 88 일
Github Actions
- 개발, 테스트, 배포 등의 워크 플로우를 깃 허브 저장소 내에서 직접 관리할 수 있습니다.
- 깃허브 저장소와 완전 통합되어, 추가적인 인프라 설정 및 외부 도구 관리할 필요가 없습니다.
- YAML 사용하여, 워크 플로우를 쉽게 작성할 수 있습니다.
YAML 데이터 구조를 간단하게 표현한 직렬화 언어
- 다양한 이벤트에 따라 실행하는 워크플로우가 큰 장점입니다
이러한 특정 덕분에push
나pr
외에도 Github에 발생하는 다양한 이벤트로 CI/CD가 가능합니다.
컴포넌트 소개
GitHub Actions는 소프트웨어 개발 워크플로우를 자동화하는 데 사용되는 강력한 도구입니다. GitHub Actions의 주요 구성 요소를 소개하면 다음과 같습니다:
1. Workflow (워크플로우)
워크플로우는 특정 이벤트가 발생할 때 실행되는 자동화된 프로세스입니다. 워크플로우는 .github/workflows
디렉토리에 저장된 YAML 파일로 정의됩니다.
- 워크플로우는 여러 작업(Job)으로 구성할 수 있습니다. - 기본 병렬
- 각 작업은 여러 단계(Step)로 나뉩니다. - 기본 순차
예시:
name: push-workflow # 시각화 이름
on: push
jobs:
push-job:
runs-on: ubuntu-latest # 실행 환경
steps:
- name: step1
run: echo "Hello, $"
- name: step2
run: |
echo "Hello, $"
echo "Hello, $"
2. Event (이벤트)
이벤트는 워크플로우를 트리거하는 특정 활동입니다. 예를 들어, 코드가 push될 때, pull request가 열릴 때, 주기적으로(cron job) 실행될 때 등이 이벤트가 될 수 있습니다.
일반적인 이벤트 예시:
push
: 코드가 리포지토리에 푸시될 때pull_request
: 풀 리퀘스트가 열리거나 업데이트될 때schedule
: 지정된 일정 - 사용 절대 금지 ( 서버 과부하시 동작 안할때도 많음)issue
,issue comment
: 이슈, 이슈 코멘트 시 타입도 지정가능workflow dispatch
: repo 에서 직접 실행하고 싶은 경우needs
: 의존성으로 먼저 실행될 jobs를 지정할 수 있음 - 실패시 실행안함re-run
: 주의사항 그때 당시 정보로 재시도 하므로 업데이트를 해도 적용안됨
예시:
on:
push: # push
branches:
- main
pull_request:
types: [opened] # PR이 열릴때만 실행됨
branches:
- main # 특정 프랜치 필터링
schedule:
- cron: '0 0 * * *' # 스케줄
issue_comment:
types: [created] # 코멘트를 추가할때 실행됨
issues:
types: [opened, closed] # 이슈가 열리거나 닫힐 때만 실행
3. Runner (러너)
러너는 워크플로우를 실행하는 서버입니다. GitHub에서 호스팅하는 러너를 사용할 수도 있고, 자체 호스팅 러너를 설정하여 사용할 수도 있습니다. 러너는 특정 운영 체제에서 실행되며, 워크플로우에서 정의된 작업을 수행합니다.
예시:
jobs:
build:
runs-on: ubuntu-latest
4. Job (잡)
잡은 워크플로우 내에서 개별적으로 실행되는 단위 작업입니다. 각 잡은 여러 단계(Step)로 구성될 수 있으며, 병렬 또는 순차적으로 실행할 수 있습니다. 잡은 특정 러너에서 실행되며, 성공 또는 실패할 수 있습니다.
예시:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
5. Step (스텝)
스텝은 잡 내에서 순차적으로 실행되는 개별 작업입니다. 스텝은 명령을 실행하거나, 다른 액션을 호출할 수 있습니다.
스텝은 run
키워드를 사용하여 셸 명령을 실행하거나 uses
키워드를 사용하여 다른 액션을 호출합니다.
예시:
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Run a script
run: echo "Hello, world!"
- name: 여러줄은 이렇게
run : |
echo "hello 1"
ehco "hello 2"
6. Action (액션)
액션은 재사용 가능한 스텝으로, 특정 작업을 수행하는 데 사용됩니다. 액션은 리포지토리에 저장되며, uses
키워드를 사용하여 워크플로우 내에서 호출됩니다. GitHub Actions 마켓플레이스에서 다양한 액션을 찾아 사용할 수 있습니다.
예시:
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: 'zulu' # See 'Supported distributions' for available options
java-version: '21'
- run: java HelloWorldApp.java
Filter
GitHub Actions에서 filter
는 워크플로우가 특정 조건에 맞을 때만 실행되도록 하는 기능입니다.
filter
의 주요 요소로는 branch
, path
, tag
가 있으며, 각각 특정 브랜치, 파일 경로, 태그에 대한 조건을 설정할 수 있습니다.
Branch (브랜치)
branch
필터는 워크플로우가 특정 브랜치에서만 실행되도록 설정합니다. 예를 들어, 코드가 main
브랜치에 푸시될 때만 워크플로우를 실행하도록 할 수 있습니다.
예시:
on:
push:
branches:
- main
- develop
위 예시는 코드가 main
또는 develop
브랜치에 푸시될 때 워크플로우가 실행되도록 설정합니다.
Path (경로)
path
필터는 특정 파일이나 디렉토리 경로에서 변경 사항이 있을 때만 워크플로우가 실행되도록 설정합니다. 이를 통해 변경된 파일이나 디렉토리에 따라 워크플로우를 조건부로 실행할 수 있습니다.
예시:
name: path-filter
on:
push:
paths:
- '.github/workflows/part1/*'
- '!.github/workflows/part1/push.yaml' # 제외할 파일
위 예시는 src
디렉토리나 docs
디렉토리 내의 파일이 변경될 때 워크플로우가 실행되도록 설정합니다.
Tag (태그)
tag
필터는 특정 태그가 생성되거나 푸시될 때 워크플로우가 실행되도록 설정합니다. 이는 배포 워크플로우나 릴리즈 관련 작업에 유용합니다.
예시:
on:
push:
tags:
- 'v1.*'
위 예시는 v1.
으로 시작하는 태그가 푸시될 때 워크플로우가 실행되도록 설정합니다.
조합 예시
필터 요소들은 조합하여 사용할 수도 있습니다. 예를 들어, 특정 브랜치에서 특정 경로의 파일이 변경될 때만 워크플로우를 실행하도록 설정할 수 있습니다.
예시:
on:
push:
branches:
- main
paths:
- 'src/**'
- '!src/tests/**'
위 예시는 main
브랜치에서 src
디렉토리의 파일이 변경되었지만 src/tests
디렉토리의 파일은 제외되는 경우에만 워크플로우가 실행되도록 설정합니다.
내일 목표
- CI 전략 선택 및 로그인 세션 구현
댓글남기기