Profile picture

[Github-Actions] Github Actions의 체크아웃 액션

JaehyoJJAng2023년 04월 12일

Github Action ?

  • CI(Continuous Integration) 또는 CD(Continuous Deployment)와 같은 자동화를 위해서 사용됨
  • 빈번하게 필요한 반복 단계를 재사용하기 용이하도록 Github Actions에서 제공되는 일종의 작업 공유 매커니즘

Git Checkout ?

  • 코드 저장소(repository) 에서 특정 브랜치로 전환하는 작업을 뜻한다.
  • 위 작업을 위해서는 원격 저장소에 올려둔 프로젝트를 로컬 컴퓨터로 내려받는 작업이 반드시 선행 되어야 한다.

Checkout Action

Git의 체크아웃을 Github Actions 입장에서 바라보면 Github의 코드 저장소에 올려둔 코드를 CI 서버로 내려받은 후 특정 브랜치로 전환하는 행위라고 볼 수 있다.

이렇게 자주 필요한 체크아웃 작업 단계를 모든 워크플로우에서 매번 쉘 스크립트로 작성하려면 헷갈리기도 하고 번거롭기도 할 것이다.

그리고 제일 중요한 인증같은 보안적인 절차 또한 CI 서버와 코드 저장소간 신경 써줘야한다.

그래서 위와 같은 복잡한 과정을 간편하게 해줄수 있도록 Github에서 체크아웃에 필요한 일련의 과정을 묶어 액션으로 제공하고 있다.

Github Actions의 Checkout 액션을 사용하면 매우 간편하게 코드 저장소로부터 CI 서버로 코드를 내려받도록 워크플로우 구성이 가능하다


실습 워크플로우 생성

.github/workflows/ 라는 폴더를 만들고 그 안에 checkout.yml 이라는 이름의 YAML 파일을 하나 생성하여 실습을 진행해보자

폴더 및 파일 생성

mkdir -p .github/workflows
touch .github/workflows/checkout.yml 

checkout.yml 파일에 아래와 같은 코드를 복사해 붙여넣고 실습 진행해보자.

name: Test Workflow
on: [push]
jobs:
  practice-checkout:
    runs-on: ubuntu-latest
    steps:
      - name: 디렉토리 확인
        run: ls -alh      

위 파일 저장 후 Github의 코드 저장소로 push 후 Actions 탭에 들어가면

아래와 같은 워크플로우 실행 로그를 확인할 수 있다!

image

아직 Github의 저장소로부터 CI 서버로 코드를 한 번도 내려받은 적이 없기 때문에 ls -alh 명령어의 실행결과가 비어있는 디렉토리로 출력되는 것은 어찌보면 당연하다.


체크아웃 액션 사용

워크플로우 YAML 파일에서는 steps 키 하위의 uses 키에 사용하고자 하는 액션의 위치를

다음과 같이 명시한다

steps:
  uses: {소유자}/{저장소명}@{참조자}

예를 들면 아래와 같다

steps:
  uses: actions/checkout@v2

따라서 실습 워크플로우에 체크아웃 액션을 추가하려면 다음과 같이 checkout.yml 을 수정해주자

name: Test Workflow
on: [push]
jobs:
  practice-checkout:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: 디렉토리 확인
        run: ls -alh

이제 또 다시 위 파일 저장 후 Github의 코드 저장소로 push 하고 Actions 탭에 들어가면

체크아웃 액션 관련 부분이 추가 되어 있는 것을 확인할 수 있었다!

image

RUN actions/checkout@v2 항목을 열어 확인해보면 CI 서버에서 어떻게 저장소로부터 코드를 내려받는지 대강 알 수가 있다

각 항목씩을 열어서 확인하다보면 다음과 같은 친숙한 git 명령어들이 확인된다.

  • git init : 명령어를 통해 작업 디렉토리를 로컬 저장소로 만듬
  • git config: 명령어를 통해 각종 인증 관련 정보를 설정
  • git fetch : 명령어를 통해 원격 저장소로 부터 코드를 받아옴
  • git checkout : 명령어를 통해 주(main) 브랜치로 전환
  • git log : 명령어로 마지막 커밋(commit)의 해시값을 확인

다른 경로에 코드 내려받기

CI 서버의 최상위 작업 디렉토리 대신 그 하위에 있는 어떤 다른 폴더로 코드를 내려받고 싶은경우

체크아웃 액션의 path 옵션을 사용해보자!

워크플로우 YAML 파일에서 어떤 액션에 입력 파라미터를 넘길 때는 with 키를 사용하는데

이 때 파라미터의 이름과 값의 맴핑을 지정해주면 된다

checkout.yml 파일을 아래와 같이 수정해보자

name: Test Workflow
on: [push]
jobs:
  practice-checkout:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          path: other-coding-story
      - name: 현재 디렉토리 확인
        run: ls -alh
      - name: other-coding-story 디렉토리 확인
        run: ls -alh ./other-coding-story

위 파일 push 하고 Actions 탭에서 워크플로우 실행 로그를 확인해보면 other-coding-story 라는 폴더가 생겼고,

해당 폴더 안에 저장소로 부터 내려받은 코드가 위차할 것이라고 기대할 수 있겠다.

진짜 그런지 확인해보자

image


Loading script...