티스토리 뷰
백준허브라는 크롬 익스텐션을 사용하면 프로그래머스, 백준에서 문제 풀 시 자동으로 Github에 push를 해줍니다.
이렇게 push한 코드를 사용해서 지인들과 그날 푼 문제를 슬랙에 인증하는 활동을 하고 있는데요.
2개의 채널에 동시에 인증할 일이 생기면서 일일히 올리기가 아주 귀찮아졌습니다.
회사에서 일할 때도 슬랙 웹훅으로 이것저것 만드는 걸 재밌게 해왔던 터라
이번에도 깃허브액션을 사용하여 자동으로 슬랙 메세지 보내기를 시도해봤습니다.
슬랙에 웹훅 추가하기
웹훅을 추가하고자 하는 채널의 이름을 클릭하고 통합 -> 앱 추가를 클릭합니다
(권한이 없을 경우 해당 슬랙의 관리자에게 문의하세요)
incoming webhooks로 검색하면 웹훅이 나옵니다. 이걸 설치해주세요.
자세한 웹훅 설정 방법은 여기를 참고해주세요.
https://jojoldu.tistory.com/552
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 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 이벤트 발생 시 깃허브액션이 실행되지 않는다고 합니다.
'사부작사부작' 카테고리의 다른 글
사내 백오피스 거래내역조회 페이지 응답속도 개선 후기 (0) | 2023.07.14 |
---|---|
홈화면 캐러셀 API 응답속도 개선 후기 (0) | 2023.07.10 |
[회고] 숫자로 돌아보는 2022년 (0) | 2022.12.31 |
점심메뉴 추천 슬랙봇 '노스트라다묵스' 개발 후기 (0) | 2022.02.12 |
2021년 회고 : 자바의정석에서 신규플젝런칭까지 (4) | 2022.01.03 |
- Total
- Today
- Yesterday
- 백엔드
- k8s
- mockery
- php
- 라라벨
- laravel 테스트코드
- laravel
- kubernetes
- 주니어개발자
- 샤딩
- laravel 테스트
- pods
- 몽고디비
- 도커
- database
- mongoDB
- 리눅스 컨테이너
- index
- 분산처리
- 샤드
- springboot
- redis
- docker
- NoSQL
- phpUnit
- MySQL
- 대규모 데이터 처리
- 쿠버네티스
- devops
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |