본문 바로가기

Software Development

Github Actions 맛보기

들어가며

2019년 새해가 밝았는데, 몬가 새해엔 좀 더 블로그를 열심히 해 보자는 다짐과 함께, 깃헙에서 좋은 소식들이 연달아 오면서 겸사겸사 새해 첫 블로그 포스트를 작성 해 보았다. (-,.-;)


작년 말쯤에 Github Actions 라는 깃헙에서 나온 CI/CD를 위한 워크플로우 기능을 제공하기 위해 베타테스터를 모집한다는 글을 보았다.

당시에 한번 써 보고 싶어서 냅다 신청했는데, 며칠전에 베타테스터에 당첨되었다는 메일을 받고, 당장 적용 해 보았다.


얼마전부터 심심한 여가시간을 보내기 위해 개인 프로젝트를 해 보고자 뉴스 크롤러를 만들어 보고 있다. [Ashon/newscrawler]

그 프로젝트에 CI를 설정해서 쓰고 싶어서 bitbucket에 프로젝트를 파서 개발 중이었는데, 마침 깃헙에서 프라이빗 레포를 지원한다는 소식과 깃헙 액션 당첨소식을 듣고 겸사겸사 프로젝트 저장소를 깃헙으로 옮기고 뉴스 크롤러 프로젝트에 대한 CI를 구성해 보았다.


Github Actions - UI

"Actions" 버튼을 클릭을 해 보면, 워크플로우를 구성할 수 있는 화면이 나오고, UI를 통해 등록할 수 있도록 해 놓았다.

(나중에 패치되면 아이콘 배치가 어디에 있을 지 모르겠지만,

일단은 풀리퀘 버튼 옆에 위치해 있다.)



(UI를 통해서만 등록할 수 있는 줄 알았는데, HCL문법으로 워크플로우 작성이 가능했다.)


이런 기능은 UI보다는 코드를 직접 보는게 좋겠다 싶어서 예제로 등록만 해 두고 직접 코드를 작성해 보았다.

수많은 삽질.. 끝에 CI 워크플로우를 완성하게 되었고, GitHub Actions UI를 통해 해당 워크플로우 코드를 열게 되면 UI로 예쁘게 나온다.



워크플로우의 실행 결과들은 Actions 탭에 가서 볼 수 있다.

(중간에 Invalid Workflow로 실패한 건,

워크플로우 스크립트에 오류가 있을 경우 보이게 된다.)


Github Actions - Workflow

Github Actions의 각 action 오브젝트는 'use' 패러미터로 들어가는 도커를 기반으로 'args' 를 인자로 받아 엔트리포인트에서 실행 가능하게 해 준다.


나는 깃헙이 기본으로 제공중인 도커 컨테이너만 사용하면 되었기 때문에 기본 이미지만을 사용해서 CI 워크플로우를 구성했다. 개발자 가이드를 보면서 필요한 부분들을 하나씩 메꿔가면서 워크플로우를 작성 해 나가면 된다. 액션에 사용할 스 있는 컨테이너는 https://github.com/actions 이곳에서 확인할 수 있다.


아래는 gist로 공유한 개인프로젝트의 CI 코드다.


위 내용에는 포함되지 않았지만 공식 컨테이너 말고도 저장소에 자신이 직접 액션에 사용 할 컨테이너를 만들어서 사용할 수도 있는데, 그때는 저장소 하위에 디렉토리 단위로 컨테이너 소스를 정의 해 주면 된다.


마무리

대부분의 CI 코드들은 yml이나 특정 언어로 구성된 DSL을 제공하고 있다. 나의 경우는 Circle CI, Travis CI, BItbucket Pipeline, Jenkins 등을 경험 해 보았는데, 깃헙 액션이 HCL로 제공하는 DSL이 워크플로우 스크립트를 작성하는데 훨씬 간편하다는 생각이 들었다.

yml 방식이나 Jenkins pipeline DSL의 경우는 워크플로우 안에 스텝들을 만들다 보면, 재사용하기 힘들고, 정의되는 태스크들은 항상 코드의 depth를 가지게 되는데, 깃헙에서 HCL을 이용해서 내 놓은 DSL로 워크플로우를 만들었을 때는 확실히 깊이가 많이 줄어 보기가 쉽다는 느낌을 받았다.

포스트 본문에는 포함하지 않았지만, 워크플로우에서 사용 될 컨테이너를 저장소에 미리 정의해서 사용할 수도 있는데, 이런부분도 프로젝트와 관련된 도구들을 저장소에 코드로 남겨놓음으로써 뭔가 시스템의 사일로화를 최대한 줄이고자 하는 그런 철학이 느껴져서 좋다고 생각한다.

깃헙 액션을 본격적으로 사용하게 되었을 때 IaC 코드들을 어떻게 관리할 까도 좀 더 생각해 보게 되었다.
나는 주로 인프라스트럭쳐 코드들은 프로젝트와 별개로 코드를 만들어서 관리했었는데, 깃헙 액션을 쓰게 되면 인프라스트럭쳐 코드들도 워크플로우에 함께 녹여내기 위해서 같이 포함시키는게 좋지 않을까 라는 생각도 하게 된다.

아무튼 그런 코드의 관리는 알아서 잘 정해가면 좋을 것 같고, 깃헙 액션이 GA되었을 때, 오픈소스나 엔터프라이즈의 CI/CD 생태계가 어떻게 변할지 기대가 된다.