728x90
Jenkins(이하 젠킨스)를 이용해 CI/CD를 구성하다 보면, 프로젝트 빌드를 위해 호스트에 직접 필요한 도구를 설치하는 경우가 있었다. 하지만 프로젝트가 많아지고, 각기 사용하는 언어 및 빌드 환경이 달라지게 되면 호스트 OS에 무분별하게 도구를 설치하는 상황이 생길 수 있고, 만약 조직 단위로 움직이는 회사인 경우 언어 선택 및 빌드 환경 수정 시 DevOps에게 불필요한 작업 리소스를 줄 수 있다. 젠킨스는 이런 문제를 인식하고 파이프라인에 도커를 사용하도록 지원한다.
플러그인 설치
젠킨스 파이프라인에서 도커를 사용하기 전 필요한 플러그인을 설치한다.
- Docker plugin
- Docker pipeline
그리고 호스트 OS에 도커를 사용할 수 있는 환경이 필요하다.
예시
pipeline {
agent {
docker { image 'node:20.9.0-alpine3.18' }
}
stages {
stage('Test') {
steps {
sh 'node --version'
}
}
}
}
agent 내 docker로 image를 선택하면 각 스텝에서 수행되는 명령어는 도커 컨테이너 내부에서 명령어가 실행된다.
docker run -t -d -u 109:114 -w /var/lib/jenkins/workspace/perfume-frontend \
-v /var/lib/jenkins/workspace/perfume-frontend:/var/lib/jenkins/workspace/perfume-frontend:rw,z \
-v /var/lib/jenkins/workspace/perfume-frontend@tmp:/var/lib/jenkins/workspace/perfume-frontend@tmp:rw,z \
-e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** node:21-alpine3.18 cat
젠킨스를 실행하면 다음 명령어가 보이는데 원리 자체는 젠킨스 워크스페이스와 컨테이너 내부 볼륨을 연결해 명령어를 수행하게 하는 것이다.
만약 특정 스테이지만 도커 내에서 실행되지 원한다면 다음과 같이 스크립트를 작성할 수 있다.
pipeline {
agent any
stages {
stage('Build') {
agent {
docker {
image 'gradle:8.2.0-jdk17-alpine'
// Run the container on the node specified at the
// top-level of the Pipeline, in the same workspace,
// rather than on a new node entirely:
reuseNode true
}
}
steps {
sh 'gradle --version'
}
}
}
}
추가적으로 이전 스테이지 워크 스페이스가 유지되기 원한다면 "reuseNode true" 옵션을 추가할 수 있다. 내 경우 프론트엔드 작업물을 배포하기 위해서 빌드 스테이지만 Node.js 이미지의 컨테이너 내에서 수행하도록 설정했다.
그리고 특정 이미지가 아닌 개별 구성한 Dockerfile을 사용하려면 다음과 같이 사용하면된다.
pipeline {
agent { dockerfile true }
stages {
stage('Test') {
steps {
sh 'node --version'
sh 'svn --version'
}
}
}
}
출처
'프로젝트' 카테고리의 다른 글
Peacock 프로젝트 노트 (0) | 2024.09.17 |
---|---|
도커로 Jenkins 설치하기 (0) | 2022.09.17 |