티스토리 뷰

728x90

백준허브라는 크롬 익스텐션을 사용하면 프로그래머스, 백준에서 문제 풀 시 자동으로 Github에 push를 해줍니다.

이렇게 push한 코드를 사용해서 지인들과 그날 푼 문제를 슬랙에 인증하는 활동을 하고 있는데요.

2개의 채널에 동시에 인증할 일이 생기면서 일일히 올리기가 아주 귀찮아졌습니다.

https://velog.io/@flaxinger/%EB%B0%B1%EC%A4%80%ED%97%88%EB%B8%8C-%EC%82%AC%EC%9A%A9-%EB%B0%A9%EB%B2%95

 

백준허브 사용 방법

백전허브의 사용자 매뉴얼입니다.

velog.io

 

회사에서 일할 때도 슬랙 웹훅으로 이것저것 만드는 걸 재밌게 해왔던 터라

이번에도 깃허브액션을 사용하여 자동으로 슬랙 메세지 보내기를 시도해봤습니다.

 


슬랙에 웹훅 추가하기

웹훅을 추가하고자 하는 채널의 이름을 클릭하고 통합 -> 앱 추가를 클릭합니다

(권한이 없을 경우 해당 슬랙의 관리자에게 문의하세요)

 

incoming webhooks로 검색하면 웹훅이 나옵니다. 이걸 설치해주세요.

 

자세한 웹훅 설정 방법은 여기를 참고해주세요.

https://jojoldu.tistory.com/552

 

Slack Webhook API 생성하기

요즘 대부분의 개발도구들은 Slack과의 통합 (Integration)을 지원하지만, 여전히 미지원 하는 도구들도 많습니다. 이런 미지원 도구들을 Slack에 연동할때 Slack Webhook을 사용합니다. 저도 종종 사용하

jojoldu.tistory.com

 

Github의 Repository Secret에 웹훅 URL 추가하기

Github Action 설정 파일에 직접 넣어도 작동은 하지만, 웹훅 url이 외부에 유출될 수 있으므로 secret에 담아둡니다.

secret을 사용하면 ${{ secrets.KEY }} 의 형태로 바로 접근하여 등록한 보안정보를 가져올 수 있습니다. (aws access key 등)

저는 TODAY_DEVELOP_SLACK_WEBHOOK이라는 이름으로 secrets에 슬랙 웹훅 url을 등록했습니다.

 

처음엔 Environment secrets에 키를 등록했는데, GithubAction에서 읽어오질 못했습니다. Repository secrets으로 등록하니까 해결됐는데, 불러오는 방법이 잘못된건지 잘 모르겠습니다🥺 혹시 아시는 분 공유해주시면 감사하겠습니다. 🙏

 

Github Action 설정하기

.github/workflows 디렉토리에 .yml파일을 하나 생성합니다. 파일명은 자유롭게 하셔도 됩니다.

name: Send Slack

# master 브랜치에 push할 때 github action을 실행시킨다
on:
  push:
    branches:
      - master

jobs:
  test: # 실행할 job의 이름. 자유롭게 지으면 됨
    runs-on: ubuntu-latest # 우분투 최신버전에서 실행
    steps: # 실행할 job의 단계
      - name: Slack notification # 단계 이름
        env: # 환경변수 설정
          SLACK_WEBHOOK: '${{ secrets.TODAY_DEVELOP_SLACK_WEBHOOK }}' # secrets에 등록해둔 슬랙 웹훅 url
          # 슬랙 메세지 셋팅
          SLACK_CUSTOM_PAYLOAD: '{ "text" : "${{ github.event.head_commit.timestamp }}\n보리집사 오개완\n<${{ github.event.head_commit.url }}|${{ github.event.head_commit.message }}>" }'
        uses: Ilshidur/action-slack@2.0.2 # 사용할 github action 포멧

 

 

Github action에는 마켓 플레이스가 있어서, 다른 사람들이 만들어둔 템플릿을 가져와서 사용할 수가 있습니다.

uses: Ilshidur/action-slack@2.0.2 <-이 부분을 보시면, 저는 action-slack이라는 github action을 사용하였습니다.

 

SLACK_CUSTOM_PAYLOAD는 제가 메세지에 링크도 넣고 개행도 넣고싶어서 사용한 옵션이고,

그냥 간단하게 텍스트만 보내시려면 아래처럼 하셔도 됩니다.

- name: Slack notification
  env:
    SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
  uses: Ilshidur/action-slack@2.0.2
  with:
    args: '슬랙에 보낼 메세지를 여기에 씁니다'

action-slack의 자세한 사용법은 아래를 확인해주세요

https://github.com/marketplace/actions/github-action-for-slack

 

GitHub Action for Slack - GitHub Marketplace

Outputs a message to Slack

github.com

 

[덤] Github  Event 정보 가져오기

저는 메세지에 커밋시간, 커밋메세지, 푸시 url을 같이 넣고 싶어서 어떻게 가져오면 되는지 찾아봤습니다.

steps:
  - name: Echo github obj
    run: echo ${{ toJson(github) }}

.yml파일에서 slack을 보내기 전에 이렇게 찍어서 확인해보시면 github obj의 모든 정보를 확인하실 수 있습니다.

거기서 필요한 정보를 추출하실 수 있습니다.

 

제가 슬랙에서 사용한 정보들은 여기서 가져왔습니다.

  • 커밋 메세지 : github.event.head_commit.message
  • 푸시 url : github.event.head_commit.url
  • 푸시 시간 : github.event.head_commit.timestamp

결과

짞짞짞짝짝~👏👏👏

이제 문제만 잘 풀면 되겠군염...... 


해결 못한 부분

1. 커밋시간을 yyyy-MM-dd 포멧으로 바꿔서 출력하고 싶었지만 실패했습니다. 아시는분... 한수 알려주시면 감사하겠습니다 ㅠㅠ

2. 문제를 풀고 push가 된 후에 액션이 Queued 상태로 멈춰있었습니다. 뭐가 문제이지 하고 찾아보는데 갑자기 5분 후에 액션이 잘 돌아갔습니다. 구글링해보니 Queued 상태로 멈춘 사례가 과거에 많이 있었던 것 같은데, 원인은 발견하지 못했습니다. 🤨

 


특정 push에서 Github Action을 실행하고 싶지 않을 경우

If any commit message in your push or the HEAD commit of your PR contains the strings [skip ci], [ci skip], [no ci], [skip actions], or [actions skip] workflows triggered on the push or pull_request events will be skipped.

인용문 []에 적힌 키워드가 커밋 메세지에 포함될 경우 push 또는 pr 이벤트 발생 시 깃허브액션이 실행되지 않는다고 합니다.

 

https://github.blog/changelog/2021-02-08-github-actions-skip-pull-request-and-push-workflows-with-skip-ci/

 

GitHub Actions: Skip pull request and push workflows with [skip ci] | GitHub Changelog

GitHub Actions: Skip pull request and push workflows with [skip ci]

github.blog

 

728x90
댓글
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함