Skip to main content

[Github Actions] Slack bot & Slack webhook


Slack 활용하기


api.slack.com에서 Bot과 Webhook을 만들 수 있다.

Your Apps > Create New App > From scratch에서 Slack 서비스 같은 걸 만들 수 있다.

Bot 만들기

Features > OAuth & Permissions > Scopes > Bot Token Scopes > Add an OAuth scope에서 권한을 먼저 추가해야 한다.

그리고 Features > OAuth & Permissions > OAuth Tokens for Your Workspace에서 Install to Workspace 해주면 토큰이 나온다

Bot User OAuth Token을 Github Secret으로 지정하고 아래와 같이 사용할 수 있다.

/invite @bot이름

를 통해서 다른 채널에서 bot을 초대할 수 있다.

      - name: 📥 Notify on Slack when Success
if: success()
uses: slackapi/slack-github-action@v1.15.0
with:
channel-id: '슬랙 채널 아이디'
slack-message: 'Build succeeded! 🌞'
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}

Webhook 만들기

Basic Information에서 Add features and functionality(기능 페이지) 에서 Iconming Webhooks를 들어가서 webhook을 활성화 시켜준다.

그리고 밑에 Add New Webhhok to Workspace를 누르고 설정한 값에 따라 나온 url을 깃허브 시크릿에 저장하여 사용한다.

      - name: 📥 Notify on Slack when Success
if: success()
id: slack-success
uses: slackapi/slack-github-action@v1.24.0
with:
payload: |
{
"channel": "[slack 채널 아이디]",
"attachments": [
{
"color": "#36a64f",
"title": "Build in ${{ github.repository }}",
"title_link": "https://github.com/${{github.repository}}",
"text": "🚀 GitHub Action 성공",
"fields": [
{
"title": "Repository",
"value": "${{ github.repository }}",
"short": true
},
{
"title": "Version",
"value": "${{ github.ref_name }}",
"short": true
},
{
"title": "Branch",
"value": "${{ github.ref_name }}",
"short": true
},
{
"title": "Commit",
"value": "<https://github.com/${{ github.repository }}/commit/${{ github.sha }}|${{ github.sh }}>",
"short": true
},
{
"title": "Actions Log",
"value": "<https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}|Workflow Log>",
"short": true
}
]
}
]
}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK

이렇게 하나하나 정의해서 사용할 수도 있고

      - name: 📥 Notify on Slack when Success
uses: 8398a7/action-slack@v3
with:
status: ${{job.status}}
fields: repo,message,commit,author,action,eventName,ref,workflow,job,took,pullRequest
mention: here
if_mention: failure, cancelled
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK
if: always()

이렇게 market place에서 제공해주는 간단한 것을 사용하여 fields를 골라서 사용할 수도 있다.