처음으로 접한 깃헙 액션

github actions 그거 뭐 별거냐고 대수롭지 않게 생각했었다.
근데 조금 들여다보니 자유도가 꽤나 높아서, 사람들이 정말 다양하게 활용하고 있다는 것을 알고는 흥미가 생겼다.

MS Developer Korea에서 정리해둔 actions 소개 영상을 추천

CI/CD 그거 알지. 나도 해봤어. 울 회사에도 있어.

actions를 제대로 알아보기 전의 내가 딱 이 정도 생각이었다. 그냥 깃헙이 원래 코드 저장소를 제공하니까, 코드 올려둔 김에 빌드도 같이 돌리라고 추가기능 제공하는구나 하는 느낌. 지금 일단 업무적으로는 버전 관리를 git으로 하고 있지 않기 때문에 딱히 관심이 크지 않기도 했다.

최근에 토이 프로젝트를 다시 시작하면서 actions도 조금 알아보고 있다. 한국 ms에서 만든 youtube 영상에 기본 개념 설명이 아주 잘 되어있다. actions를 처음 알아보려는 사람이라면 정주행을 권한다. 영상을 보고 나면 workflow, job, step, action 각 단계별 구성을 빠르게 잡을 수 있고, 시리즈 후반부에는 actions를 빌드나 배포가 아닌 다른 용도로 활용하는 예제 2가지를 소개하고 있다.

MS Developer Korea : Github Actions로 개발 주기 자동화

이 영상을 보고 나면

  • main branch는 직접 commit하지 못하게 막아둔 채로 여러 사람이 협업할 때 github을 활용하는 방법을 볼 수 있다.
  • pull-request를 제출한 후, 다른 사람이 리뷰를 마치고 승인했을 때, actions를 이용해서 PR에 라벨을 붙이는 예제를 볼 수 있다. (4-2)
  • 이슈가 많이 쌓여서 관리가 필요할 때, actions를 이용해서 (라벨을 붙이면) 댓글을 달고 이슈를 닫는 예제를 볼 수 있다. (4-3)

첫 번째 bullet에 적은 것처럼 main branch에는 보호 정책을 걸어두고 PR - review - Merge하는 흐름으로 협업하는 과정을 볼 수 있는 것도 흥미로웠다. git은 주로 개인 작업할 때 혼자서만 작업하다 보니까, commit하고 push하는거 말고는 다른 기능을 사용할 기회가 거의 없다. rebase, cherry-pick도 사용할 필요가 없어. 이 영상을 보고 branch protection rule을 어떻게 쓰는 건지 감을 잡았다.

workflow를 처음 적용하면서 헤맸던 삽질들

workflow의 문법이나 개념을 소개하기에는 이미 잘 정리된 자료들이 많이 있어서 굳이 여기에 반복할 필요는 없어 보인다. 이번에 nuget 패키지를 만들어 배포하는 workflow를 만들면서 뻘짓했던 요소들 간단히 몇가지만 정리해본다.

repository가 개인 계정의 것이 아니라 organization의 소유인 경우

packages에 파일을 올리려면 접근 권한이 필요하다. 개인 계정의 repo라면 developers settings > personal access tokens > tokens(classic)에서 발급하는 토큰을 이용하면 되는데, organization의 구성원들이 같이 공유할 수 있는 토큰 같은 개념은 없는 것 같다. 그냥 해당 repo에 접근 권한이 있는 개인이 발급한 personal token을 secret으로 등록해두고 같이 사용하게 하면 workflow를 실행하는 데에는 문제가 없다.

release를 만들려면 token 외에도 권한 지정이 필요하다

마켓플레이스에서 검색해보면 create release해주는 actions가 많이 있다. 내가 사용한 것은 ncipollo/release-action이고 readme의 예시에도 설명된 내용이긴 한데, job 레벨에서 권한 지정을 해주어야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
jobs:

build:
runs-on: ubuntu-latest
permissions:
contents: write # 이거 빼먹지 마세요... ㅜㅠ
steps:
- uses: actions/checkout@v3
- uses: ncipollo/release-action@v1
with:
artifacts: "release.tar.gz,foo/*.txt"
bodyFile: "body.md"

검색하다보면 permissions 설정이 없는 yml 예시도 많이 있는데, 왠지 권한 지정 문법은 나중에 추가된 것이 아닌가 싶다. 그 전에 만들어진 workflow들은 권한 지정 없이도 실행이 됐던 것 같고. 이거 빼먹고 issue 게시판에 글 올리는 사람이 나 말고도 많음..

추가로 공부할 것

지금은 기본적인 nuget 패키지 배포 정도 구성해봤는데, 좀 더 익숙해지려면 다른 활용을 몇가지 더 만들어봐야 할 듯 하다. actions를 미리 알았으면 지난달에 만들었던 모바일 게임 랭킹 순위 크롤러도 깃헙에서 바로 실행/저장하게 만들었을텐데, 그걸 몰랐네. 이거 수정하면서 좀 더 다루어봐야겠다.

See Also