Tech story/Cloud

What is DevOps? - Slack으로 협업하기

kt cloud 테크블로그 2024. 11. 13. 15:59

[kt cloud DevOps팀 이효원 님]

 

What is DevOps? - Slack으로 협업하기

 

1. DevOps에서 Communication Tools의 필요성

DevOps는 개발(Development)과 운영(Operations)을 통합하여 소프트웨어 개발과 배포를 신속하게 진행할 수 있도록 돕는 개발 방법론입니다.

이를 위해서는 팀 간 긴밀한 소통과 협업이 중요합니다.

DevOps 환경에서는 개발자, 운영 팀, 품질 보증 팀 등 다양한 역할이 참여하기 때문에

각기 다른 팀이 목표를 공유하고 실시간으로 정보를 주고 받으며 이슈를 빠르게 해결하기 위해서는 효과적인 커뮤니케이션 도구가 필요합니다.

  • 효율적인 이슈 관리: 개발 및 운영 중 발생하는 이슈를 실시간으로 공유하고, 이를 신속히 해결할 수 있습니다.
  • 프로젝트 진행 상황 파악: 프로젝트의 현재 상태, 진척도, 문제점을 전 팀원이 쉽게 이해하고 대응할 수 있습니다.
  • 투명한 정보 공유: 프로젝트의 중요한 변경 사항, 배포 일정 등을 공유하여 예기치 않은 오류나 중복 작업을 줄입니다.
  • 팀원 간의 신뢰 구축: 투명한 정보 공유를 통해 각 팀원은 자신의 역할을 이해하고, 원활하게 협업할 수 있습니다.

 

2. DevOps Communication Tools

다양한 커뮤니케이션 도구가 존재하지만, DevOps 환경에서는 프로젝트 관리와 협업을 효율적으로 지원하는 도구들이 특히 유용합니다.

DevOps에서 널리 사용되는 주요 커뮤니케이션 도구의 특징과 장단점을 알아보겠습니다.

 

Jira

Jira는 Atlassian에서 제공하는 프로젝트 관리 도구로, 따라서 DevOps 환경에서 애자일 개발을 적용할 때 효과적입니다.

주요 기능으로는 스프린트 관리, Kanban 및 Scrum 보드 제공, 워크플로우 커스터마이징, 타임 트래킹, 이슈 트래킹, 보고서 생성 등이 있습니다.

  • 장점
    • 다양한 플러그인과 통합: Git, Slack, Jenkins 등 여러 DevOps 도구와의 연동이 가능해 유연한 환경을 제공합니다.
    • 강력한 이슈 트래킹 기능: 복잡한 워크플로우도 Jira의 커스터마이징 기능을 통해 효과적으로 관리할 수 있습니다.
    • 애자일 프로세스 지원: 애자일 보드를 활용한 백로그 관리와 스프린트 계획이 가능해, 반복적이고 점진적인 개발에 적합합니다.
  • 단점
    • 초기 설정과 학습 곡선: 기능이 많아 초보자는 설정과 적응이 어려울 수 있습니다.
    • 비용 부담: 많은 사용자를 포함할 경우 비용이 증가하여 소규모 팀에서는 부담이 될 수 있습니다.

 

Confluence

Confluence는 Atlassian의 문서화 도구로, 팀 간의 정보 공유와 지식 관리에 중점을 둔 플랫폼입니다.

실시간 협업 문서 작성, 문서 관리 및 버전 관리, 템플릿 제공, Jira와의 통합 등의 기능을 제공함으로써

프로젝트 계획, 개발 문서, 회의 노트 등을 정리하고 관리하는 데 유용합니다.

  • 장점:
    • 직관적인 UI: 사용이 쉽고 직관적인 인터페이스로 누구나 쉽게 문서를 작성하고 관리할 수 있습니다.
    • 실시간 협업 지원: 문서의 실시간 편집과 댓글 기능을 통해 팀 간 협업이 원활합니다.
    • 다양한 템플릿 제공: 프로젝트 계획서, 회의 노트, 요구 사항 문서 등 다양한 템플릿을 제공하여 문서 작업 시간을 절약할 수 있습니다.
    • Jira와의 원활한 통합: Confluence와 Jira를 연동하여 이슈를 문서화하고, 문서와 개발 작업을 연결할 수 있습니다.
  • 단점:
    • 제한된 디자인: 문서 디자인 옵션이 제한적이어서, 복잡한 문서 포맷에는 다소 불편할 수 있습니다.
    • 비용 문제: Jira와 마찬가지로 많은 사용자가 이용할 경우 비용이 부담될 수 있습니다.

 

Azure Boards

Azure Boards는 Microsoft의 Azure DevOps 서비스 중 하나로,

작업 항목 관리, Kanban 및 Scrum 보드 제공, 타임라인 보기, GitHub와의 통합, 자동화된 알림 등의 기능을 지원합니다.

특히, Azure DevOps와의 통합이 용이하여 Microsoft 생태계를 이용하는 팀에 적합합니다.

 

  • 장점:
    • Azure DevOps 통합: Azure Pipelines, Repos, Test Plans 등 다른 Azure DevOps 서비스와 원활하게 연동됩니다.
    • GitHub와의 통합: GitHub와 연결하여 코드 변경 사항을 작업 항목에 자동으로 연결할 수 있습니다.
    • 커스터마이징 가능: 워크플로우와 필드 구성을 자유롭게 설정할 수 있어 유연한 프로젝트 관리를 지원합니다.
  • 단점:
    • Microsoft 생태계에 종속적: 다른 도구와의 호환성이 다소 제한적이며, Azure DevOps 외부 사용자에게는 접근성이 낮을 수 있습니다.
    • 복잡한 설정 과정: 처음 사용하거나 적응하는 데 시간이 소요될 수 있습니다.

Slack

Slack은 팀 간 실시간 소통을 위한 메신저 도구로, 다양한 DevOps 도구와의 연동을 통해 커뮤니케이션 허브 역할을 합니다.

채널 기반의 대화 관리, 메시지 검색, 파일 공유, 알림 및 미팅 통합, 다양한 DevOps 도구와의 연동 등의 기능을 제공함으로써

각 DevOps 팀이 Slack을 통해 실시간으로 정보와 피드백을 주고 받으며 빠르게 협업할 수 있도록 지원합니다.

 

  • 장점:
    • 실시간 커뮤니케이션: 팀원 간 즉각적인 피드백과 소통이 가능해, 빠른 문제 해결과 정보 공유가 가능합니다.
    • 다양한 외부 서비스 연동: Jenkins, GitHub, Jira 등과 연동하여 알림을 수신하거나 명령을 실행할 수 있습니다.
    • 채널 관리: 채널별로 대화 주제를 분리할 수 있어, 프로젝트별, 팀별 커뮤니케이션을 효과적으로 관리할 수 있습니다.
    • 봇 및 자동화 지원: Slackbot 및 워크플로우 빌더를 통해 자동화 기능을 설정하여 반복 작업을 줄일 수 있습니다.
  • 단점:
    • Push 알림 과다: 다양한 채널에서 알림이 자주 발생할 수 있으며, 관리하지 않으면 집중력이 분산될 수 있습니다.
    • 메시지 보관 제한: 무료 버전은 메시지 보관 제한이 있어, 오랜 기간의 메시지 기록이 필요할 경우 유료 요금제로 업그레이드해야 합니다.

이 외에도 다양한 DevOps Communication Tool이 있어 도구 선택 시 여러 관점에서의 고민이 필요합니다.

  1. 프로젝트 규모
    : 소규모 팀의 경우 Slack과 같은 메신저 중심 도구가 유리할 수 있으며,
    대규모 팀이나 장기 프로젝트에는 Jira와 Confluence와 같은 관리 기능이 풍부한 도구가 적합합니다.
  2. 예산
    : 무료 버전과 유료 버전의 기능 차이가 크므로, 팀 예산에 따라 선택이 필요합니다.
    Jira, Confluence, Azure Boards는 인원 수에 따라 비용이 증가할 수 있습니다.
  3. 사용 편의성
    : 직관적인 UI와 사용 편의성이 중요합니다.
    복잡한 기능보다는 팀이 쉽게 적응할 수 있는 도구가 더 효율적일 수 있습니다.
  4. 도구 간 통합
    : 프로젝트 내 여러 도구를 사용하는 경우, 다양한 DevOps 도구와의 연동을 고려해야 합니다.
    Slack이나 Azure Boards는 타 도구와의 연동성이 강점입니다.
  5. 보안과 접근 제어
    : DevOps 환경에서는 민감한 정보와 권한 관리가 중요하므로, 보안 설정이 중요한 요소입니다.
    Jira, Confluence, Azure Boards는 강력한 보안과 접근 제어 기능을 제공합니다.

 

3. 예제: CI 연동을 통한 Slack Notification

효과적인 DevOps 커뮤니케이션 도구는 팀 간 협업을 강화하고 프로젝트의 효율성을 크게 향상시킬 수 있습니다.

Jira와 Confluence는 애자일 및 문서화를 강화하는데 적합하며,

Azure Boards는 Microsoft 생태계에서의 통합성을,

Slack은 실시간 소통과 다양한 도구와의 연동성을 제공합니다.

 

kt cloud은 Jira와 Confluence를 사용하여 Agile하게 프로젝트를 진행하고

Slack을 사용하여 신속하고 효율적인 협업을 수행하고 있습니다.

 

이번 파트에서는 kt cloud의 CI Tool인 Github Action과 실시간 소통 Tool인 Slack을 연동함으로써

프로젝트 과정에서 발생한 이벤트를 추적하고 관리하는 예제를 작성해 보겠습니다.

 

Slack Incoming Webhook & Secret

Slack에서 알람을 받으려면 사전 작업이 필요합니다.

Slack Incoming Webhook을 생성하고, 해당 URL과 알람 받을 Slack 채널의 ID 값을 Github Action Secret에 저장하는 과정입니다.

https://api.slack.com/ > Your Apps” 메뉴에 접속하면 하단 이미지와 같이 현재 보유하고 계신 Slack App 리스트를 조회하실 수 있습니다.

우측 상단의 “Create New App“ 버튼을 누르시고 원하는 이름으로 앱을 생성해주세요!

 

 

생성한 앱을 클릭하고 “Features > Incoming Webhooks > Webhook URLs for Your Workspace > Add New Webhook to Workspace”에 접속해서 Incoming Webhook을 생성합니다.

 

또한 연동할 Slack 채널을 선택합니다.

kt cloud는 데이터 보호를 위해 애플리케이션 연동 시 Slack 관리자의 승인 과정을 거치지만

Plain Slack은 별도 절차 없이 바로 Slack 채널에 연결할 수 있습니다.

 

 

생성한 Incoming Webhook은 이후 Github에서 이벤트 발생 시 알람을 전달하는 Action 스크립트에서 사용됩니다.

Github Secret에 생성한 Webhook URL과 Slack 채널의 ID를 추가합니다.

연동을 희망하는 Slack 채널의 “정보“ 탭을 누르고 최하단에서 채널 ID를 확인하실 수 있습니다.

 

 

Github Action Workflow 실행 결과 알람

Slack과 Github의 연동을 마쳤으니, 이번에는 Github에서 Slack에 알람을 보내는 스크립트를 작성해 보겠습니다.

이벤트를 확인하고 싶은 Repository에서 .github/workflows/slack-notification.yml 파일을 생성합니다.

Repository 내에서 CI Action이 정상적으로 수행될 경우, 해당 Action의 정보를 Slack으로 알리는 Step을 작성합니다.

    steps:
      - name: Workflow Succeed
        if: success()
        id: slack-success
        uses: slackapi/slack-github-action@v1.24.0

 

해당 Step이 실행되기를 희망하는 경우를 “if“ 옵션으로 작성하고

Slack에 알람을 보내는 “slack-github-action“ Action을 Marketplace에서 가져옵니다.

        with:
          payload: |
            {
              "channel": "C07SR8GTMGB",

 

Slack에 전송할 알람의 콘텐츠를 작성합니다.

Payload는 “channel“과 “attachments“로 구성됩니다.

  • channel: 알람 받을 Slack Channel ID
  • attachments: Slack에 보낼 알람 내용

위에서 확인했던 “#github-devops-webhook“ 채널의 ID를 기입했습니다!

 

"attachments": [
                {
                  "color": "#ff00ff", 
                  "title": "Workflow ${{ github.workflow }}",
                  "title_link": "https://github.com/${{github.repository}}/actions",

 

그 다음에는 Slack 알람에서 확인하고 싶은 정보를 작성합니다.

성공/실패 여부를 직관적으로 조회하기 위한 색상 옵션을 추가하고 알람 Title을 작성합니다.

Title은 알람 콘텐츠 최상단에 큰 폰트로 위치하고, 필요할 경우 “title_link“ 옵션을 사용해서 하이퍼링크를 추가할 수 있습니다.

예제에서는 Workflow 이름을 알려주는 Title을 작성하고 Workflow Action으로 연결되는 하이퍼링크를 걸었습니다.

 

Title 하단에는 실제 알람으로 전달 받을 내용을 기입합니다.

“field“ 옵션을 사용해서 구분하며,

하위에는 각 제목(“title“)과 이에 들어갈 값(“value“), 그리고 알람 화면에서 내용을 조회하는 방식(“short“)으로 구성됩니다.

 

                  "fields": [
                    {
                      "title": "Repository",
                      "value": "${{ github.repository }}",
                      "short": true
                    },
                    {
                      "title": "Tag",
                      "value": "${{ github.ref_name }}",
                      "short": true
                    },
                    {
                      "title": "Workflow Author",
                      "value": "${{ github.actor }}",
                      "short": true
                    },
                    {
                      "title": "Status",
                      "value": "${{ job.status }}",
                      "short": true
                    }
                  ]      
                }
              ]
            }

 

해당 예제는 총 4개의 알람 Field로 구성됩니다.

  • Repository: Action Workflow를 실행한 레파지토리
  • Tag: Workflow를 실행한 Branch 명
  • Workflow Author: Workflow를 실행한 사람 이름
  • Status: Workflow 성공/실패 여부

 

“value“에는 알람으로 전달할 데이터를 명시합니다.

이 때 Github 환경 변수 외 추가 설정이 필요할 경우, env 기능을 사용해 환경 변수로 정의하여 사용합니다.

 

“short“에는 true, false 두 가지 값을 기입할 수 있습니다.

true 값을 사용하면 1행 2열로 알람을 구성하는 반면,

false 값을 사용하면 1행 1열로 한 줄에는 하나의 내용만 기입합니다.

env:
          SLACK_WEBHOOK_URL: "https://hooks.slack.com/services/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"
          SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK

 

알람 콘텐츠 구성을 완료하면 해당 알람을 어떤 Slack 채널로 보낼지, Slack Incoming Webhook URL과 Webhook Type을 작성해 줍니다.

 

 

해당 예제를 실행하면 연동한 “#github-devops-webhook“ Slack 채널에서

“kt-cloud-org-example/sddc-gateway“ 레파지토리 내 “slack-notfication“ 워크플로우 실행 결과를 명시한 알람을 수신하실 수 있습니다.

 

Github Commit 결과 알람

PM 분들을 위해 Github Repository 내에서 Commit Push가 발생할 경우, 이에 대한 Commit 세부 정보를 조회하는 Action 스크립트 예제를 작성해 보겠습니다.

Commit Push 외에도 Pull Request 등 다양한 이벤트에 대해서 활용 가능합니다.

steps:
      - name: Notify Slack on Success
        # if: success()
        id: slack-test
        uses: slackapi/slack-github-action@v1.24.0
        with:
          payload: |
            {
              "channel": "C07SR8GTMGB",
              "attachments": [
                {
                  "color": "#36a64f", 
                  "title": "${{ github.repository }}",
                  "title_link": "https://github.com/${{github.repository}}", 
                  "text": "Commit ${{ github.event.head_commit.id }}",

 

해당 Step은 "C07SR8GTMGB" Slack 채널을 대상으로

"#36a64f" 색상 옵션과 함께 Repository 명을 Title로 가집니다.

이 때 동일하게 Title 하이퍼링크를 Repository로 설정했고, 추가로 “text“ 옵션을 사용함으로써 Title 하위에 “Commit ID“를 서술하는 Description을 한 줄 추가했습니다.

                  "fields": [
                    {
                      "title": "Repository",
                      "value": "${{ github.repository }}",
                     "short": true
                    },
                    {
                      "title": "Tag",
                      "value": "${{ github.ref_name }}",
                      "short": true
                    },
                    {
                      "title": "Author",
                      "value": "${{ github.event.head_commit.author.name }}",
                     "short": true
                    },
                    {
                      "title": "Message",
                      "value": "${{ github.event.head_commit.message }}",
                      "short": true
                    },
                    {
                      "title": "Status",
                      "value": "${{ job.status }}",
                      "short": true
                    },
                    {
                      "title": "Timestamp",
                      "value": "${{ github.event.head_commit.timestamp }}",
                      "short": true
                    }
                  ]      
                }
              ]
            }

 

Slack 알람 콘텐츠 Field는 총 6가지로 구성했습니다.

  • “Repository“: Push가 일어난 Repository 명
  • “Tag“: Push가 일어난 Branch 명
  • “Author“: Commit을 Push한 사람의 이름
  • “Message“: Commit 메시지
  • “Status“: Push 성공/실패 여부
  • “Timestamp“: Push 발생 시간

 

env:
          SLACK_WEBHOOK_URL: "https://hooks.slack.com/services/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"
          SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK

 

알람 Step의 환경변수로 Slack Incoming Webhook URL과 Webhook Type(“INCOMING_WEBHOOK“ 고정)을 작성합니다.

 

해당 예제를 실행하면 연동한 “#github-devops-webhook“ Slack 채널에서

“kt-cloud-org-example/sddc-gateway“ 레파지토리 내 Push 정보를

Commit ID, Branch, Message 정보와 Push한 사람 정보, Push 이벤트 성공 여부와 이벤트 발생 시간 구성으로 알람 받으실 수 있습니다.

 

 

마무리

다양한 DevOps Communication Tools 중 Slack은

실시간 채팅이 가능하고 허들을 통한 온라인 미팅 등 유용한 업무 기능이 많이 탑재되어 있어 개발자들의 사랑을 받고 있습니다.

DevOps 협업 과정에서 동료의 소스 변경 여부나 CI/CD 작업 현황을 확인하고 싶지만

매번 Git UI에 접속하기는 번거로우셨다면 Github Action과 Slack을 연동하여 자동 알람 기능을 추가해 보세요!

 

 

참고/출처