[CI/CD] Github Actions - Checkout Action 으로 코드 내려 받기

Seong Ho Kim·2024년 1월 11일
0

[CI/CD] Github Actions

목록 보기
4/4
post-thumbnail

1. Github Actions - Checkout 이란?

  • 먼저 Git에서 Checkout은 코드 저장소(repository)에서 특정 브랜치(branch)로 전환하는 작업을 말하지만, GitHub Actions 입장에서 바라보면 우리가 로컬 환경에서 코드를 작업후 코드 저장소(원격 저장소 : Github)에 push한 코드를 CI 서버로 내려받은 후에 특정 브랜치로 전환하는 행위를 말한다.

2. Github Actions - Action 이란?

  • 액션(Action)은 빈번하게 필요한 반복 단계를 재사용하기 용이하도록 GitHub Actions에서 제공되는 일종의 작업 공유 매커니즘을 말한다.
  • 액션은 하나의 코드 저장소 범위 내에서 여러 워크플로우 간에서 공유를 할 수 있을 뿐만 아니라, 공개 코드 저장소를 통해 액션을 공유하면, 깃허브 상의 모든 코드 저장소에서 사용이 가능하다는 장점이 있다.

참고사항 : Github Action 요소 종류

  • workflows : 워크 플로우는 하나 이상의 job으로 구성되고 event에 의해 트리거될 수 있는 자동화된 프로세스이며, YAML으로 작성되고 Github Repository의 .github/workflows 폴더 아래에 저장한다. repository에는 여러 workflow를 가질 수 있으며 각 workflow는 서로 다른 작업을 수행할 수 있다.
    (워크 플로우는 다양한 job으로 구성되어 있고 병렬로 수행한다)
  • actions : 워크 플로우의 가장 작은 블럭으로 jobs를 만들기 위해 step 들을 연결할 수 있으며, 재사용이 가능한 컴포넌트로서 반복적인 코드의 양을 줄일 수 있고 git repository를 가져오거나 클라우드 공급자에게 인증을 설정할 수도 있다.
  • events : 워크 플로우의 실행을 트리거하는 특정 활동이나 규칙을 말한다.
  • jobs : 여러 step으로 구성되고 가상 환경의 인스턴스에서 실행되며, 다른 job에 의존 관계를 가질 수 있고 독립적으로 병렬 실행도 가능하다.
  • steps : task들의 집합으로 커맨드를 날리거나 쉘(터미널) 스크립트 실행하는 것처럼 action을 실행할 수 있다.
    (또한, 개인적으로 만든 action을 작성할 수도 있고 github marketplace에 있는 공용 action을 사용도 가능하다)
  • runners : 워크 플로우가 트리거될 때 실행하는 서버이며, 각 runner는 1번에 1개의 job을 실행할 수 있. Github에서 호스팅해주는 Github-hosted runner와 직접 호스팅하는 Self-hosted runner로 나뉜다.

3. Github Actions - Checkout Action으로 코드 내려 받기(실습)

3-1 체크아웃 액션 사용 하기)

name: Our Workflow
on: push
jobs:
  checkout:
    runs-on: ubuntu-latest
    steps:
      - run: ls -al
      - uses: actions/checkout@v4

  • 참고로 actions/checkout옆에 적어둔 @v4 는 메이저 버전을 뜻하며 이것만 잘 명시만 해줘도 마이너나 패치 버전이 올라갈때 자동으로 최신버전이 올라가기 때문에 귀찮게 매번 버전업을 해주지 않아도 됨

  • Initializing the repository : git init 명령어를 사용해서 작업 디렉토리를 로컬 디렉토리로 만드는 역할을 한다
  • Disabling automatic garbage collection : git config 명령어를 사용해서 git을 설정하는 역할을 한다
  • Setting up auth : git config 또는 git submodule를 이용해 실행시키는 역할을 한다
  • Fetching the repositiory : git fetch 명령어를 사용해 원격 저장소로 부터 코드를 받아오는 역할을 한다
  • Checking out the ref : git checkout 명령어를 이용해 주 브랜치인 main 브랜치로 전환하는 역할을 함

3-2 내려받은 코드 확인하기)

name: Our Workflow
on: push
jobs:
  checkout:
    runs-on: ubuntu-latest
    steps:
      - run: ls -al
      - uses: actions/checkout@v4
      - run: ls -al
      - run: cat .github/workflows/checkout.yml

3-3 다른 경로에 코드 내려받기)


name: Our Workflow
on: push
jobs:
  checkout:
    runs-on: ubuntu-latest
    steps:
      - run: ls -al
      - uses: actions/checkout@v4
        with:
          path: our-source
      - run: ls -al our-source
      - run: cat our-source/.github/workflows/checkout.yml

  • 확인해보니 실패라고 뜬다. 그 이유는 Github 내에 checkout.yml 파일이 없어서 생기는 문제이다.
  • checkout@v4 디렉토리를 확인해보면 path-parameter로 our-source를 넘겨줬는데 ls -al에 들어가면 CI 서버의 최상위 디렉토리로 받아지지 않고 our-source 안에 받아지는 것이다.

  • 다시 돌아와서 첫번째 run의 ls -al 뒤에 our-source를 넘겨서 안에 있는 파일이나 폴더를 나열하게 설정한다.
  • 두번째 run의 앞에 our-source를 넘겨서 안에 있는 파일이나 폴더를 나열하게 설정한다

  • our-source 폴더 안에 있는 파일과 폴더들이 있고 저장소가 디렉토리 안으로 내려 받아졌다.
  • 두 번째로 our-source 폴더 안에 있는 checkout.yml 파일이 내용에 출력되고 있음을 확인할수 있다

3-4 과거 변경 이력 불러오기)

name: Our Workflow
on: push
jobs:
  checkout:
    runs-on: ubuntu-latest
    steps:
      - run: ls -al
      - uses: actions/checkout@v4
        with:
          fetch-depth: 3
      - run: git log --pretty=oneline
  • 만약에 과거 변경 이력이 필요한경우엔 fetch-depth Actions를 사용할 수 있다.
  • 기본 값은 1이며, 0은 전체 이력을 불러올 수 있다.
  • fetch-depth 에 3을 입력하면 최신 커밋 뿐만 아니라 그 전의 커밋 내용도 내려받음으로써 총 3개의 변경이력을 내려받는 것이다.
  • 정확한 확인을 위해 git log --pretty=oneline 을 이용해 커밋 당 한 줄에 표시되게 할 수 있다.

  • 결과를 확인해 보면 최신과 전의 커밋 변경 이력이 출력되서 보여주고 있음을 알수 있다.

  • 이유는 checkout 명령을 실행할때 입력 파라미터로 fetch-depth를 3으로 명시해줬기 때문이다.

3-5 다른 저장소의 코드 내려받기)

  • Github에 공개된 저장소라면 다른 저장소에 있는 코드도 내려 받을 수 있다.
name: Our Workflow
on: push
jobs:
  checkout:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          repository: actions/checkout
          ref: v4
      - run: ls -al
  • ref 옵션을 사용해 해당 저장소에 branch명이나 태그명 또는 커밋 hash 값을 지정해줄수 있다. (v4)

  • 결과를 확인해보면 체크아웃을 실행할때 어떤 repository에 어떤 참조(ref)를 사용할지 명시해주고 있고 현재 repository에 actions/checkput 이라는 곳에 v4 라는 참조(ref) 태그로 부터 코드를 내려받으려고 하고 있음을 알수 있다.

  • 확인해보니 action.yml을 제외한 나머지 무수히 많은 파일들이 나열되어 있는데 지금 이 코드들은 내 저장소의 코드가 아니다.
  • 보통 github actions의 코드를 담고 있는 저장소의 최상위 경로에 action.yml 파일이 확인되는걸로 봐서 원하는 코드가 CI 서버로 잘 내려받아진 것을 확인할 수 있다.

Github Actions - repository

여기를 클릭하시면 실습용 레포지토리로 이동할 수 있습니다.

profile
안녕하세요 Junior UIUX Designer 준비생 입니다 😊

0개의 댓글