티스토리 뷰
Github Actions
GitHub Actions는 GitHub에서 공식 제공하는 CI/CD 도구로, 개발 워크플로우를 자동화합니다.
핵심 요소
- Workflow: YAML로 작성되며, 이벤트에 의해 트리거되는 자동화된 프로세스입니다.
- 워크플로우는 여러 Job으로 구성되며,
.github/workflows
디렉토리에 저장됩니다.
- 워크플로우는 여러 Job으로 구성되며,
- Event: 워크플로우를 실행하는 규칙으로, push, pull request, cron, webhook과 같은 외부 이벤트에 의해 실행됩니다.
- Job: Step들로 구성되어 가상 환경의 인스턴스에서 실행됩니다.
- 다른 Job에 의존관계를 가질 수 있고, 독립적으로 병렬 실행도 가능합니다.
- Step: Task들의 집합으로, 커맨드를 실행하거나 action을 실행합니다.
- Action: 가장 작은 단위로, 재사용 가능한 컴포넌트입니다.
- Step을 연결해 Job을 구성하며, GitHub Marketplace에서 제공되는 라이브러리나 개인이 만든 action을 사용할 수 있습니다.
예제
name: CI
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run tests
run: pytest
위의 예제에서 워크플로우는 push
와 pull_request
이벤트에 의해 실행되며, build
라는 Job을 수행합니다.
이 Job은 4개의 Step으로 구성되어 있으며, 각각 저장소를 체크아웃하고, 파이썬을 설치하며, 의존성을 설치하고, 테스트를 실행합니다.
환경 변수
GitHub Actions 워크플로우에서 환경 변수를 사용하여 스크립트에 값을 전달할 수 있습니다.
환경 변수는 워크플로우, Job, Step 수준에서 설정할 수 있습니다.
이렇게 하면 워크플로우에서 전역 변수를 설정하거나 각 Step에 대해 개별적으로 값을 지정할 수 있습니다.
jobs:
build:
runs-on: ubuntu-latest
env:
MY_ENV_VAR: my_value
steps:
- name: Print environment variable
run: echo $MY_ENV_VAR
컨텍스트 및 표현식
워크플로우 파일에서는 표현식을 사용하여 다양한 컨텍스트에 액세스할 수 있습니다.
이를 통해 GitHub 이벤트, 작업 상태, 워크플로우 데이터 등에 액세스할 수 있습니다
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Print event context
run: echo ${{ github.event_name }}
캐싱
워크플로우 실행 시간을 줄이기 위해 종종 캐싱을 사용합니다.
예를 들어, 패키지 종속성을 캐싱하여 각 실행에서 다시 다운로드할 필요가 없도록 할 수 있습니다.
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Cache dependencies
uses: actions/cache@v2
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
아티팩트
워크플로우가 생성한 결과물(빌드 결과, 테스트 결과 등)을 다운로드할 수 있는 아티팩트를 생성할 수 있습니다.
이를 통해 워크플로우의 출력을 쉽게 관리할 수 있습니다.
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Generate artifact
run: |
echo "Hello, world!" > hello.txt
- name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: my-artifact
path: hello.txt
Tags
태그는 소프트웨어의 특정 버전 또는 중요한 마일스톤을 나타내는데 사용되며, 이를 통해 개발자들은 프로젝트의 특정 상태를 식별하고 추적할 수 있습니다.
워크플로우를 트리거할 때 태그 푸시를 감지하려면, 워크플로우 파일의 on
섹션에서 push
이벤트에 대한 tags
필터를 사용해야 합니다.
on:
push:
tags:
- '*'
특정 패턴의 태그 푸시만 감지하려면, 패턴을 지정할 수 있습니다:
on:
push:
tags:
- 'v*'
이 경우, v
로 시작하는 태그가 푸시될 때 워크플로우가 실행됩니다. 이렇게 하면 필요한 태그 푸시 이벤트에 따라 워크플로우를 실행할 수 있습니다.
마치며, Don’t Reinvent the Wheel
CI/CD 파이프라인은 그 절차와 각 단계에서의 할 일이 정해져 있는 편이다
이미 만들어진 것에 커스터마이즈 하는 것이 CI/CD 스크립트 짜는 시간을 개발에 투입 가능하다
CI/CD를 잘사용하고, Github Action을 잘 다루고 싶다면, shell을 아는 것이 좋다
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'ETC' 카테고리의 다른 글
Git flow - 🐥 카카오 테크 캠퍼스 (0) | 2023.05.01 |
---|---|
🐥 카카오 테크 캠퍼스 - Git Branch (0) | 2023.04.24 |
🐥 카카오 테크 캠퍼스 - Git 기초 (0) | 2023.04.24 |
Centos Postgresql 설치하는 방법 (0) | 2023.04.07 |
Resolver error Error Permission denied (publickey,gssapi-keyex,gssapi-with-mic 해결 (0) | 2023.04.07 |
- Total
- Today
- Yesterday
- ai
- 개발/언어론
- 개발/Electron
- 개발/webrtc
- 개발/Tools/프레임워크/Spring
- 알고리즘
- 개발/환경
- 개발/언어/Java
- 대외활동/카카오테크캠퍼스
- AI/GPT
- 카테캠
- electron
- 개발/Java/Spring
- 개발/OOP
- 개발/네트워크
- 개발/보안
- 카카오테크캠퍼스
- 개발/에러
- ⌨️Developer
- AI/ML
- 개발
- 카카오 테크 캠퍼스
- ⌨️Developer/보안
- 취업
- 개발/MySQL
- 개발/CS/알고리즘
- 개발/컴퓨터네트워크
- 개발/프레임워크&라이브러리
- 개발/Java
- 개발/CS/OS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |