Github Action Plugin 개발하기

노력을 즐기는 사람·2022년 4월 28일
2

들어가며

이상하게 Github Action이 참 좋다. 너무 편리하다.
언제까지나 열렬한 사용자로 남을 순 없다. 직접 만들어보자.

Github Action 이란?

Github에서 제공하는 CI/CD Platform이다.
완전히 무료는 아니지만 일반적인 개인 개발자라면 무료로 사용할 수 있다.

자세한 사항은 billing plan을 참고하자. 참고로
나도 돈내고 써본적은 없다.

개인적으로는 장점이 많은 것 같다. 장점을 나열해보자

장점

1. Github 친화적이다.

Github를 사용하는 입장에서 다른 CI/CD tool을 사용하는 것보다 나은 유저 경험을 겪는다.

그 이유로 Github UI와의 자연스러운 상호작용, repository 이름 / Github 계정정보 등등의 Github 관련 정보를 쉽게 얻을 수 있다., github action plugin의 소스코드가 모두 공개되어 있다 정도를 꼽을 수 있을 것 같다..

2. Super Customizable

정말 자유도가 높다. 못하는 것 빼고 다 할 수 있다.

이게 가능한 이유는 컨테이너 기반의 Github Action을 적극적으로 지원하기 때문이다.
원하는 상태의 도커 이미지를 정의하고 컨테이너를 실행 시키면 무엇이든지 할 수 있다.

3. Serverless

게다가 Jenkins처럼 인스턴스를 관리해줄 필요도 없다. 도커 이미지를 빌드하여 서버리스(처럼)로 사용할 수도 있다.

Jenkins를 운영하며 소모하는 휴먼 리소스를 아낄 수 있다. 물론, 컴퓨팅 자원도 아낄 수 있다.

단점

1. Github 종속적이다.

깃허브 서버가 불안정하면 동작하지 않는다.
깃허브라는 명성에 비해.. 깃허브 서버는 참 불안정한 것 같다.

2. 연산이 비효율적이다.

설치형 CI/CD 툴에 비해서 똑같은 연산을 반복적으로 해야 한다.
Github Action이 실행될 때 마다 도커 이미지를 매번 새로 다운로드 받아야 한다.
혹은 이를 캐싱하기 위해서 또 다른 플러그인을 제작하거나 사용해야 한다.

Github Action Plugin 만들기

내가 한 말을 그대로 반복하는 echo-action 을 만들어보자.
plugin을 위한 repository와 plugin을 사용할 repository를 만들어야 한다.

몰라도 되지만 알면 이해하기 쉬운 지식들

  • github 사용법
  • bash shell script 문법
  • docker

echo-action-server

먼저 plugin repository를 만들어보자.
github에 접속해서 echo-action-server 라는 이름의 repository를 생성하자.
echo-action-server 에는 단 두개의 파일을 정의한다.

  1. echo-action-client가 사용할 Dockerfile
  2. 도커 이미지를 실행시킬 github action plugin yml 파일

두 파일을 정의해서 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을 사용하기 전에 우리가 작성한 내용이 어떤 동작을 하는지 살펴보자

action.yml

플러그인의 명세를 정의한다. echo-action-server 플러그인에서는 Dockerfile 이라는 이름의 도커 이미지를 실행하는 역할과 도커 컨테이너에게 say 변수의 값을 파라미터로 넘겨주는 역할을 한다.

Dockerfile

플러그인이 사용되면서 실행되는 컨테이너의 기반이 되는 이미지이다. echo-action-server 플러그인에서는 리눅스의 echo 커맨드를 실행한다. action.yml에게 받은 say 변수는 자동으로 echo 뒤에 매핑되어 컨테이너에게 전달된다.

echo-action-client

이제 또 다른 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을 클릭해서 결과를 확인해보면 다음과 같이 야호 를 볼 수 있다.

profile
노력하는 자는 즐기는 자를 이길 수 없다

0개의 댓글