반응형
이 오류 메시지는 Jenkins가 Kubernetes에서 생성한 Pod에서 지정된 python 컨테이너를 찾지 못했기 때문에 발생합니다. 이 문제는 Jenkins가 정의한 Pod 템플릿에서 python이라는 이름의 컨테이너를 찾을 수 없어서 발생하는 것입니다. 해결하기 위해서는 올바른 컨테이너 이름을 지정해 주어야 합니다.
원인 분석
오류 로그에서 Jenkins는 container python not found in pod python-pod-template-7qp2r-hvk1g라는 메시지를 보여주고 있습니다. 이는 Jenkins가 Pod 내에서 python이라는 이름을 가진 컨테이너를 찾지 못했다는 뜻입니다. 대신, 기본적으로 생성된 jnlp 컨테이너만 사용되고 있습니다. 이는 Jenkins의 Kubernetes 플러그인이 기본적으로 jnlp 컨테이너를 사용해 에이전트를 연결하는 방식으로 작동하기 때문입니다.
해결 방법
container('python') 블록 안에서 sh 명령을 실행하려면 먼저 파이프라인에서 해당 python 컨테이너를 명확히 정의해야 합니다. 아래와 같이 Pod 템플릿에 python 컨테이너를 추가하여 Jenkins가 이를 참조할 수 있게 해야 합니다.
수정된 파이프라인 예제
pipeline {
agent {
kubernetes {
label 'python-pod-template'
yaml '''
apiVersion: v1
kind: Pod
metadata:
labels:
app: python
spec:
containers:
- name: python
image: python:3.8
command:
- cat
tty: true
- name: jnlp
image: jenkins/inbound-agent:latest
resources:
requests:
memory: "256Mi"
cpu: "100m"
'''
}
}
stages {
stage('Check Python Version') {
steps {
container('python') { // 명확히 정의된 python 컨테이너에서 명령 실행
sh 'python3 --version'
}
}
}
}
}
설명
- yaml 블록:
- python이라는 이름을 가진 컨테이너를 명확히 정의했습니다. 이 컨테이너는 python:3.8 이미지를 사용하며 cat 명령을 실행하여 Pod가 종료되지 않고 대기 상태를 유지합니다.
- jnlp 컨테이너는 Jenkins 에이전트 컨테이너로, Jenkins와의 통신을 담당합니다. 기본적으로 jnlp 컨테이너는 Jenkins 에이전트를 연결하는 역할을 수행합니다.
- container('python'):
- container('python') 블록 내에서 python3 --version 명령이 실행되도록 하였습니다. 이는 Pod 내에서 python이라는 이름의 컨테이너를 지정하여 명령을 실행하는 방식입니다.
주요 포인트
- Jenkins에서 Kubernetes Pod를 정의할 때, 각 컨테이너는 고유한 이름을 가져야 하며, Jenkins 파이프라인에서 해당 이름을 사용해야 합니다.
- jnlp 컨테이너는 Jenkins 에이전트 통신을 위한 기본 컨테이너이므로 함께 정의해야 합니다.
- Python 작업을 실행하려면, 해당 컨테이너가 명확히 정의되어야 하며, 파이프라인에서 이를 참조하도록 구성해야 합니다.
이제 이 파이프라인을 실행하면, Kubernetes 클러스터에서 python-pod-template Pod가 생성되고, Python 버전을 확인하는 명령이 올바르게 실행될 것입니다.
반응형
'DevOps' 카테고리의 다른 글
(유튜브)컴공 학생, 신입, Jr. S/W 엔지니어들이 꼭 알았으면 하는 것! (0) | 2024.08.15 |
---|