Jenkins 구축 관련해서 아래의 블로그를 참고!
https://realyun99.tistory.com/199
Jekins Pipeline
- Jenkins를 사용하여 CD Pipeline 을 구현하고 통합하는 것을 지원하는 플러그인의 집합
- Pipeline DSL 구문을 통해 코드로 전송 파이프라인을 모델링하기 위한 확장 가능한 자동화 서버를 갖추고 있음
- Jenkinsfile 소스에 해당 내용을 넣고 경로를 보여주면 됨
- Pipeline에 대한 자세한 내용은 해당 블로그를 참고하면 좋을 듯 싶다!
Jenkins Pipeline 프로젝트 생성
- project configure
- 지금 빌드 클릭
Docker Pipeline 프로젝트 생성
- docker pipeline plugin 설치 후 프로젝트 생성
- project configure
- 지금 빌드 클릭
위의 단계들을 진행하면서 제일 중요한건 Jenkinsfile안의 코드다! 두 프로젝트의 차이점도 Jenkinsfile 밖에 없다.
해당 파일들의 내용을 파헤쳐보자.
Jenkinsfile: Jenkins Pipeline ver
node {
def commit_id
stage('Preparation') {
checkout scm
sh "git rev-parse --short HEAD > .git/commit-id"
commit_id = readFile('.git/commit-id').trim()
}
stage('test') {
nodejs(nodeJSInstallationName: 'nodejs') {
sh 'npm install --only=dev'
sh 'npm test'
}
}
stage('docker build/push') {
docker.withRegistry('https://index.docker.io/v2/', 'dockerhub') {
def app = docker.build("realyun99/docker-nodejs-demo:${commit_id}", '.').push()
}
}
}
Jenkinsfile.v2: Docker Pipeline ver
node {
def commit_id
stage('Preparation') {
checkout scm
sh "git rev-parse --short HEAD > .git/commit-id"
commit_id = readFile('.git/commit-id').trim()
}
stage('test') {
def myTestContainer = docker.image('node:16')
myTestContainer.pull()
myTestContainer.inside {
sh 'npm install --only=dev'
sh 'npm test'
}
}
stage('test with a DB') {
def mysql = docker.image('mysql').run("-e MYSQL_ALLOW_EMPTY_PASSWORD=yes")
def myTestContainer = docker.image('node:16')
myTestContainer.pull()
myTestContainer.inside("--link ${mysql.id}:mysql") { // using linking, mysql will be available at host: mysql, port: 3306
sh 'npm install --only=dev'
sh 'npm test'
}
mysql.stop()
}
stage('docker build/push') {
docker.withRegistry('https://index.docker.io/v2/', 'dockerhub') {
def app = docker.build("realyun99/docker-nodejs-demo:${commit_id}", '.').push()
}
}
}
- test 단계에서 docker 이미지를 당겨와서 사용할 수 있다 → jenkins configure에서 따로 설정해줄 필요가 없다!
- 즉 nodejs를 jenkins 컨테이너가 아닌 옆에 새 컨테이너를 생성하고 해당 커멘드들을 실행하게 된다.
- 커멘드 실행이 끝나면 컨테이너는 폐기되고 다음 단계로 넘어간다.
❗ 원하는대로 컨테이너 생성해서 이미지 올리는 등의 코드를 작성하고 싶으면 Docker Pipeline이 유용할 듯 싶다? ❗
'Computer Science > DevOps' 카테고리의 다른 글
[AWS] WEB - WAS 구성 (Apache - Tomcat) (0) | 2023.07.27 |
---|---|
[Jenkins] 다양한 플러그인 활용 (0) | 2023.07.24 |
[Jenkins] Jenkins 다뤄보기 (0) | 2023.06.27 |
[OS] OS 모음집 (0) | 2021.08.12 |
[CI/CD] Tool (0) | 2021.08.11 |