diff --git a/.env b/.env new file mode 100644 index 0000000000000000000000000000000000000000..083c815f94fc2dac4e7fbb2b98d4b301a4170aed --- /dev/null +++ b/.env @@ -0,0 +1 @@ +NODE_ENV=development \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 915d68d9732518080578adb92dc55c49c4dc0d8d..cf9c2126744522a355b5131b218723027e48ccad 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -11,16 +11,15 @@ build: - export CI_REGISTRY_PW=$CI_REGISTRY_PW - export CI_REGISTRY_USER=$CI_REGISTRY_USER - echo "To release new docker image for development and staging, we use tag 'dev' only !!!" - - tag=$(echo $CI_COMMIT_MESSAGE | sed -r 's/.*(\[tag\])//') - - export tag=$tag + - export tag=dev - cicd_path=$(pwd)/cicd - script: - bash $cicd_path/build.sh only: - release tags: - - chinguyen_nodejs_managestudent + - runner-builder + deploy: stage: deploy before_script: @@ -28,7 +27,6 @@ deploy: - cicd_path=$(pwd)/cicd - export CI_REGISTRY_PW=$CI_REGISTRY_PW - export CI_REGISTRY_USER=$CI_REGISTRY_USER - - tag=$(echo $CI_COMMIT_MESSAGE | sed -r 's/.*(\[tag\])//') - | if [ ! -d $mount_data_folder ]; then sudo mkdir $mount_data_folder @@ -40,9 +38,9 @@ deploy: sudo chown -R gitlab-runner.gitlab-runner $mount_data_folder/$project_name fi script: - - export tag=$tag + - export tag=dev - bash $cicd_path/deploy.sh only: - release tags: - - chinguyen_nodejs_managestudent + - asset-ci-cd \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..2e22749fbac0a5eaf4103ef9d3bcbbf87edb4136 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,16 @@ +### STAGE 1: RUN ### +FROM node +RUN chmod 1777 /tmp +RUN mkdir /data +RUN apt-get update -y +RUN apt-get install -y libgdiplus +RUN apt-get install -y libreoffice +RUN apt-get install -y libfontconfig +RUN apt-get install -y phantomjs +ENV OPENSSL_CONF=/opt/openssl.cnf +WORKDIR /usr/src/app +COPY package.json package-lock.json ./ +RUN npm install +COPY . . +RUN cp -r ./swagger/supports/* ./node_modules +ENTRYPOINT ["node", "swagger.js"] \ No newline at end of file diff --git a/cicd/CICD/cp_ad b/cicd/CICD/cp_ad new file mode 100644 index 0000000000000000000000000000000000000000..5fd927c27edc9ff3e0e00ed57243c69614828371 --- /dev/null +++ b/cicd/CICD/cp_ad @@ -0,0 +1,31 @@ +#! /bin/bash + +function cp_ad() +{ + sourceCheck=$1; + desPath=$2; + defaultSourceCheck=$3; + if [[ -z $sourceCheck ]] || [[ -z $desPath ]] + then + echo "Source path or destination path is empty"; + exit 1; + fi + for item in "$sourceCheck"/* + do + if [[ -d $item ]] + then + relativePath=$(echo ${item/$defaultSourceCheck/}); + pathRm=$desPath$relativePath; + echo $pathRm; + rm -rf $pathRm; + cp_ad $item $desPath $defaultSourceCheck; + fi + relativePath=$(echo ${item/$defaultSourceCheck/}); + pathRm=$desPath$relativePath; + echo $pathRm + rm -rf $pathRm + done +} + +cp_ad $1 $2 $3; +cp -rf $1/* $2; diff --git a/cicd/CICD/swagger-codegen-cli.jar b/cicd/CICD/swagger-codegen-cli.jar new file mode 100644 index 0000000000000000000000000000000000000000..da93ece3b8f40dadf8da7498f646d0f3eda8cead Binary files /dev/null and b/cicd/CICD/swagger-codegen-cli.jar differ diff --git a/cicd/CICD/swagger_download b/cicd/CICD/swagger_download new file mode 100644 index 0000000000000000000000000000000000000000..9210fa5db7a8abfacea9b7cbf8b083fb236afadc --- /dev/null +++ b/cicd/CICD/swagger_download @@ -0,0 +1,22 @@ +#! /bin/bash + +function download_angular() +{ + sourceCheck=$1; + if [[ -z $sourceCheck ]] + then + echo "Source path is empty"; + exit 1; + fi + for item in "$sourceCheck"/* + do + if [[ -d $item ]] + then + download_angular $item; + fi + sed -i '/return this.httpClient.request<Blob>/!{p;d;};n;n;n;a\\t\tresponseType: \x27blob\x27 as \x27json\x27,' $item + echo $item; + done +} + +download_angular $1; diff --git a/cicd/build-model.sh b/cicd/build-model.sh new file mode 100644 index 0000000000000000000000000000000000000000..d163380fcb536d92199568817ccce09b0b943c97 --- /dev/null +++ b/cicd/build-model.sh @@ -0,0 +1,30 @@ +#!/bin/bash +echo "Waiting for the application goes online..." +sleep 15 +swaggerUrl="http://localhost:$port_mapping/swagger/v1/swagger.json" +api=$(curl $swaggerUrl) +status=$? +if test $status -ne 0 +then + exit 1 +fi +api=$(jq 'del(.components.securitySchemes)' <<<$api) +api=$(jq 'del(.security)' <<<$api) +echo $api > apiFinal.json +request='{"spec":{},"type":"CLIENT","lang":"typescript-angular"}' +request=$(jq --argfile apiFinal apiFinal.json '.spec = $apiFinal' <<<$request) +echo $request > ts.json +rm -rf client +java -jar CICD/swagger-codegen-cli.jar generate -i apiFinal.json -l typescript-angular -o client --additional-properties modelPropertyNaming=original +rm -rf ts.json; +rm -rf production_file; +rm -rf apiFinal.json; +temp_path=$(pwd); +mkdir production_file; +cp -r client/*.ts production_file/; cp -r client/api production_file/; cp -r client/model production_file/; rm -rf client; mv production_file client +bash CICD/swagger_download client +git clone --single-branch --branch $fe_model_branch "http://${GIT_USER}:${GIT_USER_PW}@$fe_git_address.git" +cd $fe_git_project_name +git pull origin $fe_model_branch; +bash $temp_path/CICD/cp_ad $temp_path/client $temp_path/$fe_git_project_name/src/app $temp_path/client +git add --all; git commit -m "Update model auto" --allow-empty; git push "http://${GIT_USER}:${GIT_USER_PW}@$fe_git_address.git" HEAD:$fe_model_branch \ No newline at end of file diff --git a/cicd/build.sh b/cicd/build.sh new file mode 100644 index 0000000000000000000000000000000000000000..87ad0aea35471b8e7695dbc0dcb19f688b612fd2 --- /dev/null +++ b/cicd/build.sh @@ -0,0 +1,6 @@ +#!/bin/bash +echo $image_name:$tag +sudo docker build -t $image_name:$tag -f Dockerfile . +sudo docker logout registry.gitlab.com +echo "$CI_REGISTRY_PW" | sudo docker login registry.gitlab.com -u "$CI_REGISTRY_USER" --password-stdin +sudo docker push $image_name:$tag \ No newline at end of file diff --git a/cicd/deploy.sh b/cicd/deploy.sh new file mode 100644 index 0000000000000000000000000000000000000000..df03ad1d2d1fa72515381ce6e1c9f10deeffc299 --- /dev/null +++ b/cicd/deploy.sh @@ -0,0 +1,12 @@ +#!/bin/bash +jq -r 'keys[] as $k | "\($k)=\(.[$k])"' $environment_json_path > .env +sed -i 's|PROJECT-NAME|'$project_name'|' docker-compose.yaml +sed -i 's|ENVIRONMENT-NAME|'$environment_name'|' docker-compose.yaml +sed -i 's|IMAGE-NAME|'$image_name'|' docker-compose.yaml +sed -i 's|IMAGE-TAG|'$tag'|' docker-compose.yaml +sed -i 's|P-MAPPING|'$port_mapping'|' docker-compose.yaml +sed -i 's|MOUNT-DATA-FOLDER|'$mount_data_folder'|' docker-compose.yaml +echo "$CI_REGISTRY_PW" | sudo docker login registry.gitlab.com -u "$CI_REGISTRY_USER" --password-stdin +sudo docker-compose down +sudo docker-compose pull +sudo docker-compose --env-file .env up -d \ No newline at end of file diff --git a/cicd/release.sh b/cicd/release.sh new file mode 100644 index 0000000000000000000000000000000000000000..c2a383d286722b35cdff31f0d4e443e4e8bbdc0b --- /dev/null +++ b/cicd/release.sh @@ -0,0 +1,9 @@ +#!/bin/bash +if [ "$check" == "[tag]" ]; then + sed -i 's|#||g' Dockerfile + sudo docker build -t $image_name:$tag -f Dockerfile . + sudo docker logout registry.gitlab.com + echo "$CI_REGISTRY_PW" | sudo docker login registry.gitlab.com -u "$CI_REGISTRY_USER" --password-stdin + sudo docker push $image_name:$tag + sudo docker rmi $image_name:$tag +fi diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000000000000000000000000000000000000..051ba5b9c9f7e2f3a4f3ddce3ff222d1f4630ff6 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,12 @@ +version: '3.5' + +services: + app: + container_name: ENVIRONMENT-NAME-PROJECT-NAME + image: IMAGE-NAME:IMAGE-TAG + volumes: + - MOUNT-DATA-FOLDER/PROJECT-NAME:/media + ports: + - P-MAPPING:3000 + restart: unless-stopped + pull_policy: always \ No newline at end of file diff --git a/env-param.sh b/env-param.sh new file mode 100644 index 0000000000000000000000000000000000000000..ef8214f19ee2abbe9f02db1f4a44163943656417 --- /dev/null +++ b/env-param.sh @@ -0,0 +1,7 @@ +#!/bin/bash +export project_name="chinguyen_nodejs_managestudents" +export image_name="registry.gitlab.com/meusolutions/chinguyen_nodejs_managestudents" +export port_mapping="5000" +export environment_name="staging" +export mount_data_folder="/var/data" + diff --git a/hd b/hd new file mode 100644 index 0000000000000000000000000000000000000000..da5f0540c6ec214ead6532dc5649876b63e92019 --- /dev/null +++ b/hd @@ -0,0 +1,38 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +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 +-----END OPENSSH PRIVATE KEY----- diff --git a/index.js b/index.js new file mode 100644 index 0000000000000000000000000000000000000000..8794974e08c7f5018f08c5e364f832df66d88a37 --- /dev/null +++ b/index.js @@ -0,0 +1,15 @@ +var express = require('express'); +var app = express(); + +app.get('/', function (req, res) { + res.send('Hello World'); +}) + +var server = app.listen(8081, function () { + + var host = server.address().address + var port = server.address().port + + console.log("Ung dung Node.js dang lang nghe tai dia chi: http://%s:%s", host, port) + +}) \ No newline at end of file diff --git a/package.json b/package.json index c67de3420e668b8f5f4d18840318736877f67b20..a59a2afe03da203820f1112d4cf6de4637a70d7c 100644 --- a/package.json +++ b/package.json @@ -34,8 +34,8 @@ "dependencies": { "body-parser": "1.19.0", "cors": "2.8.5", - "cross-env": "^7.0.0", - "express": "4.17.1", + "cross-env": "7.0.0", + "express": "^4.17.1", "express-boom": "3.0.0", "express-validator": "^6.9.2", "kafka-node": "^5.0.0",