github action으로 comment bot 만들기

SeongHo Hong
5 min readMay 23, 2022

--

요즘은 회사에서 배포 자동화를 위해서 작업을 하고 있는데요. 기존에 만들어져 있는 프로세스가 훌륭하지만 조금 더 간소화하는게 좋겠다는 생각을 하고 있습니다. 현재는 tag를 기반으로 이벤트가 트리거되는 방식인데, 이러면 배포 성공 여부와 관련없이 main branch로 바로 머지해야하는 한계가 있습니다. release branch 기준으로 배포 하려면 어떤 방식으로 트리거 하는게 좋을지 고민을 하게 되었습니다.

comment bot

slack chat을 통해 요청, github action에 들어가서 직접 버튼을 눌러서 요청하는 등 여러가지 방법이 있습니다. 저는 release branch -> main branch로 만들어둔 PR에서 comment로 배포 실행을 요청하면 좋겠다고 생각했습니다. 자연스럽게 release PR에 배포 요청 이력도 남아서 좋겠다고 판단했습니다. 그러면 comment가 등록되었을 때 감지해서 bot을 실행시켜줘야 할텐데, 이걸 해주려면 bot을 관리하는 서버가 필요합니다. 굉장히 귀찮다고 생각하고 있었는데 Tez가 좋은 방법을 찾아주셨습니다!

https://github.community/t/trigger-a-github-workflow-if-it-matches-a-particular-comment-in-the-pull-request/116402

위의 글을 따라서 github action을 적용해보면 따로 comment를 지켜보는 bot이 없이 명령어를 받아서 처리할 수 있습니다. 간단한 내용이지만 처음해보시는 분을 위해서 조금의 설명을 해볼게요.

github action 설정파일

github action 설정 파일은 `.github/workflows/` 에 두면 됩니다. 위와 같은 yml 파일을 두면 조건에 따라 job이 실행됩니다. 여기서 job을 trigger 시켜주는 조건은 아래 부분 입니다.

on:
issue_comment:
types: [created, edited, deleted]

issue_comment라고 되어 있는데 이렇게 까지만 하면 issue에도 댓글을 추가하면 github action이 발동되게 됩니다. 여기에선 다행히 job에 조건이 하나 더 걸려 있어서 pull request 때만 작동합니다.

jobs:
pull_request_comment:
if: contains(github.event.comment.html_url, '/pull/')
그래도 의심되어서 issue에서 작동시켜봤더니 이렇게 되네요 ‘This check was skipped’

2가지 예시

그 다음 steps 부분을 보면 2가지 경우를 예시로 만들어봤습니다.

- name: Deploy
if: contains(github.event.comment.body, '/deploy')
run: |
echo start deploy

command line 명령어 실행하기 /deploy 라는 글자가 들어가 있으면 command line을 실행해주는 부분 입니다.

- name: Add deploy comment
if: contains(github.event.comment.body, '/deploy') # check the comment if it contains the keywords
uses: actions/github-script@v5
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '🚀'
})

comment.body에 내용이 매칭되는건 앞의 경우에서 봤지만, 이게 작동하는걸 봤을 때 아주 흥미로웠습니다🤩🤩 따로 설정해준 것 없이 위와 같이 입력하면 기본 GITHUB_TOKEN을 사용해서 코멘트를 남겨줍니다.

🚀🚀🚀

정리

간단한 작업으로 github에 많은 기능을 추가해줄 수 있을 것 같아서 테스트하는 동안 흥미로웠습니다. 아직 가능성 정도만 확인하고 배포 자동화 프로세스를 수정하지는 않았는데요. 이걸 기반으로 개선할 수 있으면 좋을 것 같네요🙂 읽어주셔서 감사합니다!

--

--

SeongHo Hong

Software Engineer 🧑‍💻https://github.com/cozzin