slack-progress-bar-kjh


Nameslack-progress-bar-kjh JSON
Version 1.1.1 PyPI version JSON
download
home_pagehttps://github.com/JaeHeong/slack-progress-bar_kjh
SummaryModify from Michael Lizzi's slack_progress_bar. Thank you.
upload_time2024-08-08 09:50:07
maintainerNone
docs_urlNone
authorjaehyeong.kim
requires_python>=3.9
licenseNone
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # slack-progress-bar [[Downloads]](https://pypi.org/project/slack-progress-bar-kjh/)
진행상황을 시각화하여 슬랙으로 보여주는 파이썬 라이브러리 (파이썬 3.9이상)

![animated-gif](https://raw.githubusercontent.com/JaeHeong/slack-progress-bar_kjh/main/assets/slack-progress-bar.gif)

## 설치 방법
```bash
pip install slack-progress-bar-kjh
```

## 개요
- 슬랙으로 작업 진행 상황을 시각화하여 보여줄 수 있음
- 슬랙 커스텀 이모지를 활용하여 다양하게 표현 가능 (무엇이든 가능, 눈사람 굴리는 모습, 모래성 쌓는 모습 등...)
- 어떤 작업이 진행 중인지 함께 보여줄 수 있음


## 사용 방법
1. [Slack Apps API](https://api.slack.com/apps)에 접속하여 'Create New App'을 클릭한 후, 지시에 따라 새 앱을 처음부터 만드세요.
2. 'Features -> OAuth & Permissions'로 이동하여 다음 스코프를 'Bot Token Scopes'에 추가하세요: `chat:write`, `channels:manage`, `groups:write`, `im:write`, `mpim:write`.
3. 'Settings -> Install App'로 이동하여 'Install to Workspace'를 클릭하세요. 그런 다음 'Allow'를 클릭하세요.
4. 같은 페이지에서 생성된 'Bot User OAuth Token'을 복사하여 `SlackProgressBarKjh` 클래스의 `token` 필드에 사용하세요.
5. Slack 워크스페이스로 이동하여 회원 ID를 찾으세요(프로필을 클릭한 다음 '[...] -> Copy Member ID'를 클릭하여 찾을 수 있습니다). 이를 `SlackProgressBarKjh` 클래스의 `user_id` 필드에 사용하세요. (필요에 따라 채널ID도 사용 가능)
6. 위에서 찾은 `token`과 `user_id` 또는 채널 ID를 사용하여 진행 표시줄을 생성하고 업데이트하세요.
7. 커스텀 이모지를 추가하세요. [[기본 이모지 gif 다운로드]](https://github.com/JaeHeong/slack-progress-bar_kjh/tree/main/emoji)
    - ※ 필요 커스텀 이모지 (이름은 같아야 함)
        1. :walking_amongus: # 걷고 있는 이모지
        2. :left_spot: # 지나간 곳
        3. :right_spot: # 아직 안 간 곳
        4. :dead_amongus: # 완료 시 이모지
        5. :monster_amongus: # 목표 지점
```python
import os
from slack_progress_bar_kjh import SlackProgressBarKjh

BOT_TOKEN = os.getenv('BOT_TOKEN')
os.getenv('SLACK_MEMBER_ID')

# 작업 시작
progress_bar = SlackProgressBarKjh(token=self.BOT_TOKEN, user_id=self.SLACK_MEMBER_ID, total=100)

for i in range(100):
    try:
        # 작업 중...
        time.sleep(0.1)
        
        # 진행 상황 업데이트
        progress_bar.update(i+1)

        # 현재 상황 알려주기
        progress_bar.chat_update(f"{i}번 작업 완료")

        # 현재 진행률 가져오기
        progress_bar.get_progress()

    except Exception:
        progress_bar.error()
```


# 1.Docker를 활용하여 젠킨스 빌드 상황 실시간 추적
### (실제 작업 Dockerfile과 구분하기 위해 Jenkins 폴더에 생성, 젠킨스에서 Jenkinsfile path를 변경해주어야 함)
#### 1-1.젠킨스 워커 노드에 Docker로 빌드 상황을 추적하는 서비스를 만듦
- Jenkins/Dockerfile 생성
```Dockerfile
# Dockerfile
# Dockerfile
FROM python:3.9-slim

# Set working directory
WORKDIR /app

# Copy necessary files
COPY Jenkins/progress_tracker.py /app/

# Install dependencies
RUN pip install slack-progress-bar-kjh flask

# Expose port if needed
EXPOSE 5000

# Command to run the script
CMD ["python", "progress_tracker.py"]
```
- Jenkins/progress_tracker.py 생성
```python
# progress_tracker.py
import os
from flask import Flask, request
from slack_progress_bar_kjh import SlackProgressBarKjh

app = Flask(__name__)

BOT_TOKEN = os.getenv('BOT_TOKEN')
SLACK_MEMBER_ID = os.getenv('SLACK_MEMBER_ID')
progress_bar = SlackProgressBarKjh(token=BOT_TOKEN, user_id=SLACK_MEMBER_ID, total=100)
progress_state = {'progress': 0}

@app.route('/update-all', methods=['POST'])
def update_all():
    data = request.json
    progress = data.get('progress')
    message = data.get('message')
    update_progress(progress, message)
    return "Progress all updated", 200
    
@app.route('/update-progress', methods=['POST'])
def update_progress_route():
    data = request.json
    progress = data.get('progress')
    update_progress(progress=progress)
    return "Only progress updated", 200
    
@app.route('/update-message', methods=['POST'])
def update_message():
    data = request.json
    message = data.get('message')
    update_progress(message=message)
    return "Only message updated", 200
    
@app.route('/add-progress', methods=['POST'])
def add_progress():
    data = request.json
    progress = data.get('progress')
    add_progress_to_state(progress)
    return "Add progress updated", 200
    
@app.route('/get-progress', methods=['GET'])
def get_progress():
    return progress_state['progress']

def update_progress(progress=None, message=None):
    if progress is not None:
        progress_state['progress'] = progress
        progress_bar.update(progress)
    if message is not None:
        progress_bar.chat_update(message)
        
def add_progress_to_state(progress=0):
    progress_bar.add_progress(progress)
    progress_state['progress'] = progress_bar.get_progress()

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000)
```
- Jenkins/Jenkinsfile 생성
```groovy
// Jenkinsfile
pipeline {
    agent any
    environment {
        BOT_TOKEN = credentials('SLACK_BOT_TOKEN') // Slack Bot Token
        SLACK_MEMBER_ID = credentials('SLACK_MEMBER_ID') // Slack ID
        TRACKER_IMAGE = 'progress-tracker:latest' // 빌드할 Docker 젠킨스 트래커 이미지 이름
    }
    stages {
        stage('Jenkins Tracker - Build Docker Image') {
            steps {
                script {
                    // 젠킨스 진행 상황 추적 컨테이너 이미지 빌드
                    sh '''
                        sudo yum install -y python3 python3-pip
                        docker build -t ${TRACKER_IMAGE} -f Jenkins/Dockerfile .
                    '''
                }
            }
        }
        stage('Jenkins Tracker - Start Tracker') {
            steps {
                script {
                    // 젠킨스 진행 상황 추적 컨테이너 시작
                    sh '''
                        sudo docker run -d --name progress_tracker \
                        -e BOT_TOKEN=${BOT_TOKEN} \
                        -e SLACK_MEMBER_ID=${SLACK_MEMBER_ID} \
                        -p 5000:5000 ${TRACKER_IMAGE}
                        sleep 5
                    '''
                }
            }
        }
        stage('Build') {
            steps {
                script {
                    // 초기화 단계 진행률 업데이트
                    sh '''
                        curl -X POST -H "Content-Type: application/json" \
                        -d '{"progress": 10, "message": "슬랙과"}' \
                        http://localhost:5000/update
                    '''
                    // 진행률 업데이트
                    sh '''
                        curl -X POST -H "Content-Type: application/json" \
                        -d '{"progress": 20, "message": "젠킨스"}' \
                        http://localhost:5000/update
                    '''
                    // 진행률 업데이트
                    sh '''
                        curl -X POST -H "Content-Type: application/json" \
                        -d '{"progress": 30, "message": "연동을"}' \
                        http://localhost:5000/update
                    '''
                    // 진행률 업데이트
                    sh '''
                        curl -X POST -H "Content-Type: application/json" \
                        -d '{"progress": 40, "message": "테스트하고"}' \
                        http://localhost:5000/update
                    '''
                    // 진행률 업데이트
                    sh '''
                        curl -X POST -H "Content-Type: application/json" \
                        -d '{"progress": 50, "message": "있는"}' \
                        http://localhost:5000/update
                    '''
                    // 진행률 업데이트
                    sh '''
                        curl -X POST -H "Content-Type: application/json" \
                        -d '{"progress": 60, "message": "중 입니다."}' \
                        http://localhost:5000/update
                    '''
                    // 진행률 업데이트
                    sh '''
                        curl -X POST -H "Content-Type: application/json" \
                        -d '{"progress": 70, "message": "잘"}' \
                        http://localhost:5000/update
                    '''
                    // 진행률 업데이트
                    sh '''
                        curl -X POST -H "Content-Type: application/json" \
                        -d '{"progress": 80, "message": "되는 것"}' \
                        http://localhost:5000/update
                    '''
                    // 진행률 업데이트
                    sh '''
                        curl -X POST -H "Content-Type: application/json" \
                        -d '{"progress": 90, "message": "같아요."}' \
                        http://localhost:5000/update
                    '''
                }
            }
        }
        stage('Complete and Cleanup') {
            steps {
                script {
                    // Build 성공 후 최종 진행률 업데이트
                    sh '''
                        curl -X POST -H "Content-Type: application/json" \
                        -d '{"progress": 100, "message": "테스트 끝!!!"}' \
                        http://localhost:5000/update
                    '''
                }
            }
            post {
                always {
                    // Docker 컨테이너 종료 및 정리
                    sh '''
                        docker stop progress_tracker
                        docker rm progress_tracker
                    '''
                }
            }
        }
    }
}
```
# 2.docker build 실시간 진행 상황 추적하기
### (실제 작업 Dockerfile과 구분하기 위해 Jenkins 폴더에 생성, 젠킨스에서 Jenkinsfile path를 변경해주어야 함)
#### 2-1.위에 있는 컨테이너 생성 필요
#### 2-2.sh "(docker build --progress=plain -t test:latest . 2>&1) | tee Jenkins/build.log"로 bulid.log에 로그를 기록하고 실시간으로 감시해서 위의 컨테이너에게 알려주는 서비스 추가
```Dockerfile
# docker-compose.yml

```
```Dockerfile
# Dockerfile.tracker

```
```Dockerfile
# Dockerfile.monitor

```
```python
# monitor.py
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/JaeHeong/slack-progress-bar_kjh",
    "name": "slack-progress-bar-kjh",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": null,
    "author": "jaehyeong.kim",
    "author_email": "rlawogud970301@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/d8/30/b2aa381c044757accaf358ffd33dae9b3144090e86b4f3ea31ed85904ac1/slack_progress_bar_kjh-1.1.1.tar.gz",
    "platform": null,
    "description": "# slack-progress-bar [[Downloads]](https://pypi.org/project/slack-progress-bar-kjh/)\r\n\uc9c4\ud589\uc0c1\ud669\uc744 \uc2dc\uac01\ud654\ud558\uc5ec \uc2ac\ub799\uc73c\ub85c \ubcf4\uc5ec\uc8fc\ub294 \ud30c\uc774\uc36c \ub77c\uc774\ube0c\ub7ec\ub9ac (\ud30c\uc774\uc36c 3.9\uc774\uc0c1)\r\n\r\n![animated-gif](https://raw.githubusercontent.com/JaeHeong/slack-progress-bar_kjh/main/assets/slack-progress-bar.gif)\r\n\r\n## \uc124\uce58 \ubc29\ubc95\r\n```bash\r\npip install slack-progress-bar-kjh\r\n```\r\n\r\n## \uac1c\uc694\r\n- \uc2ac\ub799\uc73c\ub85c \uc791\uc5c5 \uc9c4\ud589 \uc0c1\ud669\uc744 \uc2dc\uac01\ud654\ud558\uc5ec \ubcf4\uc5ec\uc904 \uc218 \uc788\uc74c\r\n- \uc2ac\ub799 \ucee4\uc2a4\ud140 \uc774\ubaa8\uc9c0\ub97c \ud65c\uc6a9\ud558\uc5ec \ub2e4\uc591\ud558\uac8c \ud45c\ud604 \uac00\ub2a5 (\ubb34\uc5c7\uc774\ub4e0 \uac00\ub2a5, \ub208\uc0ac\ub78c \uad74\ub9ac\ub294 \ubaa8\uc2b5, \ubaa8\ub798\uc131 \uc313\ub294 \ubaa8\uc2b5 \ub4f1...)\r\n- \uc5b4\ub5a4 \uc791\uc5c5\uc774 \uc9c4\ud589 \uc911\uc778\uc9c0 \ud568\uaed8 \ubcf4\uc5ec\uc904 \uc218 \uc788\uc74c\r\n\r\n\r\n## \uc0ac\uc6a9 \ubc29\ubc95\r\n1. [Slack Apps API](https://api.slack.com/apps)\uc5d0 \uc811\uc18d\ud558\uc5ec 'Create New App'\uc744 \ud074\ub9ad\ud55c \ud6c4, \uc9c0\uc2dc\uc5d0 \ub530\ub77c \uc0c8 \uc571\uc744 \ucc98\uc74c\ubd80\ud130 \ub9cc\ub4dc\uc138\uc694.\r\n2. 'Features -> OAuth & Permissions'\ub85c \uc774\ub3d9\ud558\uc5ec \ub2e4\uc74c \uc2a4\ucf54\ud504\ub97c 'Bot Token Scopes'\uc5d0 \ucd94\uac00\ud558\uc138\uc694: `chat:write`, `channels:manage`, `groups:write`, `im:write`, `mpim:write`.\r\n3. 'Settings -> Install App'\ub85c \uc774\ub3d9\ud558\uc5ec 'Install to Workspace'\ub97c \ud074\ub9ad\ud558\uc138\uc694. \uadf8\ub7f0 \ub2e4\uc74c 'Allow'\ub97c \ud074\ub9ad\ud558\uc138\uc694.\r\n4. \uac19\uc740 \ud398\uc774\uc9c0\uc5d0\uc11c \uc0dd\uc131\ub41c 'Bot User OAuth Token'\uc744 \ubcf5\uc0ac\ud558\uc5ec `SlackProgressBarKjh` \ud074\ub798\uc2a4\uc758 `token` \ud544\ub4dc\uc5d0 \uc0ac\uc6a9\ud558\uc138\uc694.\r\n5. Slack \uc6cc\ud06c\uc2a4\ud398\uc774\uc2a4\ub85c \uc774\ub3d9\ud558\uc5ec \ud68c\uc6d0 ID\ub97c \ucc3e\uc73c\uc138\uc694(\ud504\ub85c\ud544\uc744 \ud074\ub9ad\ud55c \ub2e4\uc74c '[...] -> Copy Member ID'\ub97c \ud074\ub9ad\ud558\uc5ec \ucc3e\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4). \uc774\ub97c `SlackProgressBarKjh` \ud074\ub798\uc2a4\uc758 `user_id` \ud544\ub4dc\uc5d0 \uc0ac\uc6a9\ud558\uc138\uc694. (\ud544\uc694\uc5d0 \ub530\ub77c \ucc44\ub110ID\ub3c4 \uc0ac\uc6a9 \uac00\ub2a5)\r\n6. \uc704\uc5d0\uc11c \ucc3e\uc740 `token`\uacfc `user_id` \ub610\ub294 \ucc44\ub110 ID\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc9c4\ud589 \ud45c\uc2dc\uc904\uc744 \uc0dd\uc131\ud558\uace0 \uc5c5\ub370\uc774\ud2b8\ud558\uc138\uc694.\r\n7. \ucee4\uc2a4\ud140 \uc774\ubaa8\uc9c0\ub97c \ucd94\uac00\ud558\uc138\uc694. [[\uae30\ubcf8 \uc774\ubaa8\uc9c0 gif \ub2e4\uc6b4\ub85c\ub4dc]](https://github.com/JaeHeong/slack-progress-bar_kjh/tree/main/emoji)\r\n    - \u203b \ud544\uc694 \ucee4\uc2a4\ud140 \uc774\ubaa8\uc9c0 (\uc774\ub984\uc740 \uac19\uc544\uc57c \ud568)\r\n        1. :walking_amongus: # \uac77\uace0 \uc788\ub294 \uc774\ubaa8\uc9c0\r\n        2. :left_spot: # \uc9c0\ub098\uac04 \uacf3\r\n        3. :right_spot: # \uc544\uc9c1 \uc548 \uac04 \uacf3\r\n        4. :dead_amongus: # \uc644\ub8cc \uc2dc \uc774\ubaa8\uc9c0\r\n        5. :monster_amongus: # \ubaa9\ud45c \uc9c0\uc810\r\n```python\r\nimport os\r\nfrom slack_progress_bar_kjh import SlackProgressBarKjh\r\n\r\nBOT_TOKEN = os.getenv('BOT_TOKEN')\r\nos.getenv('SLACK_MEMBER_ID')\r\n\r\n# \uc791\uc5c5 \uc2dc\uc791\r\nprogress_bar = SlackProgressBarKjh(token=self.BOT_TOKEN, user_id=self.SLACK_MEMBER_ID, total=100)\r\n\r\nfor i in range(100):\r\n    try:\r\n        # \uc791\uc5c5 \uc911...\r\n        time.sleep(0.1)\r\n        \r\n        # \uc9c4\ud589 \uc0c1\ud669 \uc5c5\ub370\uc774\ud2b8\r\n        progress_bar.update(i+1)\r\n\r\n        # \ud604\uc7ac \uc0c1\ud669 \uc54c\ub824\uc8fc\uae30\r\n        progress_bar.chat_update(f\"{i}\ubc88 \uc791\uc5c5 \uc644\ub8cc\")\r\n\r\n        # \ud604\uc7ac \uc9c4\ud589\ub960 \uac00\uc838\uc624\uae30\r\n        progress_bar.get_progress()\r\n\r\n    except Exception:\r\n        progress_bar.error()\r\n```\r\n\r\n\r\n# 1.Docker\ub97c \ud65c\uc6a9\ud558\uc5ec \uc820\ud0a8\uc2a4 \ube4c\ub4dc \uc0c1\ud669 \uc2e4\uc2dc\uac04 \ucd94\uc801\r\n### (\uc2e4\uc81c \uc791\uc5c5 Dockerfile\uacfc \uad6c\ubd84\ud558\uae30 \uc704\ud574 Jenkins \ud3f4\ub354\uc5d0 \uc0dd\uc131, \uc820\ud0a8\uc2a4\uc5d0\uc11c Jenkinsfile path\ub97c \ubcc0\uacbd\ud574\uc8fc\uc5b4\uc57c \ud568)\r\n#### 1-1.\uc820\ud0a8\uc2a4 \uc6cc\ucee4 \ub178\ub4dc\uc5d0 Docker\ub85c \ube4c\ub4dc \uc0c1\ud669\uc744 \ucd94\uc801\ud558\ub294 \uc11c\ube44\uc2a4\ub97c \ub9cc\ub4e6\r\n- Jenkins/Dockerfile \uc0dd\uc131\r\n```Dockerfile\r\n# Dockerfile\r\n# Dockerfile\r\nFROM python:3.9-slim\r\n\r\n# Set working directory\r\nWORKDIR /app\r\n\r\n# Copy necessary files\r\nCOPY Jenkins/progress_tracker.py /app/\r\n\r\n# Install dependencies\r\nRUN pip install slack-progress-bar-kjh flask\r\n\r\n# Expose port if needed\r\nEXPOSE 5000\r\n\r\n# Command to run the script\r\nCMD [\"python\", \"progress_tracker.py\"]\r\n```\r\n- Jenkins/progress_tracker.py \uc0dd\uc131\r\n```python\r\n# progress_tracker.py\r\nimport os\r\nfrom flask import Flask, request\r\nfrom slack_progress_bar_kjh import SlackProgressBarKjh\r\n\r\napp = Flask(__name__)\r\n\r\nBOT_TOKEN = os.getenv('BOT_TOKEN')\r\nSLACK_MEMBER_ID = os.getenv('SLACK_MEMBER_ID')\r\nprogress_bar = SlackProgressBarKjh(token=BOT_TOKEN, user_id=SLACK_MEMBER_ID, total=100)\r\nprogress_state = {'progress': 0}\r\n\r\n@app.route('/update-all', methods=['POST'])\r\ndef update_all():\r\n    data = request.json\r\n    progress = data.get('progress')\r\n    message = data.get('message')\r\n    update_progress(progress, message)\r\n    return \"Progress all updated\", 200\r\n    \r\n@app.route('/update-progress', methods=['POST'])\r\ndef update_progress_route():\r\n    data = request.json\r\n    progress = data.get('progress')\r\n    update_progress(progress=progress)\r\n    return \"Only progress updated\", 200\r\n    \r\n@app.route('/update-message', methods=['POST'])\r\ndef update_message():\r\n    data = request.json\r\n    message = data.get('message')\r\n    update_progress(message=message)\r\n    return \"Only message updated\", 200\r\n    \r\n@app.route('/add-progress', methods=['POST'])\r\ndef add_progress():\r\n    data = request.json\r\n    progress = data.get('progress')\r\n    add_progress_to_state(progress)\r\n    return \"Add progress updated\", 200\r\n    \r\n@app.route('/get-progress', methods=['GET'])\r\ndef get_progress():\r\n    return progress_state['progress']\r\n\r\ndef update_progress(progress=None, message=None):\r\n    if progress is not None:\r\n        progress_state['progress'] = progress\r\n        progress_bar.update(progress)\r\n    if message is not None:\r\n        progress_bar.chat_update(message)\r\n        \r\ndef add_progress_to_state(progress=0):\r\n    progress_bar.add_progress(progress)\r\n    progress_state['progress'] = progress_bar.get_progress()\r\n\r\nif __name__ == \"__main__\":\r\n    app.run(host='0.0.0.0', port=5000)\r\n```\r\n- Jenkins/Jenkinsfile \uc0dd\uc131\r\n```groovy\r\n// Jenkinsfile\r\npipeline {\r\n    agent any\r\n    environment {\r\n        BOT_TOKEN = credentials('SLACK_BOT_TOKEN') // Slack Bot Token\r\n        SLACK_MEMBER_ID = credentials('SLACK_MEMBER_ID') // Slack ID\r\n        TRACKER_IMAGE = 'progress-tracker:latest' // \ube4c\ub4dc\ud560 Docker \uc820\ud0a8\uc2a4 \ud2b8\ub798\ucee4 \uc774\ubbf8\uc9c0 \uc774\ub984\r\n    }\r\n    stages {\r\n        stage('Jenkins Tracker - Build Docker Image') {\r\n            steps {\r\n                script {\r\n                    // \uc820\ud0a8\uc2a4 \uc9c4\ud589 \uc0c1\ud669 \ucd94\uc801 \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0 \ube4c\ub4dc\r\n                    sh '''\r\n                        sudo yum install -y python3 python3-pip\r\n                        docker build -t ${TRACKER_IMAGE} -f Jenkins/Dockerfile .\r\n                    '''\r\n                }\r\n            }\r\n        }\r\n        stage('Jenkins Tracker - Start Tracker') {\r\n            steps {\r\n                script {\r\n                    // \uc820\ud0a8\uc2a4 \uc9c4\ud589 \uc0c1\ud669 \ucd94\uc801 \ucee8\ud14c\uc774\ub108 \uc2dc\uc791\r\n                    sh '''\r\n                        sudo docker run -d --name progress_tracker \\\r\n                        -e BOT_TOKEN=${BOT_TOKEN} \\\r\n                        -e SLACK_MEMBER_ID=${SLACK_MEMBER_ID} \\\r\n                        -p 5000:5000 ${TRACKER_IMAGE}\r\n                        sleep 5\r\n                    '''\r\n                }\r\n            }\r\n        }\r\n        stage('Build') {\r\n            steps {\r\n                script {\r\n                    // \ucd08\uae30\ud654 \ub2e8\uacc4 \uc9c4\ud589\ub960 \uc5c5\ub370\uc774\ud2b8\r\n                    sh '''\r\n                        curl -X POST -H \"Content-Type: application/json\" \\\r\n                        -d '{\"progress\": 10, \"message\": \"\uc2ac\ub799\uacfc\"}' \\\r\n                        http://localhost:5000/update\r\n                    '''\r\n                    // \uc9c4\ud589\ub960 \uc5c5\ub370\uc774\ud2b8\r\n                    sh '''\r\n                        curl -X POST -H \"Content-Type: application/json\" \\\r\n                        -d '{\"progress\": 20, \"message\": \"\uc820\ud0a8\uc2a4\"}' \\\r\n                        http://localhost:5000/update\r\n                    '''\r\n                    // \uc9c4\ud589\ub960 \uc5c5\ub370\uc774\ud2b8\r\n                    sh '''\r\n                        curl -X POST -H \"Content-Type: application/json\" \\\r\n                        -d '{\"progress\": 30, \"message\": \"\uc5f0\ub3d9\uc744\"}' \\\r\n                        http://localhost:5000/update\r\n                    '''\r\n                    // \uc9c4\ud589\ub960 \uc5c5\ub370\uc774\ud2b8\r\n                    sh '''\r\n                        curl -X POST -H \"Content-Type: application/json\" \\\r\n                        -d '{\"progress\": 40, \"message\": \"\ud14c\uc2a4\ud2b8\ud558\uace0\"}' \\\r\n                        http://localhost:5000/update\r\n                    '''\r\n                    // \uc9c4\ud589\ub960 \uc5c5\ub370\uc774\ud2b8\r\n                    sh '''\r\n                        curl -X POST -H \"Content-Type: application/json\" \\\r\n                        -d '{\"progress\": 50, \"message\": \"\uc788\ub294\"}' \\\r\n                        http://localhost:5000/update\r\n                    '''\r\n                    // \uc9c4\ud589\ub960 \uc5c5\ub370\uc774\ud2b8\r\n                    sh '''\r\n                        curl -X POST -H \"Content-Type: application/json\" \\\r\n                        -d '{\"progress\": 60, \"message\": \"\uc911 \uc785\ub2c8\ub2e4.\"}' \\\r\n                        http://localhost:5000/update\r\n                    '''\r\n                    // \uc9c4\ud589\ub960 \uc5c5\ub370\uc774\ud2b8\r\n                    sh '''\r\n                        curl -X POST -H \"Content-Type: application/json\" \\\r\n                        -d '{\"progress\": 70, \"message\": \"\uc798\"}' \\\r\n                        http://localhost:5000/update\r\n                    '''\r\n                    // \uc9c4\ud589\ub960 \uc5c5\ub370\uc774\ud2b8\r\n                    sh '''\r\n                        curl -X POST -H \"Content-Type: application/json\" \\\r\n                        -d '{\"progress\": 80, \"message\": \"\ub418\ub294 \uac83\"}' \\\r\n                        http://localhost:5000/update\r\n                    '''\r\n                    // \uc9c4\ud589\ub960 \uc5c5\ub370\uc774\ud2b8\r\n                    sh '''\r\n                        curl -X POST -H \"Content-Type: application/json\" \\\r\n                        -d '{\"progress\": 90, \"message\": \"\uac19\uc544\uc694.\"}' \\\r\n                        http://localhost:5000/update\r\n                    '''\r\n                }\r\n            }\r\n        }\r\n        stage('Complete and Cleanup') {\r\n            steps {\r\n                script {\r\n                    // Build \uc131\uacf5 \ud6c4 \ucd5c\uc885 \uc9c4\ud589\ub960 \uc5c5\ub370\uc774\ud2b8\r\n                    sh '''\r\n                        curl -X POST -H \"Content-Type: application/json\" \\\r\n                        -d '{\"progress\": 100, \"message\": \"\ud14c\uc2a4\ud2b8 \ub05d!!!\"}' \\\r\n                        http://localhost:5000/update\r\n                    '''\r\n                }\r\n            }\r\n            post {\r\n                always {\r\n                    // Docker \ucee8\ud14c\uc774\ub108 \uc885\ub8cc \ubc0f \uc815\ub9ac\r\n                    sh '''\r\n                        docker stop progress_tracker\r\n                        docker rm progress_tracker\r\n                    '''\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n```\r\n# 2.docker build \uc2e4\uc2dc\uac04 \uc9c4\ud589 \uc0c1\ud669 \ucd94\uc801\ud558\uae30\r\n### (\uc2e4\uc81c \uc791\uc5c5 Dockerfile\uacfc \uad6c\ubd84\ud558\uae30 \uc704\ud574 Jenkins \ud3f4\ub354\uc5d0 \uc0dd\uc131, \uc820\ud0a8\uc2a4\uc5d0\uc11c Jenkinsfile path\ub97c \ubcc0\uacbd\ud574\uc8fc\uc5b4\uc57c \ud568)\r\n#### 2-1.\uc704\uc5d0 \uc788\ub294 \ucee8\ud14c\uc774\ub108 \uc0dd\uc131 \ud544\uc694\r\n#### 2-2.sh \"(docker build --progress=plain -t test:latest . 2>&1) | tee Jenkins/build.log\"\ub85c bulid.log\uc5d0 \ub85c\uadf8\ub97c \uae30\ub85d\ud558\uace0 \uc2e4\uc2dc\uac04\uc73c\ub85c \uac10\uc2dc\ud574\uc11c \uc704\uc758 \ucee8\ud14c\uc774\ub108\uc5d0\uac8c \uc54c\ub824\uc8fc\ub294 \uc11c\ube44\uc2a4 \ucd94\uac00\r\n```Dockerfile\r\n# docker-compose.yml\r\n\r\n```\r\n```Dockerfile\r\n# Dockerfile.tracker\r\n\r\n```\r\n```Dockerfile\r\n# Dockerfile.monitor\r\n\r\n```\r\n```python\r\n# monitor.py\r\n```\r\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Modify from Michael Lizzi's slack_progress_bar. Thank you.",
    "version": "1.1.1",
    "project_urls": {
        "Homepage": "https://github.com/JaeHeong/slack-progress-bar_kjh"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "72aad5a83f089e87ea5d1548e9194eb19adb4b5d574b3df2fd92f6451ab89ece",
                "md5": "e5dd82d2ce3c3ca76546126cd1a914c3",
                "sha256": "6161f6c8afbdc3d7a5486d60b05e149af26e65288634533a99a75b8d9eb05889"
            },
            "downloads": -1,
            "filename": "slack_progress_bar_kjh-1.1.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "e5dd82d2ce3c3ca76546126cd1a914c3",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 6958,
            "upload_time": "2024-08-08T09:50:05",
            "upload_time_iso_8601": "2024-08-08T09:50:05.805128Z",
            "url": "https://files.pythonhosted.org/packages/72/aa/d5a83f089e87ea5d1548e9194eb19adb4b5d574b3df2fd92f6451ab89ece/slack_progress_bar_kjh-1.1.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d830b2aa381c044757accaf358ffd33dae9b3144090e86b4f3ea31ed85904ac1",
                "md5": "b7095a6140cd41de7347a26096c37a36",
                "sha256": "702e9687a688ba9ba0c3488d1f7dfc5aa344fce61d94307b569de6dac1d7d67c"
            },
            "downloads": -1,
            "filename": "slack_progress_bar_kjh-1.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "b7095a6140cd41de7347a26096c37a36",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 8538,
            "upload_time": "2024-08-08T09:50:07",
            "upload_time_iso_8601": "2024-08-08T09:50:07.248946Z",
            "url": "https://files.pythonhosted.org/packages/d8/30/b2aa381c044757accaf358ffd33dae9b3144090e86b4f3ea31ed85904ac1/slack_progress_bar_kjh-1.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-08-08 09:50:07",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "JaeHeong",
    "github_project": "slack-progress-bar_kjh",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "slack-progress-bar-kjh"
}
        
Elapsed time: 0.43466s