✔ jenkins에서 node js plugin 설치 및 설정 추가
✔ ubuntu에서 node16 설치, npm 설치
curl -sL https://deb.nodesource.com/setup_16.x -o /tmp/nodesource_setup.sh
nano /tmp/nodesource_setup.sh
sudo bash /tmp/nodesource_setup.sh
sudo apt install nodejs
sudo apt install npm
✔ 현재 pipeline
pipeline {
agent any
tools {nodejs "node16_19"}
stages {
stage('git clone') {
steps {
checkout scmGit(branches: [[name: '*/FE']], extensions: [submodule(parentCredentials: true, reference: '', trackingSubmodules: true)], userRemoteConfigs: [[credentialsId: 'D208-UserCredentials', url: 'https://lab.ssafy.com/s08-webmobile1-sub2/S08P12D208']])
}
}
stage('build') {
steps {
dir('real') {
echo "build run"
sh "npm i @vue/cli-service"
sh "npm run build"
}
}
}
}
}
tool s {nodejs "node16_19"}
: Global Tool Configuration에서 추가한 node (plugin에서 nodejs 를 설치 후, Global Tool Configuration에 추가해야한다.)git clone
: clonebuild
: Vue js 배포 파일 만들기
✔ 현재 vue-cli-service를 찾지 못한 상태
이유는? 현재 vue-cli-service
가 설치되지 않았다.
그래서, 설치하면 된다.
stage('build') {
steps {
dir('real') {
echo "build run"
sh "npm i @vue/cli-service"
sh "npm run build"
}
}
}
성공!
pipeline {
agent any
tools {nodejs "node16_19"}
environment {
imagename = "lkc263/d208_fe"
registryCredential = 'DockerHubD208Fe'
dockerImage = ''
}
stages {
stage('docker-build') {
steps {
dir('real'){
script {
sh """
if ! test docker; then
curl -fsSL https://get.docker.com -o get-docker.sh
get-docker.sh
fi
"""
dockerImage = docker.build imagename
}
}
}
}
}
}
imagename
: docker hub의 repositorydocker.build
: docker build -t
로 image를 생성한다.
# 최신 Node.js LTS 버전
FROM node:16.19.0
WORKDIR /app
# WORKDIR은 RUN, CMD, ENTRYPOINT의 명령이 실행될 디렉터리를 설정합니다. < 컨테이너 위치
# WORKDIR 뒤에 오는 모든 RUN, CMD, ENTRYPOINT에 적용되며, 중간에 다른 디렉터리를 설정하여 실행 디렉터리를 바꿀 수 있습니다.
# 복사할 파일 경로 : 이미지에서 파일이 위치할 경로
COPY package.json .
ADD . .
RUN npm install
EXPOSE 3000
CMD ["npm", "run", "serve"]
stage('docker-push') {
steps {
sshagent(credentials: ['EC2_D208']) {
sh '''
if test "`docker ps -aq --filter ancestor=lkc263/d208_fe:1.0`"; then
ssh -o StrictHostKeyChecking=no ubuntu@3.36.87.75 "docker stop $(docker ps -aq --filter ancestor=lkc263/d208_fe:1.0)"
ssh -o StrictHostKeyChecking=no ubuntu@3.36.87.75 "docker rm -f $(docker ps -aq --filter ancestor=lkc263/d208_fe:1.0)"
ssh -o StrictHostKeyChecking=no ubuntu@3.36.87.75 "docker rmi lkc263/d208_fe:1.0"
fi
'''
}
script {
docker.withRegistry('', registryCredential){
dockerImage.push("1.0")
}
}
}
}
docker.withRegistry
를 통해 docker hub에 push 한다.
stage('SSH-Server-EC2'){
steps {
echo 'SSH - Server EC2'
sshagent(credentials: ['EC2_D208']) {
sh 'ssh -o StrictHostKeyChecking=no ubuntu@3.36.87.75 "docker pull lkc263/d208_fe:1.0"'
sh 'ssh -o StrictHostKeyChecking=no ubuntu@3.36.87.75 "docker run -i -d -p 3000:8080 lkc263/d208_fe:1.0"'
}
}
}
성공!
pipeline {
agent any
tools {nodejs "node16_19"}
environment {
imagename = "lkc263/d208_fe"
registryCredential = 'DockerHubD208Fe'
dockerImage = ''
}
stages {
stage('git clone') {
steps {
checkout scmGit(branches: [[name: '*/FE']], extensions: [submodule(parentCredentials: true, reference: '', trackingSubmodules: true)], userRemoteConfigs: [[credentialsId: 'D208-UserCredentials', url: 'https://lab.ssafy.com/s08-webmobile1-sub2/S08P12D208']])
}
}
stage('build') {
steps {
dir('real') {
echo "build run"
sh "npm i @vue/cli-service"
sh "npm run build"
}
}
}
stage('docker-build') {
steps {
dir('real'){
script {
sh """
if ! test docker; then
curl -fsSL https://get.docker.com -o get-docker.sh
get-docker.sh
fi
"""
dockerImage = docker.build imagename
}
}
}
}
stage('docker-push') {
steps {
sshagent(credentials: ['EC2_D208']) {
sh '''
if test "`docker ps -aq --filter ancestor=lkc263/d208_fe:1.0`"; then
ssh -o StrictHostKeyChecking=no ubuntu@3.36.87.75 "docker stop $(docker ps -aq --filter ancestor=lkc263/d208_fe:1.0)"
ssh -o StrictHostKeyChecking=no ubuntu@3.36.87.75 "docker rm -f $(docker ps -aq --filter ancestor=lkc263/d208_fe:1.0)"
ssh -o StrictHostKeyChecking=no ubuntu@3.36.87.75 "docker rmi lkc263/d208_fe:1.0"
fi
'''
}
script {
docker.withRegistry('', registryCredential){
dockerImage.push("1.0")
}
}
}
}
stage('SSH-Server-EC2'){
steps {
echo 'SSH - Server EC2'
sshagent(credentials: ['EC2_D208']) {
sh 'ssh -o StrictHostKeyChecking=no ubuntu@3.36.87.75 "docker pull lkc263/d208_fe:1.0"'
sh 'ssh -o StrictHostKeyChecking=no ubuntu@3.36.87.75 "docker run -i -d -p 3000:3000 --name d208_frontend lkc263/d208_fe:1.0"'
}
sh "docker system prune -f" // Do not prompt for confirmation
}
}
}
}
참고