# slack-progress-bar [[Downloads]](https://pypi.org/project/slack-progress-bar-kjh/)
진행상황을 시각화하여 슬랙으로 보여주는 파이썬 라이브러리 (파이썬 3.9이상)

## 설치 방법
```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\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"
}