Becker
Becker 의 TIL
Becker
  • 분류 전체보기 (30)
    • Computer Science (15)
      • Python (7)
      • Java (1)
      • Algorithm (0)
      • Database (3)
      • Network (1)
      • Openstack (2)
      • ETC (1)
    • 자동화 (3)
      • Github Action (1)
      • Airflow (0)
      • Docker (2)
    • 논문 리뷰 (1)
    • 서평 (3)
    • 끄적끄적 (8)
전체 방문자
오늘
어제

인기 글

티스토리

hELLO · Designed By 정상우.
Becker

Becker 의 TIL

[Github Action] 소개와 간단한 실습
자동화/Github Action

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

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

참고

  • https://zzsza.github.io/development/2020/06/06/github-action/
  • https://www.daleseo.com/github-actions-basics/
  • https://ji5485.github.io/post/2021-06-06/build-ci-cd-pipeline-using-github-actions/
  • https://github.com/appleboy/ssh-action
  • https://github.com/halucinor/action
  • https://aerocode.net/375
    Becker
    Becker

    티스토리툴바