From b7ac5f54c54f3a927219580ca47301eceb93b226 Mon Sep 17 00:00:00 2001 From: qodirovshohijahon Date: Thu, 20 Jan 2022 11:18:07 +0500 Subject: [PATCH 1/2] [feat:] create ci files --- .gitlab-ci.yaml | 39 +++++++++++++++++++++++++++++++++++++++ Dockerfile | 18 ++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 .gitlab-ci.yaml create mode 100644 Dockerfile diff --git a/.gitlab-ci.yaml b/.gitlab-ci.yaml new file mode 100644 index 0000000..e050bcf --- /dev/null +++ b/.gitlab-ci.yaml @@ -0,0 +1,39 @@ +stages: + - build + - deploy-stage + +variables: + VARIABLE_DATA: Gitlab-CI-YAML + +build: + stage: build + image: docker:18-git + services: + - docker:18-dind + script: + # get node app version from package.json for use in tagging docker image + - apk update && apk add jq + - export VERSION=`jq -r ".version" < ./package.json` + # login to docker + - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY + # build and tag docker image + - docker build -t $CI_REGISTRY_IMAGE:$VERSION -t $CI_REGISTRY_IMAGE:latest . + # publish finished image + - docker push $CI_REGISTRY_IMAGE:$VERSION + - docker push $CI_REGISTRY_IMAGE:latest + +deploy-stage: + stage: deploy-stage + image: alpine:latest + script: + - chmod og= $STAGE_ID_RSA + - apk update && apk add openssh-client + # stop existing docker container & remove images + - ssh -i $STAGE_ID_RSA -o StrictHostKeyChecking=no $STAGE_SERVER_USER@$STAGE_SERVER_IP "docker stop $CI_PROJECT_NAME || true" + - ssh -i $STAGE_ID_RSA -o StrictHostKeyChecking=no $STAGE_SERVER_USER@$STAGE_SERVER_IP "docker rm $CI_PROJECT_NAME || true" + - ssh -i $STAGE_ID_RSA -o StrictHostKeyChecking=no $STAGE_SERVER_USER@$STAGE_SERVER_IP "docker image rm $CI_REGISTRY_IMAGE:latest || true" + # pull new container + - ssh -i $STAGE_ID_RSA -o StrictHostKeyChecking=no $STAGE_SERVER_USER@$STAGE_SERVER_IP "docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY" + - ssh -i $STAGE_ID_RSA -o StrictHostKeyChecking=no $STAGE_SERVER_USER@$STAGE_SERVER_IP "docker pull $CI_REGISTRY_IMAGE:latest" + # run new container + - ssh -i $STAGE_ID_RSA -o StrictHostKeyChecking=no $STAGE_SERVER_USER@$STAGE_SERVER_IP "docker run -d --restart unless-stopped --name $CI_PROJECT_NAME -p 8882:3000 -e "variableData=Docker-Run-Command" $CI_REGISTRY_IMAGE:latest" \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..54d6df6 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,18 @@ +FROM node:14-alpine + +# create dir +RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app +WORKDIR /home/node/app + +# build dependencies +COPY ./package*.json ./ +USER node +RUN npm install + +# copy in source code +COPY --chown=node:node ./ ./ + +# start express server +CMD [ "npm", "start" ] + +# I want to support this project as a DevOps \ No newline at end of file From 991435906e01bd42076810342fca2f7250269cf4 Mon Sep 17 00:00:00 2001 From: qodirovshohijahon Date: Thu, 20 Jan 2022 11:19:42 +0500 Subject: [PATCH 2/2] [feat:] ci update --- .gitlab-ci.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yaml b/.gitlab-ci.yaml index e050bcf..7fe711d 100644 --- a/.gitlab-ci.yaml +++ b/.gitlab-ci.yaml @@ -1,3 +1,4 @@ +# this is just demo version of CI/CD stages: - build - deploy-stage