개요

github action을 이번에 공부하고 실제로 간단한 내용을 적용해보기로 했다.

그리고 간단한 실제 깃헙 액션 코드를 적용해보고 내용을 정리해둔다.

인사이트

github actions를 이용하면 github webhook을 통해 연계하여 하고자 하는 부분들을 상당히 클라우드 에서 자체 소화 할 수 있다.

예를 들어 PR이 올라왔을때 테스트 자동화, push 이후 docker build 및 registry 배포 등의 작업을 자연스럽게 수행 할 수 있다.

이게 가능한 이유는 위와 같은 devops 의 니즈가 git에 대한 action에 기인하는 경우가 대부분이기 때문이다.

다만 젠킨스, airflow와 github actions의 관계는 고민해봐야 할듯 하다.

VM 종류

  • 리눅스
  • 윈도우

간단 개념 정리

  • worflow
    • 가장 큰 단위로 N개이 job으로 구성
    • job은 직/병렬 실행 가능
  • jobs
    • 하나의 runner 단위로 task를 수행
  • actions
    • workflow 내에서 호출하는 메서드 개념
    • 예: git clone 등이 가능함
  • runners
    • 실행되는 서버

보면 유용한점

github action 코드

repo 코드 push가 올라오면 docker image build 후 ecr에 push하는 코드를 작성해보았다.

name: Deploy to Amazon ECR

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main
env:
  AWS_REGION: region
  ECR_REGISTRY: ecr_registry주소
  ECR_REPOSITORY: repo주소
  IMAGE_TAG: latest
jobs:
  deploy:
    name: Deploy
    runs-on: ubuntu-latest
    environment: production

    steps:
    - name: Checkout
      uses: actions/checkout@v2

    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: ${{ env.AWS_REGION }}

    - name: Login to Amazon ECR
      id: login-ecr
      uses: aws-actions/amazon-ecr-login@v1

    - name: Build, tag, and push image to Amazon ECR
      id: build-image
      env:
        ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
        IMAGE_TAG: ${{ github.sha }}
      run: |
        docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
        docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
        echo "::set-output name=image::$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG"

secrets 등록하기

위 코드 스니펫의 민감정보는 git repo settings에서 secrets로 등록할 수 있다.

settings -> secrets -> new repository secret 을 선택한다.

이후 새로운 key value값을 입력한다.

검증

타겟 브랜치로 push가 올라오면 정상 동작하는것을 확인 할 수 있다.

build 상태 badge 달아보기

![example workflow](https://github.com/lks21c/sagemaker.docker/actions/workflows/aws.yml/badge.svg)

Reference

github action 공부하기

  • https://github.com/features/actions
  • https://zzsza.github.io/development/2020/06/06/github-action/