JAVA + VUE
pipeline{
environment {
dockerImage = ''
}
agent any
stages{
stage('Building front image') {
steps {
script {
dockerImage = docker.build("bae3007/frontvoda-zero-downtime", "/var/jenkins_home/workspace/deploy_test/front_vue")
withCredentials([usernamePassword(credentialsId: 'bae3007', usernameVariable: 'DOCKER_HUB_USERNAME', passwordVariable: 'DOCKER_HUB_PASSWORD')]) {
sh 'docker login -u $DOCKER_HUB_USERNAME -p $DOCKER_HUB_PASSWORD'
sh 'docker push bae3007/frontvoda-zero-downtime'
}
}
}
}
stage('Run docker front image') {
steps {
dir('/var/jenkins_home/workspace/deploy_test/front_vue'){
sh 'chmod +x deploy.sh'
sh './deploy.sh'
}
}
}
stage('Building back image'){
steps{
script {
dockerImage = docker.build("bae3007/back-java-zero-downtime", "/var/jenkins_home/workspace/deploy_test/back_java")
withCredentials([usernamePassword(credentialsId: 'bae3007', usernameVariable: 'DOCKER_HUB_USERNAME', passwordVariable: 'DOCKER_HUB_PASSWORD')]) {
sh 'docker login -u $DOCKER_HUB_USERNAME -p $DOCKER_HUB_PASSWORD'
sh 'docker push bae3007/back-java-zero-downtime'
}
}
}
}
stage('Run docker back image') {
steps {
dir('/var/jenkins_home/workspace/deploy_test/back_java'){
sh 'chmod +x deploy.sh'
sh './deploy.sh'
}
}
}
stage('not using images&containers delete '){
steps{
sh "docker image prune -a -f"
}
}
}
}
위는 Jenkins 파이프라인 코드이며, Docker 이미지 빌드, 푸시 및 실행에 관한 작업을 수행한다.
- pipeline : 파이프라인 전체를 정의.
- environment : Docker 이미지 변수를 초기화.
- agent : 실행 환경을 정의하며 **any**는 어떤 에이전트 노드에서도 실행 가능함을 의미.
- stages : 여러 단계로 파이프라인을 분리.
- stage('Building front image') : 첫 번째 단계에서 프론트엔드 Docker 이미지를 빌드.
- steps : 실제로 수행될 작업을 정의.
- script : Groovy 스크립트를 실행.
- docker.build : Docker 이미지를 빌드.
- withCredentials : 인증 정보를 가져옴.
- sh : 쉘 명령을 실행.
- docker login : Docker 레지스트리에 로그인.
- docker push : Docker 이미지를 푸시.
- stage('Run docker front image') : 두 번째 단계에서 프론트엔드 Docker 이미지를 실행.
- dir : 작업 디렉토리를 변경.
- chmod : 파일 권한을 변경.
- deploy.sh : 실행 스크립트를 실행.
- stage('Building back image') : 세 번째 단계에서 백엔드 Docker 이미지를 빌드.
- stage('Run docker back image') : 네 번째 단계에서 백엔드 Docker 이미지를 실행.
- stage('not using images&containers delete ') : 다섯 번째 단계에서 사용하지 않는 Docker 이미지 및 컨테이너를 삭제.
- sh : 쉘 명령을 실행.
- docker image prune -a -f : 사용하지 않는 모든 Docker 이미지를 강제로 삭제.
PYTHON
pipeline{
environment {
dockerImage = ''
}
agent any
stages{
stage('Building python image') {
steps {
script {
dockerImage = docker.build("bae3007/fastapi", "/var/jenkins_home/workspace/deploy_python/")
withCredentials([usernamePassword(credentialsId: 'bae3007', usernameVariable: 'DOCKER_HUB_USERNAME', passwordVariable: 'DOCKER_HUB_PASSWORD')]) {
sh 'docker login -u $DOCKER_HUB_USERNAME -p $DOCKER_HUB_PASSWORD'
sh 'docker push bae3007/fastapi'
}
}
}
}
stage('Run docker python image') {
steps {
dir('/var/jenkins_home/workspace/deploy_python/'){
sh 'chmod +x deploy.sh'
sh './deploy.sh'
}
}
}
stage('not using images&containers delete '){
steps{
sh "docker image prune -a -f"
}
}
}
}
위의 파이프라인 코드는 Jenkins를 사용하여 Python Docker 이미지를 빌드하고 실행하며, 사용하지 않는 Docker 이미지 및 컨테이너를 삭제한다. JAVA+VUE 파이프라인의 실행과정과 동일하다.
추가적으로 프론트 컨테이너를 구동시킬 때 Nginx 이미지를 사용한다.
| Dockerfile
FROM nginx:latest
COPY dist/ /usr/share/nginx/html/
COPY voda.conf /etc/nginx/conf.d/voda.conf
RUN rm /etc/nginx/conf.d/default.conf
EXPOSE 80
ENTRYPOINT ["nginx", "-g", "daemon off;"]
dist 빌드된 폴더를 새로 생성될 front 컨테이너에 저장한다.
80번 포트를 열고, ENTRYPOINT로 nginx 명령어를 실행하며, 설정한 옵션으로 nginx를 실행한다.
이 때, "-g daemon off;" 옵션은 nginx가 백그라운드에서 실행되지 않도록 한다.
해당 경로의 voda.conf 파일을 front 컨테이너의 /etc/nginx/conf.d/voda.conf로 저장한다.
| voda.conf
server {
listen 80;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
}
이 설정은 80번 포트에서 들어오는 모든 요청에 대해 처리한다. location / {} 블록 안에 있는 설정은 해당 위치의 요청에 대해 처리.
root /usr/share/nginx/html; 설정은 해당 위치에 있는 파일들의 루트 디렉토리를 /usr/share/nginx/html로 지정하고 index index.html index.htm; 설정은 해당 위치에 index.html 또는 index.htm 파일이 없는 경우, 자동으로 이 두 파일을 찾아서 보여준다.
try_files $uri $uri/ /index.html; 설정은 요청한 파일이나 디렉토리가 없을 경우, /index.html 파일을 보여준다.
이 설정은 SPA (Single Page Application)와 같이 하나의 HTML 파일로 모든 페이지를 처리하는 웹 애플리케이션에 유용하다.
'기타 > 인프라 구축과정' 카테고리의 다른 글
[Infra] 8. Blue-Green 무중단 배포(2) - Voda Project (0) | 2023.04.04 |
---|---|
[Infra] 7. Blue-Green 무중단 배포(1) - Voda Project (0) | 2023.04.04 |
[Infra] 5. Jenkins 프로젝트 빌드 - Voda Project (0) | 2023.04.04 |
[Infra] 4. MariaDB 설정 - Voda Project (0) | 2023.04.04 |
[Infra] 3. https 설정 (Cerbot) - Voda Project (0) | 2023.04.04 |
댓글