2018년 마이크로소프트에서 Github를 인수하고, 여러가지 업데이트 등이 이루어져있다.
빌게이츠 시절 마이크로소프트는 오픈 소스를 배척하는 기업라는 이미지를 가지고 있었는데, Satya Nadella가 CEO가 된 이후로는 그간의 이미지가 무색할만큼 오픈소스 친화적인 행보를 보여주고 있다. 깃허브 인수 후에도 비공개 리포지토리 무료화, 윈도우 기본 도구(계산기 등) 오픈소스화 등이 그 예이다. 그 중의 하나로 Github Actions의 공개를 꼽을 수 있을 것이다.
GithubActions란?
CI(continuous integration)를 아시는분은 이해하기 쉬울 것인데 한마디로 정의하자면, 리포지토리의 상태를 특정 조건으로 반응하는 컴퓨팅 도구 이다. 예를 들면, 깃허브 리포지토리로 파일을 푸쉬 시, 그 푸쉬 된 파일을 베이스로 가상 리눅스가 만들어지고 사용자가 설정해놓은 순서대로 작업이 시작된다. 일반적으로는 프로젝트 푸쉬 시 리눅스에서 빌드를 하는 방법으로 많이 활용된다. 그 외 WinOS 뿐만이나라, MacOS(!!)도 제공된다. 기존에 MacOS 빌드용 대여 서비스가 많았는데 그 서비스를 대체할 수 있는 서비스인것이다.
비용과 제한?
비용
놀랍게도 공개 리포지토리일 시 무료다! 비슷한 서비스인 Gitlab의 CI가 한달에 4달러(약 4400원) aws의 codecommit, codebuild 컴퓨팅 소스의 기동시간마큼 과금하는 것에 비하면 아주 파격적인 서비스 조건이다. 이는 단지 서비스가 하나 무료구나 라고 보기에는 좀 의미가 다른데, 컴퓨팅 소스가 사용되는만큼 물리적인 서버가 필요하고, 그 서버가 무료로 제공된다는 점에서, 그 비용을 마이크로소프트가 그대로 감수한다는 점이다.
먼저 공개리포지토리면 과금은 발생하지 않는다. 비공개 리포지토리의 경우, 한달에 500MB, 2,000분까지 무료로 사용가능하지만, 그 이상은 밑의 표에 따라 과금이 발생한다.
Product | Storage | Minutes (per month) |
GitHub Free | 500 MB | 2,000 |
GitHub Pro | 1 GB | 3,000 |
GitHub Free for organizations | 500 MB | 2,000 |
GitHub Team | 2 GB | 3,000 |
GitHub Enterprise Cloud | 50 GB | 50,000 |
이는 리눅스를 기준으로한 시간 단위이다. 만약 자신이 윈도우 운영체제, macOS가 필요하다면 윈도우는 시간 1분사용 시 2분으로 카운트되며(2배), macOS는 1분 사용시 10분(10배)으로 카운트된다. 맥은 Actions조차 비싸다.
제한
GithubAcgtions는 하나의 작업 단위를 job이라 부르며, job의 작업 흐름을 workflow라고 부른다. 작업 중 다른 workflow를 불러 다른 workflow의 로직을 참고할 수도 있다. 예를 들어 노드 프로젝트 빌드의 job 작업 중, node의 잡다한 환경 구축 부분은 다른 프로젝트의 workflow를 불르게끔 설정할 수 있다.
여기서 job의 제한은 6시간, workflow의 제한은 72시간이다. 만약 제한된 시간을 넘게된다면 작업은 자동으로 종료된다.그 외 자세한 내용은 이쪽을 참고하시라.
그렇다면 컴퓨팅 리소스 제한은 어떻게 될까. 먼저 github actions의 컴퓨터 스펙은 이하와 같다.
- 2-core CPU
- 7 GB of RAM memory
- 14 GB of SSD disk space
용량 14GB, 메모리 7GB이기에 대용량 게임소스 빌드 등 대규모 프로젝트의 경우에는 활용하지 못할수도 있지만, 개인용 프로젝트로는 이미 차고 넘친다.
예제로 알아보기
본래 GithubActions의 가장 많은 사용 예로는 빌드작업일 것이다. 파이프라인 작업을 설정하는 용도로 사용되는 것이 일반적인 작업이기에 사용도 빌드로 하는 것이 좋겠지만, 나는 지금 개인용 프로젝트로 빌드작업이 필요한 프로젝트가 없기에, 빌드가 끝났다고 가정하고 간단하게 슬랙으로 빌드작업이 끝났음을 알리는 메시지를 보내는 로직을 만들어 보겠다.
먼저 자신의 리포지토리로 들어가 상단 Actions 탭 클릭.
이번에는 슬랙으로 메시지를 보내기만 할 것이므로 자작 workflow를 만들기에, set up a workflow yourself를 클릭
이곳이 workflow 파일을 만드는 곳이며, 여기서 리포지토리의 이벤트 발생시의 명령을 설정할 수 있다. 이번엔 슬랙에 메시지를 보내기만 할것이므로 이하와 같이 설정했다.
# This is a basic workflow to help you get started with Actions
name: CI
# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
# slack으로 메시지 발송
- name: send message to slack
run: curl -X POST -H "Content-type:application/json" --data '{"text":"build completed! haha! from cadimi"}' ${{ secrets.SLACK_WEBHOOK_URL }}
# slack으로 메시지 발송을 보시면 단순히 curl 명령어로 슬랙의 웹훅에 메시지를 보내고 있다.
여기서 URL에 상응하는 부분이 ${{ secrets.SLACK_WEBHOOK_URL }}이다. github actions에서는 빌드시의 민감한 정보는 모두 secret에 보관하도록 되어있다. 때문에 이번의 슬랙 incomming webhook의 url도 secrets에 저장해놓고 불러오는 형식을 취했다.
secrets의 설정이 궁금한 사람은 밑을 참고해주시길 바란다.
설정을 끝마쳤으면 start commit으로 작성 파일을 커밋한다.
그 뒤 다시한번 code탭으로 빠질텐데 Actions로 다시 들어가준다.
그 뒤 자신이 만든 파일로 인해 Actions가 작동하고 있음을 확인할 수 있을 것이다. 클릭해서 로그를 살펴보도록 하자.
로그를 보면 제대로 curl커맨드를 보냈음을 확인할 수 있다.
그 뒤 슬랙에서 확인해보면 메시지가 도착했음을 확인할 수 있었다.
이와 같은 느낌으로 위의 workflow정의에서 슬랙통지 위부분에 빌드 작업 커맨드를 끼워주면, 푸쉬 -> 자동빌드 -> 자동notification 순서의 작업 플로우가 완성된다.
마치며
Github Actions는 강력한 도구이다. 위의 작업은 매우 기초적인 설정으로 진행했지만, 다른 옵션들의 활용방법은 무궁무진하다. github의 라벨 등을 활용하면 자동 파이프라인 안에 수동 승인 플로우도 만들 수 있으며, 다른 사람이 만든 workflow를 활용하면 복잡한 파이프라인 과정도 간단하게 뚝딱 만들어낼 수도 있다.
Github의 점유율, 마이크로소프트의 대인배 정책에 힘입어 Github Actions는 메이저 도구로써 널리 활용될 것이며, 싫든 좋든 코딩을 업으로 삼는 사람에게 활용방법은 꼭 익혀야할 하나의 소양이 될 것이다. 공식 문서들을 활용하여 다양한 케이스를 상상해보고 연습해보는 것이 좋을 것 같다.
'그 외 개발관련' 카테고리의 다른 글
Windows 10 OpenJDK(자바) 14 버전 설치 (1) | 2020.08.09 |
---|---|
Windows 10 배터리 절약 - 빠른 시작 켜기 활성/비활성화 방법 (0) | 2020.07.28 |
일본어 키보드 한국어 키보드로 매핑하기 (feat. AutoHotKey) (0) | 2020.07.25 |