Github Actions 2. action 사용
action이란 workflow에서 가장 작은 단위의 블록으로써, github에서 제공하거나, 다른 유저들이 제공하거나 또는 내가만들어서 사용할 수 있다.
1. 다른 Repository에 있는 action 사용.
다른 repo에 있는 action를 사용하기 위한 사용법은 다음과 같다.
uses: {owner}/{repo}@{ref}
다른 유저들의 action는 Marketplace에서 검색이 가능하다.
또한 github를 포함한 여타 많은 플랫폼에서 많은 action를 제공한다.
ex) docker build, aws접속 등…
검색을 하게되면, 기본적인 사용법을 알 수 있다. 아래 사진은 github에서 공식적으로 제공하는 Node.js를 세팅하는 action다.
해당 페이지에 들어가게 되면, action에 자세한 설명과 간단한 사용법이 나온다.
사용하기 위해선 checkout이라는 action을 사용해야 한다. 이 action는 workflow가 이 repo에 접근하기 위한 권한을 얻기 위해 필요한 action로써, action을 사용하기 위해선 반드시 checkout을 해주어야 함.
Checkout - GitHub Marketplace
Checkout a Git repository at a particular version
github.com
사용하게 되면 Actions 탭에서 해당 job이 실행된것이 확인 된다.
2. 직접 만들어 사용.
직접 action을 만들어 사용하려면 /.github/action 디렉토리에 위치하면 된다.
단 파일의 이름은 action.yml 또는 action.yaml 로 해야한다.
사용은 uses: 에서 해당 파일의 경로를 잡아주면 된다.
uses: ./.github/action/heelo-world-action
3. 예제
docker에서 제공해주는 action을 통해 컨테이너를 빌드하여 업로드 하는 action 파일을 만들어 보자.
name: Master Branch Build And Push DockerHub
on:
push:
branches:
- master
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: action/checkout@v3
with:
fetch-depth: 0
- name: Login to Dockerhub
uses: docker/login-action@v1
with:
username: ${{secrets.DOCKERHUB_USERNAME}}
password: ${{secrets.DOCKERHUB_TOKEN}}
- name: API Container Build and Push
uses: docker/build-push-action@v2
with:
file: ./API_container/Dockerfile
push: true
tags: jhkimdocker/capstone_api_image:${{secrets.VERSION}}
다음 파일은 master 브랜치가 push되면, dockerhub에 빌드된 이미지를 업로드 하는 예시다.
3.1 uses: action/checkout@v3
action을 사용하기 위해선 현재 나의 repo에 있는 파일들을 체크아웃 해줄 필요가 있다.
workflow가 나의 repository에 access할 수 있도록 해주는 구문임.
3.2 uses: docker/login-action@v1
docker에 로그인하는 action으로, with를 통해 username, password를 파라미터로 넘기게 된다.
해당 로그인 action을 정상적으로 거치게 되면 해당 job은 docker에 로그인 하게 된다.
3.3 uses: docker/build-push-action@v2
컨테이너를 빌드하고 dockerhub에 업로드하는 action으로, with를 통해 Dockerfile의 위치, push여부(false면 빌드만 한다), 붙일 태그를 설정한다.
Build and push Docker images - GitHub Marketplace
Build and push Docker images with Buildx
github.com