본문 바로가기
개발/오류기록

Jenkins Pipeline 중 Docker Command not found

by 그레이웅 2024. 10. 2. 01:52
반응형

 

 

1. 문제상황

- Jenkins Pipeline에 Docker를 테스트하는 도중 Jenkins console에서 다음과 같이 docker: command not found로 도커의 명령어를 실행하지 못하였다.

- 도커가 Mac os에서 잡히지 않는듯 싶었다. 하지만 터미널로 실행하면 문제가 없었다.

+ docker --version
/var/root/.jenkins/workspace/Jenkins-test-dev@tmp/durable-b74c3577/script.sh.copy: line 1: docker: command not found
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Build Docker Image)
Stage "Build Docker Image" skipped due to earlier failure(s)
[Pipeline] getContext
[Pipeline] }

 

 

2. 해결방안

- 원래 다른 아티클들을 읽다보면 리눅스 OS에선 다음과 같이 도커의 권한을 바꿔주는 명령어를 치라고 나온다.

sudo groupadd docker
sudo usermod -aG docker $USER
sudo newgrp docker

- 하지만 나는 Mac os에서 실행하였기 때문에 위에 명령어가 당연히 먹히지 않음

 

 

- 그러다가 서치중 아래의 글에서 똑같은 이슈를 찾았다.

 

https://medium.com/@bectorhimanshu/fix-for-the-error-docker-command-not-found-when-building-docker-image-using-jenkins-pipeline-on-db1bc5fa7976

 

Fix for the Error : Docker command not found when building docker image using Jenkins Pipeline on…

This is quite a common issue developers face while running docker build command in Jenkins pipeline script on macOS. The “Docker command…

medium.com

 

위 글을 간단하게 요약하고, 해결책을 보자면

위와 같은 상황은 일반적인 오류이고, Jenkins 에이전트에 Docker가 설치되어 있지 않거나, Docker 실행 파일을 시스템 PATH에서 찾을 수 없을 때 Jenkins 파이프라인에서 발생한다.
해결하려면 다음과 같은 순서를 따르면 된다.

 

 

1. MacOs 에서 Jenkins 설치 디렉토리를 찾는다. 터미널을 열고 아래 명령 실행

brew --prefix jenkins
/opt/homebrew/opt/jenkins-lts

 

- brew를 통해 Jenkins를 설치한 경우 brew --접두사 Jenkins 명령어를 사용하면 디렉토리 경로가 제공된다.

 

 

2. 경로 /opt/homebrew/opt/jenkins-lts에 존재하는 ' homebrew.mxcl.jenkins-lts.plist ' 파일을 찾는다.

- homebrew.mxcl.jenkins-lts.plist 에서 위 글을 보면 강조된 글씨를 변경 하라고 알려준다.

- 나는 java와 .war경로는 바꾸지 않았고, 아래 부분만 변경하였다.

- Users/himanshubector 는 Users/[os자신의 계정정보]를 입력하면 된다.

<string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/Docker.app/Contents/Resources/bin/:/Users/himanshubector/Library/Group\ Containers/group.com.docker/Applications/Docker.app/Contents/Resources/bin</string>

 

 

<?xml version=”1.0" encoding=”UTF-8"?>

<!DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version=”1.0">

<dict>

<key>Label</key>

<string>homebrew.mxcl.jenkins-lts</string>

<key>ProgramArguments</key>

<array>

<string>/opt/homebrew/opt/openjdk@17/bin/java</string>

<string>-Dmail.smtp.starttls.enable=true</string>

<string>-jar</string>

<string>/opt/homebrew/opt/jenkins-lts/libexec/jenkins.war</string>

<string> — httpListenAddress=127.0.0.1</string>

<string> — httpPort=8080</string>

</array>

<key>RunAtLoad</key>

<true/>

<key>EnvironmentVariables</key>

<dict>

<key>PATH</key>

<string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/Docker.app/Contents/Resources/bin/:/Users/himanshubector/Library/Group\ Containers/group.com.docker/Applications/Docker.app/Contents/Resources/bin</string>

</dict>

</dict>

</plist>

 

 

3. homebrew.mxcl.jenkins-lts.plist 파일의 내용을 저장한 후 아래 brew 명령을 사용하여 jenkins를 다시 시작한다.

brew services restart jenkins-lts

 

4. Jenkins 파이프라인 빌드 재실행

 

- 만약 이 방법으로도 되지 않는다면, 도커를 실행한 계정 root or 자신이 설정한 유저, 젠킨스를 실행한 계정 이 둘을 맞춰주면 해결된다.

 

- 찾아보니 젠킨스 공식 홈페이지에서도 Macos 에서 실행과 관련한 내용을 적어두었다.

https://www.jenkins.io/doc/book/pipeline/docker/#path-setup-for-mac-os-users

 

Using Docker with Pipeline

Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software

www.jenkins.io

 

 

반응형

댓글