Github Actions 사용법과 명령어 정리

CI 툴인 Github Actions를 통해 자동화 배포를 진행해보았다.
윤여찬's avatar
Jul 19, 2024
Github Actions 사용법과 명령어 정리
요즘은 자동화 배포를 필수적으로 공부해야하는데 기존에 Jenkins를 사용해본 경험이 있어 이번에는 Github Actions를 사용하여 배포를 자동화 시켜보려고했다.
 
지금부터 Actions를 사용하기 위해 어떻게 해야하는지를 설명해보려한다.

Ations

notion image
Github Repositories에서 내가 적용하고자 하는 Repositories를 찾아 열어보면 그안에 Actions를 확인할 수 있다.
참고한 영상은 유명한 드림코딩님의 제발 깃허브 액션🔥 모르는 개발자 없게해 주세요 🙏인데 처음 도입부에서 많은 도움을 얻었다!
notion image
처음 화면을 들어오면 이러한 화면이 보이게 되는데 나는 node.js를 선택하였다.
notion image
선택과 동시에 main에는 이렇게 workflows 폴더에 .yml 파일이 생성되게된다!
notion image
이렇게 생성된 파일에 명령어를 작성해주고 각종 서버와의 접속 정보는 다른 곳에 저장해주어야하는데 그 부분을 먼저 설명하려한다.
notion image
notion image
이렇게 settings에서 Secrets and variables를 열면 그 안에 Actios가 있다 그 탭을 누르면 좌측으로 Repository secrets를 등록할 수 있는데 New repository secret를 눌러서 새로운 키들을 등록할 수 있다. 이렇게 나처럼 HOST, PORT, KEY, USERNAME, PASSWORD를 따로 입력하면 모든 준비가 끝난다.
자 이제 자동으로 만들어진 yml 파일을 세팅하면 모든 준비가 완료된다.
# 이름 name: Deploy Development Salse # 어떤 행동을 할 때 실행할 것인가? on: push: branches: [ "release" ] # 실행시 행동 jobs: main: # deploy 작업이 정의되어 있어, 이 작업은 Ubuntu 환경에서 실행된다. runs-on: ubuntu-latest steps: # Checkout 액션을 사용하여 저장소의 코드를 체크아웃한다. - name: Checkout uses: actions/checkout@v4 # node.js 액션을 사용하여 Node.js 환경을 설정한다. - name: Setup Node.js environment uses: oven-sh/setup-bun@v2 # dependencies 프로젝트의 의존성을 설치한다. - name: Setup dependencies run: npm install # npm run build-oniy 명령어를 실행하여 컴파일하고 압축한다. - name: Compile and Minify for Production run: npm run build-only - name: Deploy Files uses: appleboy/scp-action@master with: # github setting에서 각종 키에 설정이 가능하다. host: ${{ secrets.DEV_SERVER_HOST }} port: ${{ secrets.DEV_SERVER_PORT }} username: ${{ secrets.DEV_SERVER_USERNAME }} key: ${{ secrets.DEV_SERVER_PASSWORD }} source: './dist' target: '/home/ulalaLAB_sales/ulalaLAB_sales_operation'
난 개인적으로 vscode로 작업하는게 편해서 vscode로 작업했다!
 
각각의 명령어마다 간단한 주석을 달아놓았으니 보시면서 해결하시면 쉽게 적용이 가능하실 듯하다! 개인적으로 jenkins 보다 훨씬 편하다고 느꼈고 적용 후 반영이 자동화 됨으로 훨씬 운영이 편해질 듯하여 즐거웠던 공부였다.
notion image
이제 내가 명령어를 작성한 것 처럼 reslesepush 되는 순간 자동적으로 배포가 진행된다.
notion image
이렇게 순서대로 자동화가 진행되는데 탭을 열어 하나하나 어떻게 진행되는지 파악할 수 도 있다. 평균적으로 4분 정도 소요되고 운영되는 앱 화면에는 문제없이 무중단 배포가 되는 것도 확인할 수 있었다.

명령어 정리

1. name

필수 필드가 아니지만 최대한 표기하여 다음 코드를 볼 사람을 배려하자…
workflow의 이름을 지정할 수 있다. 이 workflow의 이름은 actions의 페이지에 나타난다. name을 지정하지 않으면 workflow 파일이 저장된 경로 이름으로 자동으로 지정된다.

2. on

필수필드. workflow을 수행하게하는 github 내의 이벤트를 지정해야한다. 간단하게는 문자열로 시작해서 array의 형태로 지정할 수 있다. 사용이 가능한 명령어의 공식문서는 이곳을 참조하자

3. env

job과 step에서 사용가능한 환경변수의 map이다. 모든 jobstep에 공통적으로 사용가능한 환경 변수를 지정할 수 있으며 각각의 job / step에서만 사용할 수 있는 환경 변수 설정도 가능하다 (jobs..env과 jobs..step.env) 전역 / job / step의 환경 변수를 설정할 수 있는데, 일반적인 프로그래밍처럼 환경 변수의 이름이 같다면 더 작은 범위의 환경변수를 사용하게 된다.

4. job

워크플로우는 하나 이상의 job으로 이루어져있다. job은 기본적으로 병렬적으로 수행되기 때문에 여러개의 job이 순차적으로 실행되지 않는 점에 유의해야 한다.

5. with

with 명령어 사용 예시

여기에는 두 가지 예시를 들어 설명하겠습니다.

1. actions/checkout 액션

actions/checkout 액션은 GitHub 리포지토리의 코드를 체크아웃하는 데 사용됩니다.
yaml코드 복사 - name: Checkout repository uses: actions/checkout@v4 with: repository: my-org/my-repo ref: main token: ${{ secrets.GITHUB_TOKEN }} path: my-path
이 예시에서 with 블록은 다음과 같은 입력 매개변수를 설정합니다:
  • repository: 체크아웃할 리포지토리 이름
  • ref: 체크아웃할 브랜치나 커밋 참조
  • token: 인증에 사용할 토큰 (여기서는 시크릿으로 저장된 GITHUB_TOKEN)
  • path: 체크아웃할 디렉토리 경로

2. appleboy/scp-action 액션

appleboy/scp-action 액션은 SCP(Secure Copy Protocol)를 사용하여 파일을 원격 서버로 전송하는 데 사용됩니다.
yaml코드 복사 - name: Deploy Files uses: appleboy/scp-action@master with: host: ${{ secrets.DEV_SERVER_HOST }} port: ${{ secrets.DEV_SERVER_PORT }} username: ${{ secrets.DEV_SERVER_USERNAME }} key: ${{ secrets.DEV_SERVER_SSH_KEY }} source: './dist' target: '/home/ulalaLAB_sales/ulalaLAB_sales_operation'
이 예시에서 with 블록은 다음과 같은 입력 매개변수를 설정합니다:
  • host: 원격 서버의 호스트 주소
  • port: 원격 서버의 포트 번호
  • username: 원격 서버의 사용자 이름
  • key: 원격 서버에 접속할 SSH 키 (여기서는 시크릿으로 저장된 DEV_SERVER_SSH_KEY)
  • source: 전송할 파일의 경로
  • target: 원격 서버의 대상 경로

with 명령어 사용 방법

  1. 액션 정의: 각 액션마다 사용 가능한 입력 매개변수가 다르므로, 액션의 공식 문서를 참고하여 어떤 매개변수를 사용할 수 있는지 확인합니다.
  1. with 블록 추가: uses 키 아래에 with 블록을 추가하고, 필요한 입력 매개변수를 설정합니다.
  1. 시크릿 사용: 민감한 정보(예: API 키, 비밀번호, SSH 키 등)는 GitHub Secrets에 저장하고 ${{ secrets.<SECRET_NAME> }} 형식으로 참조합니다.

이렇게 CI 자동화 툴 Github Actions를 알아보았다.
추후 사용시에 장점을 또 한번 다루겠다.
Share article

찬찬잉