Github Actions
Github Actions..?
Github Actions란, 깃헙에서 지원해주는 기능으로 자동화를 목적으로 한 작업을 가능하게 해준다.
간단하게 Push, issue생성 삭제 등등 다양한 이벤트를 트리거로 사용가능하게 해주면서 오픈소스기능들을 적적하게 섞는게 가능하다.
내부적으로 동작하는 방식은 가상머신하나를 빌려와서 거기서 명령들을 차례로 실행하는 방식이다.
CI/CD라는 자동화 과정을 쉽게 깃헙에서 연결할 수 있도록 지원한다.
데브옵스
현재는 Jenkins라는 툴을 사용해서 자동화 과정을 많이 사용하지만 머지않아서 깃헙 액션을 통해 일련의 과정을 처리하게 될 것 같다는 전망이다..!
실제로 GameCI라는 게임을 위한 자동화과정을 담고있는 레포도 존재한다. (유명,,)
자세하게 뜯어보면 yml파일을 통해서 방식을 지정하고(무슨vm을 쓸지 윈도우, 맥, 우분투 등등) 이벤트를 지정하여 차례대로 지정된 형식으로 발생한다.
한 레포에 여러가지 workflow가 존재할 수 있으므로 다양하게 조합하여 자동화를 실현한다는 점이 매력적이다.
사용 방법
레포에서 Actions탭을 선택하면 처음에는 다양한 튜토리얼이 뜨겠지만 Create an issue one push라는 workflow가 등록되어 있어서 다음과 같은 화면이 뜬다.
set up a workflow yourself를 선택하여 하나씩 알아보는 것도 좋지만 깃허브에서 튜토리얼을 많이 준비했기 때문에 다양하게 찍어먹어 보는 것도 좋아보인다..
나는 yml파일 형식과 간단한 issue생성 workflow만 있으면 될 것 같아서 깊게 공부하지는 않았지만 하나의 시스템이 구축되면 재사용성이 높아서 정말정말 유용해보인다.
중요한 점은 나와 같은 생각을 한 사람이 정말 많고 왠만한 기능은 이미 개발을 해놨기 때문에 블럭코딩처럼 몇가지 기능들만 조합해도 괜찮은 자동화를 이룰 수 있다.
set up a workflow yourself
버튼이나 new workflow
을 누르면 yml파일을 작성하는 화면이 나오는데 옆을 보면 MarketPlace가 있는데 여기서 원하는 기능을 검색하고 활용하면 된다.
name: CI
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the "main" branch
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# 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@v3
# Runs a single command using the runners shell
- name: Run a one-line script
run: echo Hello, world!
# Runs a set of commands using the runners shell
- name: Run a multi-line script
run: |
echo Add other actions to build,
깃헙에서 제공해주는 Simple Workflow의 내용이다.
- name: 이 워크플로우의 이름
- on: 이 워크플로우가 실행될 시기를 제어할 이벤트를 설정한다.(여기에선 main브랜치로 push나 풀리퀘를 할 때)
- workflow_dispatch: 이 작업을 액션탭에서 실행 가능하게 한다. 즉, 수동으로 실행이 가능
- jobs: 작업을 분리할 수 있으며 가상머신(or 컨테이너)에서 돌아가는 하나의 처리 단위로 사용된다.
- runs-on: 작업을 수행할 러너를 선택한다.(우분투로 선택)
- steps: 하나의 작업에서 여러 단계로 구분하여 사용 즉, 작업 -> 단계로 세분화
- uses: 액션을 사용할 때 사용 즉, 외부 액션도 여기에 포함
- run: 커맨드나 스크립트를 여기서 사용한다.
이 작업은 메인브랜치로 푸쉬하거나 풀리퀘를 보낼 때 실행되며 수동으로도 가능하다.
명령은 echo로 print하는 것이 끝이다.
실습
지금 까지 todo를 써오던 방식에 자동화를 살짝 도입해봤다..
지금까지 todo를 마크다운으로 형식에 맞춰서 작성을 했었는데 블로그에도 같이 올라가져서 google search console에서 문제가 생겨 레포로 새로 만들어 관리하던 도중 todo자체만 issue로 빼고 나머지는 root readme에 작성하면 좋다는 멘토님에 말씀을 듣고.. 방식을 변경했다.
화면에 보이는 것 처럼 todo로 하루에 일을 작성하고 중요하거나 길어질 것 같은 내용은 따로 convert to issue를 통해 빼서 Project형식 (jira느낌..?)형태로 Todo, Progress, Done 세가지 방식으로 분류된다.
여기서 githubAction을 통해 todo issue를 전날에 미리 생성해두는 자동화 workflow를 만들었다..(매우 간단한..)
자세히 보면 bot이 issue를 만들었기 때문에 bot이라고 뜨며 tag, Assignees까지 설정해주기 때문에 메일도 자동으로 온다.
# .github/workflows/issue-on-push.yml
on:
schedule:
- cron: '0 20 * * *'
name: Create an issue on push
permissions:
contents: read
issues: write
jobs:
stuff:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: JasonEtco/create-an-issue@v2
env:
GITHUB_TOKEN: $
이 내용 또한 MarketPlace에서 craete issue를 검색하면 사용방법과 편집방법을 다 알려주기 때문에 사용에는 문제가 없다.
이벤트 발생 자체를 cron을 사용하여 20시 마다 자동으로 issue가 생성된다.
uses를 통해서 외부에 작성된 JasonEtco/create-an-issue@v2
이라는 액션을 사용하였으며 secrets은 actions에서 사용할 수 있는 일종의 환경변수이다.
깃헙 token같은 경우는 이 yml파일에 직접적으로 적으면 보안상으로 매우 위험하기 때문에 환경변수로 만들어서 관리한다.
댓글남기기