sswu
Jenkins 이미지 안에서 도커 실행
hi._.0seon
2023. 6. 8. 00:04
반응형
Jenkins 를 이용하여 CI/CD를 할 때, Docker를 사용하는 상황이라면 Jenkins 가 설치된 인스턴스에 이미 Docker 가 깔려있지만 Jenkins 이미지 안에는 Docker 가 없기 때문에 docker 실행시 오류가 발생한다.
이를 해결하기 위해 Jenkins 이미지 안에 도커를 또 깔아야 할까?
아니다.
호스트 컴퓨터에 깔려있는 도커 데몬과, 젠킨스 컨테이너 내에 존재하는 도커 클라이언트가 통신할 수 있도록 해주면 된다.
1. docker 설치
sudo wget -qO- https://get.docker.com/ | sh
sudo usermod -aG docker ${USER} # docker 실행을 sudo 권한 없이 할 수 있게 해줌
sudo systemctl start docker
sudo systemctl enable docker
logout
2. Jenkins 설치
- Jenkins Docker 이미지 빌드
docker build -t myjenkins 로 이미지 빌드
- Jenkins 컨테이너 실행
docker run -d --name myjenkins -p 8080:8080 --restart=always
-v jenkins-home:/var/jenkins_home
-v /var/run/docker.sock:/var/run/docker.sock
--group-add $(stat -c '%g' /var/run/docker.sock) myjenkins
- -v /var/run/docker.sock:/var/run/docker.sock
- 소켓 연결
- 호스트 소켓과 컨테이너 안의 소켓을 연결 (도커 안에서 도커를 실행)
- 젠킨스 컨테이너에서 호스트의 Docker engine 을 활용하기 위해서
- docker volume: bind-mount 방식
- -v jenkins-home:/var/jenkins_home
- docker volume 방식
3. Docker 이미지로 배포하기
- Jenkinsfile 작성
- stage('여기는 원하는 이름으로 작성') {
여기는 Jenkinsfile 명령 사용
}
- stage('여기는 원하는 이름으로 작성') {
node {
def app
stage('Clone repository') {
git 'https://github.com/AYoungSn/jenkins-test.git'
}
stage('Build image') {
app = docker.build("dudtjs0920/sswu-opensource") // docker ID, docker repo
}
stage('Test image') {
app.inside {
sh 'make test'
}
}
stage('Push image') {
docker.withRegistry('https://registry.hub.docker.com', 'dudtjs0920') {
app.push("${env.BUILD_NUMBER}")
app.push("latest")
}
}
}
- Dockerfile 작성
FROM ubuntu:20.04
RUN apt-get update && apt-get -y install build-essential && mkdir -p /app
COPY . /app/
WORKDIR /app/
CMD make
반응형