이상하게 Github Action이 참 좋다. 너무 편리하다.
언제까지나 열렬한 사용자로 남을 순 없다. 직접 만들어보자.
Github에서 제공하는 CI/CD Platform이다.
완전히 무료는 아니지만 일반적인 개인 개발자라면 무료로 사용할 수 있다.
자세한 사항은 billing plan을 참고하자. 참고로
나도 돈내고 써본적은 없다.
개인적으로는 장점이 많은 것 같다. 장점을 나열해보자
Github를 사용하는 입장에서 다른 CI/CD tool을 사용하는 것보다 나은 유저 경험을 겪는다.
그 이유로 Github UI와의 자연스러운 상호작용
, repository 이름 / Github 계정정보 등등의 Github 관련 정보를 쉽게 얻을 수 있다.
, github action plugin의 소스코드가 모두 공개되어 있다
정도를 꼽을 수 있을 것 같다..
정말 자유도가 높다. 못하는 것 빼고 다 할 수 있다.
이게 가능한 이유는 컨테이너 기반의 Github Action을 적극적으로 지원하기 때문이다.
원하는 상태의 도커 이미지를 정의하고 컨테이너를 실행 시키면 무엇이든지 할 수 있다.
게다가 Jenkins처럼 인스턴스를 관리해줄 필요도 없다. 도커 이미지를 빌드하여 서버리스(처럼)로 사용할 수도 있다.
Jenkins를 운영하며 소모하는 휴먼 리소스를 아낄 수 있다. 물론, 컴퓨팅 자원도 아낄 수 있다.
깃허브 서버가 불안정하면 동작하지 않는다.
깃허브라는 명성에 비해.. 깃허브 서버는 참 불안정한 것 같다.
설치형 CI/CD 툴에 비해서 똑같은 연산을 반복적으로 해야 한다.
Github Action이 실행될 때 마다 도커 이미지를 매번 새로 다운로드 받아야 한다.
혹은 이를 캐싱하기 위해서 또 다른 플러그인을 제작하거나 사용해야 한다.
내가 한 말을 그대로 반복하는 echo-action 을 만들어보자.
plugin을 위한 repository와 plugin을 사용할 repository를 만들어야 한다.
몰라도 되지만 알면 이해하기 쉬운 지식들
- github 사용법
- bash shell script 문법
- docker
먼저 plugin repository를 만들어보자.
github에 접속해서 echo-action-server
라는 이름의 repository를 생성하자.
echo-action-server
에는 단 두개의 파일을 정의한다.
echo-action-client
가 사용할 Dockerfile 두 파일을 정의해서 repository에 push 한다.
// Dockerfile
FROM alpine:3.10
ENTRYPOINT ["echo", "echo-bot:"]
// action.yml
name: echo action
description: echo watever you say
inputs:
say:
description: echo target
required: true
default: Hello World
runs:
using: docker
image: Dockerfile
args:
- ${{ inputs.say }}
push 했다면 repository의 상태가 아래와 같아야 한다.
plugin 정의가 끝났다. 이제 plugin을 사용할 일만 남았다.
plugin을 사용하기 전에 우리가 작성한 내용이 어떤 동작을 하는지 살펴보자
플러그인의 명세를 정의한다. echo-action-server
플러그인에서는 Dockerfile 이라는 이름의 도커 이미지를 실행하는 역할과 도커 컨테이너에게 say
변수의 값을 파라미터로 넘겨주는 역할을 한다.
플러그인이 사용되면서 실행되는 컨테이너의 기반이 되는 이미지이다. echo-action-server 플러그인에서는 리눅스의 echo
커맨드를 실행한다. action.yml에게 받은 say
변수는 자동으로 echo
뒤에 매핑되어 컨테이너에게 전달된다.
이제 또 다른 repository를 만들자. 이름은 아무래도 상관없다.
repository 를 만들고 깃허브액션의 workflow를 정의하자.
// .github/workflows/main.yml
name: action
on:
push:
branches: [ master ]
jobs:
echo:
runs-on: ubuntu-latest
steps:
- uses: plzprayme/echo-action-server@master
with:
say: 야호
이러면 끝이다. push 했다면 repository의 상태는 다음과 같다.
그리고 Actions 탭에 늘어가면 다음과 같이 하나의 job이 실행되어 있을 것이다.
job을 클릭해서 결과를 확인해보면 다음과 같이 야호
를 볼 수 있다.