parent
1664ff8b5c
commit
0b13434850
|
|
@ -1,89 +1,262 @@
|
||||||
pipeline {
|
pipeline {
|
||||||
agent any
|
|
||||||
|
environment {
|
||||||
|
|
||||||
|
NGINX_DIR = '/home/nginx'
|
||||||
|
NGINX_CONTENT_DIR = "${NGINX_DIR}/cv.kamil.zuk.00x097.com"
|
||||||
|
|
||||||
|
NGINX_USER_ID = 1001
|
||||||
|
NGINX_GROUP_ID = 1001
|
||||||
|
|
||||||
|
JENKINS_REPO_CV_DIR = "${JENKINS_AGENT_WORKDIR}/curriculum.vitae"
|
||||||
|
|
||||||
|
JENKINS_USER_ID = 1000
|
||||||
|
JENKINS_GROUP_ID = 1000
|
||||||
|
|
||||||
|
NPM_LOGS_DIR = "/root/.npm/_logs"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
triggers {
|
||||||
|
|
||||||
|
GenericTrigger(
|
||||||
|
|
||||||
|
genericVariables: [
|
||||||
|
[
|
||||||
|
key: 'DATA_SOURCE_BRANCH',
|
||||||
|
value: '$.DATA_SOURCE_BRANCH'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
token: 'dbeds56e-183f-4g43-b90a-637130d4d8e4'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
agent {
|
||||||
|
kubernetes {
|
||||||
|
yaml """
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: jenkins-agent
|
||||||
|
namespace: default
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: jenkins-agent-nodejs
|
||||||
|
image: node:14.15.4
|
||||||
|
command: ["/bin/bash", "-c"]
|
||||||
|
args: ["sleep 999d"]
|
||||||
|
tty: true
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /home/nginx
|
||||||
|
name: content
|
||||||
|
volumes:
|
||||||
|
- name: content
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: pvc-nginx
|
||||||
|
"""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
stages {
|
stages {
|
||||||
stage('#1 Fetch App') {
|
|
||||||
|
stage('Setup Parameters') {
|
||||||
|
|
||||||
steps {
|
steps {
|
||||||
|
|
||||||
echo '#1 Fetch App'
|
script {
|
||||||
|
|
||||||
sh 'rm -r *'
|
|
||||||
|
|
||||||
git credentialsId: 'git-tbs093a', url: 'git@github.com:TBS093A/curriculum_vitae.git'
|
|
||||||
|
|
||||||
sh 'ls -la'
|
|
||||||
|
|
||||||
|
properties([
|
||||||
|
parameters([
|
||||||
|
string(
|
||||||
|
defaultValue: 'master',
|
||||||
|
description: 'Select <b>CV</b> data source branch for the build & deploy',
|
||||||
|
name: 'DATA_SOURCE_BRANCH'
|
||||||
|
)
|
||||||
|
])
|
||||||
|
])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage('#2 Build App (npm node)') {
|
|
||||||
|
stage('Setup Container Environment') {
|
||||||
|
|
||||||
steps {
|
steps {
|
||||||
echo '#2 Build App (npm node)'
|
|
||||||
|
|
||||||
withCredentials([sshUserPrivateKey(credentialsId: 'cv-kamil-zuk', keyFileVariable: 'PRIV_KEY')]) {
|
|
||||||
script {
|
|
||||||
|
|
||||||
echo "##################################"
|
container('jenkins-agent-nodejs') {
|
||||||
echo "### transfer files on npm node ###"
|
|
||||||
echo "##################################"
|
|
||||||
|
|
||||||
sh '''
|
echo """
|
||||||
scp -v -o StrictHostKeyChecking=no -i $PRIV_KEY -r ./* ubuntu@13.48.201.185:/home/ubuntu/docker-compose/volumes/jenkins_node_00_npm/
|
Setup Container Environment
|
||||||
'''
|
"""
|
||||||
|
|
||||||
echo '################################'
|
sh """
|
||||||
echo '### run building on npm node ###'
|
getent group
|
||||||
echo '################################'
|
"""
|
||||||
|
|
||||||
sh '''
|
sh """
|
||||||
ssh -v -o StrictHostKeyChecking=no -i $PRIV_KEY -tt ubuntu@13.48.201.185 "cd /home/ubuntu/docker-compose/volumes/jenkins_node_00_npm/ ; docker-compose up jenkins_node_00_npm"
|
getent passwd
|
||||||
'''
|
"""
|
||||||
|
|
||||||
echo '########################################################'
|
sh """
|
||||||
echo '### transfer files from npm node to jenkins pipeline ###'
|
if [ \$(getent group | grep ${JENKINS_GROUP_ID}) ]; then
|
||||||
echo '########################################################'
|
groupdel -f \$(getent passwd | grep ${JENKINS_USER_ID} | cut -d: -f1);
|
||||||
|
groupadd -g ${JENKINS_GROUP_ID} jenkins;
|
||||||
|
else
|
||||||
|
groupadd -g ${JENKINS_GROUP_ID} jenkins;
|
||||||
|
fi
|
||||||
|
"""
|
||||||
|
|
||||||
sh '''
|
sh """
|
||||||
scp -v -o StrictHostKeyChecking=no -i $PRIV_KEY -r ubuntu@13.48.201.185:/home/ubuntu/docker-compose/volumes/jenkins_node_00_npm/public ./
|
if [ \$(getent passwd | grep ${JENKINS_USER_ID}) ]; then
|
||||||
'''
|
userdel \$(getent passwd | grep ${JENKINS_USER_ID} | cut -d: -f1);
|
||||||
|
useradd -u ${JENKINS_USER_ID} -g ${JENKINS_GROUP_ID} jenkins;
|
||||||
|
else
|
||||||
|
useradd -u ${JENKINS_USER_ID} -g ${JENKINS_GROUP_ID} jenkins;
|
||||||
|
fi
|
||||||
|
"""
|
||||||
|
|
||||||
echo '############################################'
|
sh """
|
||||||
echo '### remove all build files from npm node ###'
|
if [ ! -d ${JENKINS_REPO_CV_DIR} ]; then
|
||||||
echo '############################################'
|
mkdir -p ${JENKINS_REPO_CV_DIR};
|
||||||
|
fi
|
||||||
|
"""
|
||||||
|
|
||||||
sh '''
|
sh """
|
||||||
ssh -v -o StrictHostKeyChecking=no -i $PRIV_KEY -tt ubuntu@13.48.201.185 "cd /home/ubuntu/docker-compose/volumes/jenkins_node_00_npm/ ; rm -r ./public"
|
chown jenkins:jenkins -R ${JENKINS_AGENT_WORKDIR};
|
||||||
'''
|
"""
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Fetch App') {
|
||||||
|
|
||||||
|
steps {
|
||||||
|
|
||||||
|
container('jenkins-agent-nodejs') {
|
||||||
|
|
||||||
|
echo """
|
||||||
|
Fetch App
|
||||||
|
"""
|
||||||
|
|
||||||
|
sh """
|
||||||
|
git config --global --add safe.directory '*';
|
||||||
|
"""
|
||||||
|
|
||||||
|
dir("${JENKINS_REPO_CV_DIR}") {
|
||||||
|
|
||||||
|
git credentialsId: 'git-gitea-tbs093a',
|
||||||
|
branch: "${DATA_SOURCE_BRANCH}",
|
||||||
|
url: "https://git.00x097.com/tbs093a/curriculum.vitae.git"
|
||||||
|
|
||||||
|
sh """
|
||||||
|
ls -la
|
||||||
|
"""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage('#3 Deploy App') {
|
|
||||||
steps {
|
|
||||||
echo '#3 Deploy App'
|
|
||||||
|
|
||||||
withCredentials([sshUserPrivateKey(credentialsId: 'cv-kamil-zuk', keyFileVariable: 'PRIV_KEY')]) {
|
stage('Build App') {
|
||||||
script {
|
|
||||||
|
steps {
|
||||||
echo '######################################################################'
|
|
||||||
echo '### transfer files from jenkins pipeline to remote nginx as static ###'
|
container('jenkins-agent-nodejs') {
|
||||||
echo '######################################################################'
|
|
||||||
|
echo """
|
||||||
sh '''
|
Build App
|
||||||
ssh -v -o StrictHostKeyChecking=no -i $PRIV_KEY -tt ubuntu@13.48.201.185 "sudo chown ubuntu:ubuntu -R /home/ubuntu/docker-compose/volumes/https-nginx-static/kamil-zuk-cv.tk ; "
|
"""
|
||||||
'''
|
|
||||||
|
catchError(
|
||||||
sh '''
|
buildResult: 'FAILURE',
|
||||||
scp -v -o StrictHostKeyChecking=no -i $PRIV_KEY -r ./public/* ubuntu@13.48.201.185:/home/ubuntu/docker-compose/volumes/https-nginx-static/kamil-zuk-cv.tk
|
stageResult: 'FAILURE'
|
||||||
'''
|
) {
|
||||||
|
|
||||||
sh '''
|
dir("${JENKINS_REPO_CV_DIR}") {
|
||||||
ssh -v -o StrictHostKeyChecking=no -i $PRIV_KEY -tt ubuntu@13.48.201.185 "sudo chown root:root -R /home/ubuntu/docker-compose/volumes/https-nginx-static/kamil-zuk-cv.tk ;"
|
|
||||||
'''
|
sh """
|
||||||
|
npm install;
|
||||||
|
npm run build;
|
||||||
|
"""
|
||||||
|
|
||||||
|
sh """
|
||||||
|
ls -la
|
||||||
|
"""
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
echo 'Deploy Success'
|
stage('Load Build Logs') {
|
||||||
|
|
||||||
|
steps {
|
||||||
|
|
||||||
|
container('jenkins-agent-nodejs') {
|
||||||
|
|
||||||
|
echo """
|
||||||
|
Load Build Logs
|
||||||
|
"""
|
||||||
|
|
||||||
|
catchError(
|
||||||
|
buildResult: 'SUCCESS',
|
||||||
|
stageResult: 'UNSTABLE'
|
||||||
|
) {
|
||||||
|
|
||||||
|
dir("${JENKINS_REPO_CV_DIR}") {
|
||||||
|
|
||||||
|
sh """
|
||||||
|
if [ -d ${NPM_LOGS_DIR} ]; then
|
||||||
|
if [ "\$(ls -1 ${NPM_LOGS_DIR} | wc -l)" != "0" ]; then
|
||||||
|
cat "${NPM_LOGS_DIR}/\$(ls -rt ${NPM_LOGS_DIR} | tail -n1)"
|
||||||
|
else
|
||||||
|
echo "No NPM logs found";
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
"""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Move Static Files To Nginx Persistent Volume') {
|
||||||
|
|
||||||
|
steps {
|
||||||
|
|
||||||
|
container('jenkins-agent-nodejs') {
|
||||||
|
|
||||||
|
echo """
|
||||||
|
Deploy App
|
||||||
|
"""
|
||||||
|
|
||||||
|
catchError(
|
||||||
|
buildResult: 'FAILURE',
|
||||||
|
stageResult: 'FAILURE'
|
||||||
|
) {
|
||||||
|
|
||||||
|
dir("${JENKINS_REPO_CV_DIR}") {
|
||||||
|
|
||||||
|
sh """
|
||||||
|
if [ -d ./public ]; then
|
||||||
|
echo "Static files found in ./public";
|
||||||
|
if [ -d ${NGINX_CONTENT_DIR} ]; then
|
||||||
|
rm -r ${NGINX_CONTENT_DIR};
|
||||||
|
fi
|
||||||
|
mkdir -p ${NGINX_CONTENT_DIR};
|
||||||
|
chown ${NGINX_USER_ID}:${NGINX_GROUP_ID} -R ${NGINX_DIR};
|
||||||
|
mv ./public/* ${NGINX_CONTENT_DIR}/;
|
||||||
|
exit 0;
|
||||||
|
else
|
||||||
|
echo "No static files found in ./public";
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
"""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue