Github Actions#4

Donghoon Nam
원티드랩 기술 블로그
6 min readDec 30, 2019

목록

1. Github Actions 선택 배경
2. branch별로 S3에 배포
3. 빌드, 배포 step을 job으로 그룹핑 및 의존성 선언을 통한 배포
4. 배포 성공, 실패 슬랙 메세지 전송 공통 모듈 작성
5. Lighthouse action을 Github Actions scheduler 구현

Github Package

이번 내용을 진행하면서 Github Actions가 아닌 Github Package를 우선 설명드려야 할 거 같습니다.

배포 성공, 실패, 취소 시 슬랙 메세지를 전송하는 모듈을 만들기 위해서 입니다. 슬랙 메세지를 보내기 위해선는 Github Package가 아닌 Github Actions의 action으로 만들어도 됩니다.
공개 action은 url에서 확인 하시면 됩니다.
https://github.com/marketplace?type=actions

하지만 회사 내에서 쓰기 위해서는 코드가 공개되어서는 안 되는 경우도 있기 때문에 그걸 감안하여 내용을 진행하도록 하겠습니다.

Github Package 만드는 순서
- Package Registry에 접근할 권한
- ~/.npmrc에 토큰을 저장
- 패키지 배포 하기
- publish (패키지 올리기)
https://musma.github.io/2019/09/30/github-package-registry.html
위의 url을 참고하여 주시면 됩니다.

제가 slack 메세지를 전송하는 모듈을 만든 간단한 Github Package 입니다.
repository : https://github.com/seye2/github_package
package : https://github.com/seye2/github_package/packages/95205

index.js
https://gist.github.com/seye2/9607a501fbaf4af321b73aadf3aefa54

Actions

여기까지 slack package를 작성하였다면 Github Actions에서 사용할 수 있도록 action을 만들어 줘야 합니다.
우선 Actions에 대해서 설명하겠습니다.

  • Actions부터 설명하자면 Github API, public third-party API같은 것들을 이용하여 원하는 코드를 작성하는 것을 만들 수 있게 해줍니다.
    예를 들면 npm module, send SMS 같은 것들을 만들 수 있게 해줍니다.
    조금 더 설명을 하자면 공통 기능 같은 것들을 만들거나 모듈을 만들거나 개별적인 다른 OS의 태스크를 진행이 가능하게 해줍니다.
    Actions에 대해서는 장, 단점을 논하기에는 제가 아직 더 많은 부분을 제작해보지 않아 시기상조라고 생각하여 적지 않았습니다.
    하지만 지금까지 작업한 것에 빗대어 보면 장점이 많은 시스템이 아닌가, 자바스크립트 개발자로서는 docker와 javascript로 개발할 수 있어 충분히 장점이 많지 않나 라고 생각합니다.
  • Actions Type을 만드는 방법
  • Actions을 만들때 public, private 하게 보여지게 되는 것에 대한 선택을 해야 합니다.
  • public을 선택하면 Github Marketplace에 공용으로 노출되게 됩니다.
    https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-a-javascript-action#example-using-a-public-action
  • private을 선택하면 로컬에 파일을 작성하여 로컬 경로를 알려주어야 합니다.
    https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-a-javascript-action#example-using-a-private-action
  • 지원하는 Actions Type의 종류는 아래를 참고 부탁 드립니다.
  • Docker container : Linux
  • JavaScript : Linux, MacOS, Windows

위의 셋팅을 완료하고 나면 아래의 그림과 같이 구현하고자 합니다.

Github Package를 사용해서 만든 Action을 사용

Github Package로 만든 모듈을 사용하기 위해서는 npm install을 진행해야 합니다.
deploy_to_*에서는 build에서 진행한 npm install이 적용되지 않습니다.
이전 내용에서 설명했듯이 job은 다른 runner에서 동작이 되기 때문에 Github Package가 공유가 되지 않습니다.
만약 공유를 하고 싶다면 artifact를 이용해서 node_module을 복사하면 됩니다.

이 부분은 고려해서 봐주시면 좋을 것 같습니다.

위의 그림을 구현한 코드 입니다.

Build job 성공시 전송되는 slack message 입니다.

Build 성공시 슬랙 메세지 전송

예제는 https://github.com/seye2/github_actions_package 여기서 확인해 주시면 됩니다.

Github Package와 Github Actions를 연동하는 방법을 알아보았습니다.
간략하게 위의 내용을 정리해보면 아래와 같습니다.
1. Github Package로 모듈 작성
2. Github Package를 Github Actions에서 사용할 수 있도록 action으로 만듭니다.
-action.yml을 이용하면 됩니다.
3. npm install을 진행하여 node_module 경로에 있는 package경로를 사용하여 private action으로 구현하였습니다.
4. job이 다르면 runner가 다르므로 Github Package가 공유되지 않으므로 꼭 하고 싶다면 artifact를 사용하거나 public action으로 만들어 사용하면 됩니다.

--

--