Github action 뜯어보기

Kai·2023년 2월 1일
1

이 글은 공식문서를 참고하여 작성한 글입니다!

☕ 시작


이번 글은 이전 글들에 이어서, 워크플로우 구현을 위한 yml파일의 문법에 대해서 알아보고, 이를 응용한 간단한 또 다른 예제를 하나 만들어보도록 하겠다.

바~로 레츠기릿 🔥


🌠 이 글의 시작점


먼저 이 글은 공식문서의 Create an example workflow 에서 시작한다. ㅎㅎ
사실 내 글보다는 공식문서가 더 낫긴하...지만, 내 글도 같이 봐주면 좋을 것 같다 🤭

아무튼 공식문서가 매~우 잘 되어 있으니 꼭 공식문서를 한번쯤 읽어보면 좋을 것 같다.


💻 예제 워크플로우 생성


name: learn-github-actions
run-name: ${{ github.actor }} is learning GitHub Actions
on: [push]
jobs:
  check-bats-version:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: '14'
      - run: npm install -g bats
      - run: bats -v

먼저 이 내용으로 워크플로우를 하나 새롭게 생성하자.
워크플로우는 Github 레포지토리의 Actions탭 > New workflow버튼 > set up a workflow yourself버튼을 클릭하면 만들 수 있다.

요로코롬 만들어주면 된다.
그리고 저장을 하면 커밋이 하나 찍히면서 Actions탭에 아래와 같이 워크플로우 하나가 추가된 것을 확인할 수 있다.


⭐ yml 분석


name: learn-github-actions
run-name: ${{ github.actor }} is learning GitHub Actions
on: [push]
jobs:
  check-bats-version:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: '14'
      - run: npm install -g bats
      - run: bats -v

자! 이제 가장 중요한 부분이다 ㅎㅎ
아까 생성했던 이 yml파일이 어떤 의미들을 담고 있는지 하나 하나 뜯어보도록 하자 🔥

만약 Github action에 대해서 잘 모른다면, 이 글이 속한 시리즈의 이전 글들을 꼭 보고 오도록 하자.


1) 네이밍

name: learn-github-actions
run-name: ${{ github.actor }} is learning GitHub Actions

이 두 값은 Optional한 값이다. name은 워크플로우의 이름이고, run-name은 아래에 표시한 부분에 보여지는 이름이다.


2) Trigger

on: [push]

on에 나의 워크플로우가 어떤 이벤트들을 리스닝할 것인지를 입력할 수 있다.
예제 yml파일에서는 코드 push가 발생했을 때, 실행되도록 설정한 상황이다.
예제처럼 브랜치에 대한 정보를 같이 입력하지 않으면, 모든 브랜치의 코드 push를 리스닝하게 된다.

특정 브랜치에 대해서만 리스닝하는 것은 이따가 알아보도록하겠다 ㅎㅎ

push뿐만 아니라 다양한 이벤트를 물론 리스닝할 수 있다. fork, label이 생성됐을 때등등의 다양한 이벤트에 대한 리스닝 설정은 공식문서에서 자세히 확인할 수 있다.


3) Jobs

	jobs:
    	check-bats-version:

jobs는 말 그대로 워크플로우에서 실행될 Job들을 작성하는 부분이다.
예제에서는 check-bats-version이라는 이름을 갖는 하나의 Job만을 작성한 상황이다.


4) 실행환경

			runs-on: ubuntu-latest

Ubuntu, windows, mac 중에서 선택할 수 있고, 예제는 Ubuntu 최신버전에서 작업들을 실행하도록 설정했다.

찾아보니 이렇게 Runner들을 제공하고 있다.
개인적으로는 latest보다는 사용하고자 하는 특정 버전을 직접 입력하는 것이 더 나을 것 같다 ㅎㅎ


5) 스텝: Actions

			steps:
            	- uses: actions/checkout@v3
                - uses: actions/setup-node@v3
                  with:
                  	node-version: '14'

예제에서는 하나의 스텝이 Action과 명령어로 구성되어 있는데, 이 부분은 Action에 해당하는 부분이다.
처음 봤을 때, '잉? 이게 머지?' 했던 부분인데, 왜냐하면, actions/checkout@v3 같은 Action을 실행하는 구문을 이해를 못했기 때문이다 🤭

actions/cheout@v3checkout이라는 액션의 3버전을 Action으로써 실행하겠다는 의미를 갖는다.
그렇다면, checkout액션이 뭔지 궁금하니 마켓플레이스에서 검색해보자.

검색해보니 npm과 유사한 화면이 보여진다 ㅎㅎ

이런식으로 어떠한 동작을 수행하는 것들을 Action이라고 부르며, 누구나 이러한 Action을 만들어서 나눔(?)을 할 수 있다.


6) 스텝: 실행

			- run: npm install -g bats
      		- run: bats -v

1번에서 5번까지 오면서 뭔가를 실행할 준비가 모두 완료가 됐고, 이제 실제로 뭔가를 실행하는 부분이다.

예제에서는 bats라는 js 패키지를 설치하고, bats의 버전을 찍는 동작을 수행한다.
그렇다면, 실제로 버전이 잘 찍혔는지 한번 확인해보자 ㅎㅎ

호오 ~ 아주 신기하게도 bats의 버전이 정상적으로 출력된 것을 확인할 수 있다.


🔥 응용


이제 사용법을 마스터했으니 나마의 워크플로우를 하나 만들어보겠다.
음~~~ 내가 만들 워크플로우의 기능은 이렇게 하겠다.

  • production 브랜치와 release하위의 브랜치에 코드가 push됐을 때 동작한다.
  • ubuntu에서 워크플로우를 실행한다.
  • Spring 프로젝트를 gradle로 빌드한다.

⭐ yml 파일

name: Build with Gradle
run-name: Go Go
on:
  push:
    branches:
      - production
      - 'releases/**'
jobs:
  build-with-gradle:
    runs-on: ubuntu-22.04
    steps:
    - name: Checkout production branch
      uses: actions/checkout@v3
      with:
        ref: production
          
    - name: Set up JDK 17
      uses: actions/setup-java@v3
      with:
        java-version: '17'
        distribution: 'corretto'
        
    - name: Where is here
      run: pwd
          
    - name: Executable Gradle
      run: chmod +x ./gradlew
        
    - name: Build with Gradle
      run: ./gradlew build

글에서는 바로 하나의 섹션이 지났지만, 이 yml파일을 작성하기 위해서 영겁(?)의 시간을 보냈다 ㅎㅎ
그리고 당연하게도 많은 글들을 참고했는데, 필요하다면 참고하길 바란다. 🙏


실행 🔥🔥🔥

자 이제 yml파일을 실행해보도록 하겠다 ㅎㅎ

짜잔!!! 정상적으로 빌드가 된 것을 확인할 수 있다 🤭
다음 글에서는 실전에 가까운 예시로 도전을 해보도록 하겠다 ㅎㅎ

그럼 이만

I'll be back 👍

0개의 댓글