자동화/Github Action

[Github Action] 소개와 간단한 실습

Becker 2022. 12. 26. 16:13

Github Actions

  • Github에서 소프트웨어 workflow를 자동화 해주는 툴!
  • 자동화 대상
    • Build test, Unit test, CI/CD, version test, Scheduled task

Core Concept

Workflow, Event, Job, Step, Action

 

스크립트 살짝 맛보기

name: CI #name

# Event
on:
  push:
    branches: [ "main" ]

# Job
jobs:
  check-bats-version:
    runs-on: ubuntu-latest
		
# Step
    steps:

# Action/commands
      - uses: actions/checkout@v2
      - name: Run a one-line script
        run: echo Hello, world!			

      - name: Run a multi-line script
        run: |
          echo Add other actions to build,
          echo test, and deploy your project.
	  - uses: actions/setup-node@v1
		run:
			npm install -g bats
			bats -v
  1. Workflow
    • 자동화된 job의 집합
    • ./github/workflows 디렉토리에 yml 형태로 저장되어 있음
    • 특정 event에 실행 될 수 있음
  2. Event
    • Workflow를 실행시키는 trigger
    • push, pull-request, issue 등 많은 trigger를 제공함
    • github 외부에서 발생한 event에서도 trigger 가능!
    • Event trigger 공식 doc
  3. Job
    • 실행할 명령(step)들의 집합, 처리되는 작업의 단위
    • 독립적인 가상머신(ex : linux, mac)이 할당됨
    • step를 순차적으로 실행
    • step간 의존관계를 설정해 실행 순서를 제어할 수 있음
  4. Step
    • 작업의 집합, Action을 실행하거나 직접 Cmd를 실행할 수 있음
  5. Action
    • 특정 작업들을 묶어서 라이브러리 처럼 사용할 수 있게 만든 컴포넌트
    • 라이브러리와 비슷한
    • github marketplace에서 공유된 Action을 사용하거나 개인적으로 만들 수 있음!

Example

  • repository에 push 이벤트가 발생하면 지정된 서버로 배포하는 과정을 시뮬레이션 해보자!
  • Event : push
  • 실행환경 : ubuntu-latest
  • 사용 Action : appleboy/ssh-action@master
name : push and deploy

# Event
on:
  push:
    branches: [ "main" ]	

# Job
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: connect and git pull
        uses: appleboy/ssh-action@master
        with:
          host : ${{ secrets.HOST }}
          username : ${{ secrets.NAME }}
          password : ${{ secrets.PASSWORD }}
          port : ${{ secrets.PORT }}
          script: |
            whoami
            cd workspace/action
            git pull
  • 해당 git repository에 push를 하게되면 위 workflow가 실행이 됨
  • HOST 서버에서 소스가 동기화되는 것을 확인할 수 있음!

https://docs.github.com/en/actions/using-workflows/triggering-a-workflow

참고