개발지식

Github actions을 사용해보자.

weaklion 2023. 3. 12. 16:13

거두절미하고 github actions를 사용해보겠습니다.

 

Github actions

 github에서 제공하는 CI(Continuous Integration : 지속 통합)과 CD(Continuous Deployment)를 위한 서비스 입니다. 대부분의 개발자가 코드 저장소(repository)로 사용하는 github에서 추가된 서비스 답게 현재 많은 개발자들이 이용하고 있는 서비스 이기도 합니다.

github actions는 코드 저장소에서 어떤 이벤트가 발생했을 때, 특정 작업을 발생시킬 수 있습니다. 예를 들면, 누군가가 코드 저장소의 특정 branch에 push 하거나 pull request를 생성하게 되면 github actions를 통해 코드 변경분에 문제가 없는지를 검사할 수가 있죠. 그 외에 특정 시간이 되면 소프트웨어를 빌드 하거나, 배포시킬 수도 있습니다.

 

위의 것들 처럼 소위 지속적으로 수행해야하는 반복 작업들을 저희들은 CI/CD라고 부릅니다. 실무에서 사용하는 대표적인 CI/CD 툴은 Jenkins가 있죠.

지금부터 Github actions을 차근차근 알아보도록 하겠습니다.

Workflow

Github actions에서 가장 상위 개념으로, 자동화를 위한 과정이 타이핑 되어 있습니다.

워크플로우는 코드 저장소 내에 .github/workflows폴더 아래에 yaml 파일로 설정해야 하며, 하나의 코드 저장소 내에 여러 개의 워크플로우가 정의될 수 있습니다.

 

워크플로우 yaml 파일에는 2가지가 정의되어야만 합니다. on과 jobs입니다.

보기 쉽게 예제로 알아보겠습니다.

on:
  push:
    branches:
      - main
  
jobs:
  build:
    runs-on:ubuntu-latest
  	
    steps:
    	...

main브랜치에 push 할 시 위 워크플로우가 실행됩니다.

이후 jobs 속성을 통해서 워크플로우 내에 어떤 일을 해야할지 명시가 되는거죠. 그렇다면 job은 뭘까요?

 

Jobs

Jobs란 말을 해석하면 작업이죠. Github actions에서도 Jobs는 하나의 처리단위를 의미합니다.

하나의 워크플로우에선 여러 개의 작업으로 구성되어야 하며 무조건 하나 이상의 작업이 있어야만 합니다.

모든 작업은 기본적으로 동시에 실행되며 필요 시 작업 간에 의존 관계를 설정하여 작업이 실행되는 순서를 제어할 수 있습니다.

Jobs에는 여러가지 내용을 명시 할 수 있지만 runs-on이라는 속성이 필수적으로 들어가야만 합니다. 

runs--on은 리눅스나 윈도우즈와 같은 실행 환경을 지정할 수 있습니다.

 

Steps

작업은 하나 이상의 단계가 있어야만 합니다.

steps에는 앞으로 우리가 작업할 단계를 커맨드나 스크립트를 통해서 명시할 수 있습니다.

이것도 예제를 통해서 보는 게 편하겠죠.

jobs:
  test:
    runs-on: ubuntu-latest
    
    steps:
      - uses: actions/checkout@v3
      - run : npm install

steps 내부에는 많은 속성이 사용되는데 가장 많이 사용되는 속성이 uses와 run 입니다.

uses 내부에서 사용하는 것들을 액션이라고 하는데, actions/checkout@v3는 스텝을 시작할 때 가장 필수적으로 해야할 액션입니다.

CI/CD 작업은 코드 저장소에서부터 코드를 작업 실행 환경(가상 머신 or 컨테이너)로 받는 것에서 시작하는데 , 이 행위가 없다면 일일이 쉘 스크립트로 작성해야 하는 불편함이 있겠죠? 그걸 보편적으로 하는게 위의 uses에 있는 checkout 액션입니다.

run에는 스크립트와 커맨드를 실행할 때 사용됩니다. npm install. 딱 봐도 뭔지 아시겠죠?

위의 코드는 자바스크립트 프로젝트에서 사용되는 워크플로우의 극히 일부분입니다.

이 처럼 steps에 여러 액션과 스크립트를 이용해서 워크플로우를 작성할 수 있습니다.

 

Actions

액션은 Github actions에서 빈번하게 필요한 반복 단계를 재사용하기 용이하도록 제공하는 일종의 작업 공유 매커니즘입니다. 액션은 하나의 코드 저장소에서 여러 워크플로우 간에 공유될 수 있을 뿐만 아니라, 공개 코드 저장소를 통해 모든 코드 저장소에서 사용할 수도 있습니다.

 

위에서 보셨던 actions/checkout이 가장 대표적인 액션입니다.

뿐만 아니라 Github의 marketplace에서도 수많은 액션을 접할 수가 있습니다. 아래의 링크를 참조하여 여러 actions을 참조해보는 걸 권장합니다.

https://github.com/marketplace?type=actions 

 

GitHub Marketplace: actions to improve your workflow

Find the actions that help your team build better, together.

github.com