













저장한 Credential을 통해 GitLab에 접근하여 git url의 dev branch 소스코드를 가져온다
config 저장소에서 배포된 파일들을 copy
Dockerfile로 이미지를 빌드하여 로컬 네트워크 192.168.10.100의 Container Registry (Port 5000)로 이미지를 push
배포 스크립트를 실행
pipeline {
agent any
stages {
stage('Sync Source') {
steps {
script {
echo '####################### Sync Source #######################'
git url: 'http://192.168.10.200:5001/dobecom/nest-msa.git', branch: 'dev', credentialsId: 'GitLab-Credential'
sh "cp -rf ../config/nest-msa/.env.dev ./.env"
sh 'cp -rf ../config/nest-msa/Dockerfile.dev ./Dockerfile'
}
}
}
stage('Docker Build & Push') {
steps {
echo '####################### Docker Build & Push #######################'
sh 'sudo docker build -f Dockerfile -t 192.168.10.100:5000/nest-msa:dev .'
sh 'sudo docker push 192.168.10.100:5000/nest-msa:dev'
sh 'ssh -i ../key.pem ubuntu@192.168.10.100 /home/ubuntu/deploy/nest-msa.sh'
}
}
}
}
docker exec -it --user root 34954743a64b /bin/bashvi /etc/sudoers
# User privilege specification
root ALL=(ALL:ALL) ALL
**jenkins ALL=(ALL) NOPASSWD:ALL**
docker pull registry:3.0.0-alpha.1docker run -itd --restart unless-stopped --name do-registry -p 5000:5000 -v /home/dobecom/Docker/registry:/tmp/registry registry:3.0.0-alpha.1sudo vi /etc/docker/daemon.json
{
"insecure-registries": ["192.168.10.100:5000"]
}
#!/bin/bash
sudo docker pull 192.168.10.200:5000/nest-msa:dev
sudo docker rm -f nest-msa
sudo docker run -itd --restart unless-stopped -v /home/ubuntu/logs:/log --name nest-msa -p 3001:3000 192.168.10.200:5000/nest-msa:dev
sudo docker image prune -af
## Dockerfile.dev
FROM 192.168.10.200:5000/nest-msa:dev AS base
FROM base AS runner
WORKDIR /app
USER node
COPY --from=base --chown=node:node /app/dist ./dist
COPY --from=base --chown=node:node /app/node_modules ./node_modules
EXPOSE 3001
ENV PORT 3000
CMD ["node", "dist/main.js"]
## Dockerfile.init
FROM node:18-alpine AS base
FROM base AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./
RUN \
if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
elif [ -f package-lock.json ]; then npm ci; \
elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i --frozen-lockfile; \
else echo "Lockfile not found." && exit 1; \
fi
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
ARG SERVICE
RUN npm run build $SERVICE
최초 Container Image 빌드
sudo cp ../config/nest-msa/Dockerfile.init .sudo docker build -f Dockerfile.init -t 192.168.10.200:5000/nest-msa:dev .API Repository 배포 테스트

