일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 빅데이터분석기사
- esp32
- matter
- 라즈베리파이
- 나스닥
- 국내주식
- RS-485
- SK텔레콤
- Apple
- cluster
- Home Assistant
- 미국주식
- ConnectedHomeIP
- 애플
- raspberry pi
- 공모주
- 매터
- homebridge
- 배당
- 홈네트워크
- 월패드
- 현대통신
- 해외주식
- 힐스테이트 광교산
- 파이썬
- MQTT
- Python
- Espressif
- 주식
- Bestin
- Today
- Total
YOGYUI
Jenkins::Pipeline - Slave node 오프라인 시 Stage 무시하기 본문
Jenkin Pipeline- Skip stage when slave node (agent) is offline
소스코드 빌드(build) 및 배포(release) 자동화 툴로 Jenkins를 유용하게 사용하고 있다
바이너리 빌드나 Unit Test를 master 노드가 아닌 다른 환경 (리눅스 환경 등)에서 진행해야 할 경우가 있는데, Pipeline에서 slave node 이름 기반으로 다음과 같이 구축해서 사용하고 있었다
pseudo-script
pipeline {
agent any
environment {
SLAVE_NODE_NAME = "slave_node"
}
stages {
stage('Build') {
parallel {
stage('Master') {
steps { ... }
}
stage('Slave') {
agent { label "${env.SLAVE_NODE_NAME}" }
steps { ... }
}
}
}
}
}
그런데, slave node가 offline (장비 전원이 꺼졌거나, 네트워크 연결이 끊어졌거나 등)되었을 경우 slave node에서 돌아가는 stage가 자동으로 무시되지 않고 slave가 연결될 때까지 무한 대기하게 되는 문제를 최근에 발견했다... (무지성이 이렇게나 무서운 겁니다)
timeout 등의 옵션을 줘도 되겠지만, step별로 timeout 파라미터를 다르게 설정하는 것도 귀찮고 해서 다른 방법을 찾아보니, pipeline에서 nodesByLabel 함수를 호출하면 특정 이름을 가진 노드를 배열(array)로 반환해준다고 한다!
가이드를 따라 위의 pipeline 스크립트를 다음과 같이 수정해봤다
pipeline {
agent any
environment {
SLAVE_NODE_NAME = "slave_node"
}
stages {
stage('Build') {
parallel {
stage('Master') {
steps { ... }
}
stage('Slave') {
when {
beforeAgent true
expression {
return nodesByLabel(env.SLAVE_NODE_NAME).size() > 0
}
}
agent { label "${env.SLAVE_NODE_NAME}" }
steps { ... }
}
}
}
}
}
when 문을 추가해서 slave node에서의 작업 수행 이전에 nodesByLabel 함수 리턴 배열의 크기가 0 이상인지를 확인해서 slave node가 online 상태인지를 체크할 수 있게 해줬다
slave node를 offline으로 만들어준 뒤 task를 실행해보니 'Slave' 스테이지가 무난하게 무시(skip)되는 것을 확인할 수 있었다~ Good!
끝~!
[Reference]
https://stackoverflow.com/questions/38231871/skip-jenkins-pipeline-steps-if-node-is-offline
'Software > Etc' 카테고리의 다른 글
Apple Silicon 맥북에서 Ubuntu 22.04 구동하기 (VMware) (0) | 2024.04.21 |
---|---|
Linux :: Real-Time Ubuntu 22.04 LTS (PREEMPT_RT) (5) | 2023.05.08 |
Linux - USB Device 접근권한 영구변경 (chmod permanently) (0) | 2022.04.04 |
Windows Batch Script::배치 파일의 경로 얻기 (0) | 2021.11.12 |
Tistory::notify-Notice_Blog_New 유입링크 해석하기 (2) | 2021.10.29 |