Github Actions 은 Github에서 공식적으로 제공하는 CI/CD 와 같은 Workflow를 자동화할 수 있는 도구입니다.
Github 내 어떠한 Event가 발생하면 해당 이벤트에 대해 정해진 Job을 실행하게 하는 도구라고 이해할 수 있습니다.
💡 Github Actions: https://github.com/features/actions
Workflow의 대표적인 예
- 자동화 스크립트
- 예) 문서화, 코드 번들링, 주기적 배치
- 테스트
- 예) 코드 테스트, 여러 가지 버전의 환경 테스트(예: 여러 개의 node 버전에서 실행 가능)
- 배포
- 예) 서버 배포, npm publish, github pages
주요 용어
Workflows
- 하나 이상의 Job(작업)을 실행하는 구성 가능한 자동화 프로세스이다.
- Repository의 어떠한 이벤트(push, release 등)에 의해 실행되거나, 수동 또는 정의된 일정에 실행될 수 있다.
Events
- Workflow 를 실행하는 특정 활동이나 규칙이다.
- Push, Pull Request, Release 등과 같은 저장소 내의 활동에서 발생할 수 있고, Github 외부에서 발생할 수 있는 repository_dispatch , 스케쥴 시간, 수동으로 발생시킬 수도 있다.
Runners
- Github Action Runner 앱이 설치된 머신으로 Workflow 가 실행되는 인스턴스이다.
Jobs
- Workflow 의 기본 단위이다.
- Workflow는 하나 이상의 Job으로 구성되어 있고, 다시 Job 은 하나 이상의 Step으로 구성될 수 있다.
- Job 은 기본적으로 병렬로 실행 되거나, 다른 Job에 의존 관계를 갖고 순차적으로 실행될 수 있다.
Steps
- Job 에서 순차적으로 실행되는 독립적인 프로세스 단위이다.
- 하나의 Job 내의 Step 들은 동일한 Runner에서 실행되고 서로 데이터를 공유한다.
Actions
- Workflow 의 가장 작은 단위로 Step에 포함되는 독립적인 명령을 말한다.
- 마켓플레이스에 등록된 Action 을 사용할 수도 있고, 직접 만들어 사용할 수도 있다.
작성 샘플
- .github/workflows 경로의 폴더가 아직 없다면 폴더를 만듭니다.
- .github/workflows 폴더 안에 hello-github-actions.yml 파일을 만들고, 다음과 같이 작성합니다.
- 저장소에 push 하면 Hello-Github-Actions 가 실행 됩니다.
name: Hello Github Actions
on: [push]
jobs:
Hello-Github-Actions:
runs-on: ubuntu-latest
steps:
- run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!"
- run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v3
- run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner."
- run: echo "🖥️ The workflow is now ready to test your code on the runner."
- name: List files in the repository
run: |
ls ${{ github.workspace }}
- run: echo "🍏 This job's status is ${{ job.status }}."
💡 위의 예는 Github에서 자세히 보실 수 있습니다. https://docs.github.com/en/actions/quickstart
작성 예 - 빌드 및 테스트
name: Build & Test # 해당 액션의 이름
on: # 실행 조건
pull_request: # master 브랜치를 대상으로 PR 이 발생하면 jobs 을 실행합니다.
branches: [master]
jobs:
Build-n-Test:
runs-on: ubuntu-latest # 실행될 가상환경
steps:
- uses: actions/checkout@v3 # 가상환경에 저장소의 코드를 내려 받습니다.
- uses: actions/setup-node@v3 # 가상환경에 nodejs 를 설치합니다.
with:
node-version: 16
# 아래는 node package 를 설치하고, build / test 스크립트를 실행하도록 합니다.
- name: Install dependencies
run: yarn install --frozen-lockfile # run: npm ci
- name: Build & Test
run: |
yarn run my-build-script
yarn run my-test-script
- runs-on ubuntu-latest 은 실행될 가상 환경을 지정하며, 자체 러너 호스팅도 가능합니다.
💡 사용 가능한 가상 환경은 GitHub Actions Virtual Environments를 참고하세요.
💡 자체 러너 호스팅 구축은 About self-hosted runners 를 참고하세요.
작성 예 - NPM publish 및 Github pages
name: Release deploy
on:
release: # v0.1.0 과 같은 태그가 생성되면 실행한다.
types:
- created
tags:
- 'v[0-9]+.[0-9]+.[0-9]+**'
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
registry-url: https://registry.npmjs.org/ # npm 퍼블리시
- name: Test and Generate # 패키지를 build 하고 doc 을 만든다
run: |
yarn install --frozen-lockfile
yarn run my-build-script
yarn run my-document-generate-script
- name: NPM publish
run: npm publish ./packages/lib # 경로(./packages/lib) 을 publish 한다
env:
NODE_AUTH_TOKEN: ${{secrets.NODE_AUTH_TOKEN}} # Github 레파지토리의 Settings 탭에서 secrets 변수를 설정할 수 있다.
- name: Github pages publish
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }} # 해당 토큰은 개인용 액세스 토큰이 아닙니다.
publish_dir: './docs' # generate 한 문서 폴더
💡NPM publish에 관한 Github 문서 Publishing Node.js packages
💡GITHUB_TOKEN 은 개인용 액세스 토큰이 아닙니다. 해당 문서를 참고하세요.
'개발' 카테고리의 다른 글
supabase - select 조건에 and, or 여러개 사용하기 (0) | 2024.07.28 |
---|---|
Axios 에서 특수문자 대괄호(bracket) 인코딩 문제 (0) | 2024.07.27 |