πŸ–₯️ λ°±μ—”λ“œ/CICD

[CICD] ν‚€μ›Œλ“œ 기반 이슈 μ•Œλ¦Ό μžλ™ν™”

OR15A 2024. 3. 23. 01:48

 

3. κ°„λ‹¨ν•œ μ›Œν¬ν”Œλ‘œμš° λ§Œλ“€κΈ°

 

ν‚€μ›Œλ“œ 기반 이슈 μ•Œλ¦Ό μžλ™ν™” λ§Œλ“€κΈ°
  • μ΄μŠˆκ°€ 생성될 λ•Œ μ‹€ν–‰
    • issue event
    • types: [opened]
  • νŠΉμ • ν‚€μ›Œλ“œκ°€ ν¬ν•¨λ˜λ©΄ μŠ¬λž™μœΌλ‘œ κ³΅μœ ν•˜κΈ°
    • if critical -> μŠ¬λž™μ˜ critical-issue μ±„λ„λ‘œ 곡유
    • if cormal -> μŠ¬λž™μ˜ normal-issue μ±„λ„λ‘œ 곡유
    •  
  • ν‚€μ›Œλ“œλŠ” 변동사항이 생길 수 있음

 

λ³΅μž‘μ„±μ„ μ€„μ΄λŠ” 방법
  • ν‚€μ›Œλ“œ κ΄€λ¦¬ν•˜κΈ°
    • (X) κΉƒν—™μ•‘μ…˜ μ›Œν¬ν”Œλ‘œμš°μ—μ„œ 관리
    • (O) μ™ΈλΆ€μ—μ„œ ν‚€μ›Œλ“œ 관리    ex) keyword.txt
  • slack step μ‚¬μš© ꡬ쑰
    • ν‚€μ›Œλ“œλ§ŒνΌ μ‚¬μš©ν•˜λ©΄ 관리가 어렀움
    • slack step 1개둜 μ‚¬μš©ν•˜κΈ°
  • λ™μΌν•œ μŠ¬λž™ μ›Ήν›… 이름 μ‚¬μš©ν•˜κΈ°
    • λ™μΌν•œ μ‹œν¬λ¦Ώ 이름 μ‚¬μš©ν•˜κΈ°
    • ${{ secret.SLACK_WEBHOOK }}
  • ꡬ성
    • job 2개 μ‚¬μš©ν•˜κΈ°
      • job-1 : get keyword (keyword-list.txt μ‚¬μš©. 이λ₯˜ 제λͺ©μ΄ ν‚€μ›Œλ“œ λ¦¬μŠ€νŠΈμ— μžˆλ‹€λ©΄ κ·Έ 값을 μ•„μ›ƒν’‹μœΌλ‘œ ꡬ성)
      • job-2 : slack (get keyword의 아웃풋을 λ°›μ•„μ„œ environment둜 μ‚¬μš©)
  • μ΄μŠˆμ— λŒ€ν•œ Environmentλ§Œλ“€κΈ°
    • 각 Envieonmment μ•ˆμ— secret λ§Œλ“€κΈ°
    • 이슈 μ±„λ„μ˜ ν‚€μ›Œλ“œ - μŠ¬λž™ ν•΄λ‹Ή 채널 url 둜 secretλ§Œλ“€κΈ°

Environment

name: issue-notify

on:
  issues:
    types: [opened]

jobs:

  get-keyword:
    runs-on: ubuntu-latest
    outputs:
      level: ${{ steps.get-keyword.outputs.level }}
    steps:
    - name: checkout 
      uses: actions/checkout@v4
    - name: get keyword
      id: get-keyword
      run: |
        echo level=Undefined >> $GITHUB_OUTPUT
        
        keywords=$(cat keyword-list.txt)
        for keyword in $keywords; do
          if [[ "${{ github.event.issue.title }}" =~ "$keyword" ]]; then
            echo level=$keyword >> $GITHUB_OUTPUT
          fi
        done
    - name: get output
      run: |
        echo ${{ steps.get-keyword.outputs.level }}
  
  
  slack:
    needs: [get-keyword]
    if: needs.get-keyword.outputs.level != 'Undefined'
    runs-on: ubuntu-latest
    # environment: ${{ needs.get-keyword.outputs.level }}
    strategy:
      matrix:    # 맀트릭슀λ₯Ό μ‚¬μš©ν•˜λ©΄ μ‹œκ°μ μœΌλ‘œ μ–΄λ–€ ν™˜κ²½μ„ μ‚¬μš©ν–ˆλŠ”μ§€ νŒŒμ•…ν•  수 있음
        environment: ["${{ needs.get-keyword.outputs.level }}"]
    environment: ${{ matrix.environment }}
    steps:
    - name: slack 
      uses: slackapi/slack-github-action@v1.24.0
      with:
        payload: |
          {
            "attachments": [
              {
                "pretext": "issue alert message",
                "color": "28a745",
                "fields": [
                  {
                    "title": "Level : ${{ needs.get-keyword.outputs.level }}",
                    "short": true,
                    "value": "issue url : ${{ github.event.issue.html_url }}"
                  }
                ]
              }
            ]
          }
      env:
        SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
        SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK