Github actions

Github과 연동되는 CI/CD 플랫폼. workflow라는 것을 기반으로 빌드, 테스트, 배포 자동화 파이프라인을 구축할 수 있다.

Workflow

git 저장소에 event가 일어나면 실행되는 하나 이상의 Job으로 이루어진 자동화된 프로세스. 한 저장소가 여러개의 workflow를 가질 수 있다. 단순한 CI/CD 이상의 전체적인 프로젝트 싸이클을 관리할 수 있다. _ex. pull request 때 마다 빌드하고 테스트하는 worflow, 새로운 release가 생성될 떄마다 배포되는 workflow, 누군가가 새로운 이슈를 열 때마다 label을 붙이는 workflow...etc _ .github/workflows/에 .yml파일을 생성하여 workflow를 정의한다.

기본 템플릿을 생성해준다.

하나의 workflow는 하나 이상의 job으로 구성된다.

***workflow의 구성 **   workflow     └ jobs       └ steps         └ shell script 또는 action

Event

workflow가 언제 실행 될 것인지를 정의한다. .yml파일에는 아래와 같이 정의된다.

name: application

# workflow를 정의할 이벤트 정의
on:
  # push나 pull request 이벤트에 따라 workflow가 발동된다.
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

크론으로 이벤트 스케쥴링 할 수도 있고 api 요청을 통해 실행할 수도 있다고 한다.

Jobs

CI, CD 등의 각 파이프라인을 구성하는 요소가 job으로 정의된다. 하나의 job은 같은 runner 안에서 처리되므로 step끼리 서로 데이터를 공유할 수도 있다. 예를 들어 CI와 CD를 하나의 job안에서 처리하면 별도로 빌드 결과물을 다른 곳에 저장하고 불러올 필요가 없어진다.

하나의 job은 다른 job을 참조할 수도 있다. 기본적으로 병렬로 처리되지만 아래와 같이 서로 의존관계를 갖도록 설정할 수도 있다.

  build:
  ...
  deploy:
  	#build라는 다른 job을 참조하며 동시에 의존성을 가진다.
    needs: build

Runner

하나의 job이 실행되는 환경이다. 각 job 마다 환경을 정의해주어야 한다.

jobs:
  runs-on: ubuntu-latest
  build:

runner는 클라우드로 제공이 되며 직접 호스팅하여 on-premise로 사용할 수도 있다.

Actions

하나의 스텝에서 실행될 수 있는 어플리케이션이다. 재사용이 가능하기 때문에 CI/CD에 필요한 반복적인 코드를 줄일 수 있다.

직접 액션을 만들수도 있고

깃헙 액션즈 레파지토리 또는 깃헙 마켓플레이스에서 기존에 만들어진 것을 사용할 수도 있다.

    steps:
      # $GITHUB_WORKSPACE에 있는 저장소에서 체크아웃을 받아서 해당 job에서 접근 가능하도록 하는 액션
      - name: Checkout
        uses: actions/checkout@v4