From b969a0b958d45de7ee8ceddad7bc94ae6f0ea019 Mon Sep 17 00:00:00 2001 From: uzzal2k5 Date: Fri, 21 Sep 2018 18:13:19 +0600 Subject: [PATCH 01/34] Dockerized node-todo --- .dockerignore | 6 ++++++ Dockerfile | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..10094bf22 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +Dockerfile +.gitignore +.dockerignore +.git +README.md +README_es.md \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..069d2f6f3 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,18 @@ +FROM node:alpine +MAINTAINER uzzal, uzzal2k5@gmail.com +WORKDIR /node-todo +COPY . . +RUN npm install + +# CONFIG STANDARD ERROR LOG +RUN ln -sf /dev/stdout /var/log/access.log \ + && ln -sf /dev/stderr /var/log/error.log + +# SET HEALTH CHECK +HEALTHCHECK --interval=5s \ + --timeout=5s \ + CMD curl -f http://127.0.0.1:8000 || exit 1 + +EXPOSE 8080 + +# ENTRYPOINT ["node", "server.js"] \ No newline at end of file From a713a3476fb700418b9e5e4deeefbcecf1206895 Mon Sep 17 00:00:00 2001 From: uzzal2k5 Date: Fri, 21 Sep 2018 18:14:17 +0600 Subject: [PATCH 02/34] Dockerized node-todo --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 069d2f6f3..f76e19e74 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,4 +15,4 @@ HEALTHCHECK --interval=5s \ EXPOSE 8080 -# ENTRYPOINT ["node", "server.js"] \ No newline at end of file +ENTRYPOINT ["node", "server.js"] \ No newline at end of file From a9476254353bfbc888dfaa7c051c99c78b54caae Mon Sep 17 00:00:00 2001 From: uzzal2k5 Date: Fri, 21 Sep 2018 20:12:28 +0600 Subject: [PATCH 03/34] node-todo deploy with docker-compose --- .dockerignore | 4 +++- config/database.js | 3 ++- docker-compose.yml | 27 +++++++++++++++++++++++++++ mongodb/db.sh | 8 ++++++++ 4 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 docker-compose.yml create mode 100644 mongodb/db.sh diff --git a/.dockerignore b/.dockerignore index 10094bf22..b46cea289 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,4 +3,6 @@ Dockerfile .dockerignore .git README.md -README_es.md \ No newline at end of file +README_es.md +mongodb +mongodb/* \ No newline at end of file diff --git a/config/database.js b/config/database.js index 1f4cfc593..fb4c38c83 100644 --- a/config/database.js +++ b/config/database.js @@ -1,4 +1,5 @@ module.exports = { - remoteUrl : 'mongodb://node:nodeuser@mongo.onmodulus.net:27017/uwO3mypu', + remoteUrl : 'mongodb://nodeuser:nodepassword@mongodb:27017/uwO3mypu', localUrl: 'mongodb://localhost/meanstacktutorials' }; +//'mongodb://username:password@mongodb_server:27017/db_name' \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..caeb0c294 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,27 @@ +version: 3.1 +services: + node-todo: + build: . + container_name: node-todo + hostname: node-todo + ports: + - 8095:8080/tcp + links: + - mongodb + depends_on: + - mongodb + + mongodb: + image: mongo:latest + hostname: mongodb + container_name: dbserver + ports: + - 27017:27017 + environment: + - MONGO_INITDB_ROOT_USERNAME: nodeuser + - MONGO_INITDB_ROOT_PASSWORD: 'nodepassword' + - MONGO_DATA_DIR=/data/db + - MONGO_LOG_DIR=/dev/null + command: mongod --smallfiles --logpath=/dev/null + + diff --git a/mongodb/db.sh b/mongodb/db.sh new file mode 100644 index 000000000..c3415b6d6 --- /dev/null +++ b/mongodb/db.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +docker run --name node-mongo -v /my/custom:/etc/mongo -d mongo: --config /etc/mongo/mongod.conf + + + +docker run -d --name some-mongo -e MONGO_INITDB_ROOT_USERNAME=mongoadmin -e MONGO_INITDB_ROOT_PASSWORD=secret mongo + +docker run -it --rm --link some-mongo:mongo mongo mongo --host mongo -u mongoadmin -p secret --authenticationDatabase admin some-db \ No newline at end of file From fd6d54896ccc729291c212f9edbc67994ea8d6eb Mon Sep 17 00:00:00 2001 From: uzzal2k5 Date: Fri, 21 Sep 2018 20:34:57 +0600 Subject: [PATCH 04/34] node-todo deploy with docker-compose --- docker-compose.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index caeb0c294..bb5acd0e2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,4 @@ -version: 3.1 +version: '2.0' services: node-todo: build: . @@ -18,10 +18,8 @@ services: ports: - 27017:27017 environment: - - MONGO_INITDB_ROOT_USERNAME: nodeuser - - MONGO_INITDB_ROOT_PASSWORD: 'nodepassword' - - MONGO_DATA_DIR=/data/db - - MONGO_LOG_DIR=/dev/null + MONGO_INITDB_ROOT_USERNAME: "nodeuser" + MONGO_INITDB_ROOT_PASSWORD: "nodepassword" command: mongod --smallfiles --logpath=/dev/null From 6edd81746901796de2fa930d1e2b01db478cc2df Mon Sep 17 00:00:00 2001 From: uzzal2k5 Date: Sat, 22 Sep 2018 11:17:27 +0600 Subject: [PATCH 05/34] YML update --- Dockerfile | 12 ++++++------ config/database.js | 4 ++-- docker-compose.yml | 12 +++++++----- mongodb/db.sh | 2 +- package.json | 3 ++- server.js | 3 ++- 6 files changed, 20 insertions(+), 16 deletions(-) diff --git a/Dockerfile b/Dockerfile index f76e19e74..561a46355 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,14 +5,14 @@ COPY . . RUN npm install # CONFIG STANDARD ERROR LOG -RUN ln -sf /dev/stdout /var/log/access.log \ - && ln -sf /dev/stderr /var/log/error.log +#RUN ln -sf /dev/stdout /var/log/access.log \ +# && ln -sf /dev/stderr /var/log/error.log # SET HEALTH CHECK -HEALTHCHECK --interval=5s \ - --timeout=5s \ - CMD curl -f http://127.0.0.1:8000 || exit 1 +#HEALTHCHECK --interval=5s \ +# --timeout=5s \ +# CMD curl -f http://127.0.0.1:8000 || exit 1 EXPOSE 8080 -ENTRYPOINT ["node", "server.js"] \ No newline at end of file +#ENTRYPOINT ["node", "server.js"] \ No newline at end of file diff --git a/config/database.js b/config/database.js index fb4c38c83..3091de017 100644 --- a/config/database.js +++ b/config/database.js @@ -1,5 +1,5 @@ module.exports = { - remoteUrl : 'mongodb://nodeuser:nodepassword@mongodb:27017/uwO3mypu', - localUrl: 'mongodb://localhost/meanstacktutorials' + remoteUrl : 'mongodb://nodeuser:nodepassword@mongodb:27017/nodedb', + // localUrl: 'mongodb://localhost/meanstacktutorials' }; //'mongodb://username:password@mongodb_server:27017/db_name' \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index bb5acd0e2..60099828f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,22 +4,24 @@ services: build: . container_name: node-todo hostname: node-todo + # environment: + # - MONGO_URI="mongodb://nodeuser:nodepassword@mongodb:27017/admin" ports: - 8095:8080/tcp - links: - - mongodb + #links: + # - mongodb depends_on: - mongodb mongodb: image: mongo:latest hostname: mongodb - container_name: dbserver + container_name: mongodb ports: - - 27017:27017 + - "27017:27017" environment: MONGO_INITDB_ROOT_USERNAME: "nodeuser" MONGO_INITDB_ROOT_PASSWORD: "nodepassword" - command: mongod --smallfiles --logpath=/dev/null + diff --git a/mongodb/db.sh b/mongodb/db.sh index c3415b6d6..4019cd8d9 100644 --- a/mongodb/db.sh +++ b/mongodb/db.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash docker run --name node-mongo -v /my/custom:/etc/mongo -d mongo: --config /etc/mongo/mongod.conf - +mongo --host localhost:27017 -u nodeuser -p nodepassword --authenticationDatabase admin docker run -d --name some-mongo -e MONGO_INITDB_ROOT_USERNAME=mongoadmin -e MONGO_INITDB_ROOT_PASSWORD=secret mongo diff --git a/package.json b/package.json index fde172c12..2801b3b36 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,10 @@ "author": "Scotch", "dependencies": { "body-parser": "^1.18.2", - "mongoose": "4.10.8", "express": "^4.10.8", "method-override": "^2.3.10", + "mongodb": "^3.1.6", + "mongoose": "4.10.8", "morgan": "^1.9.0" } } diff --git a/server.js b/server.js index ba5e71a5d..e85580214 100644 --- a/server.js +++ b/server.js @@ -9,7 +9,8 @@ var bodyParser = require('body-parser'); var methodOverride = require('method-override'); // configuration =============================================================== -mongoose.connect(database.localUrl); // Connect to local MongoDB instance. A remoteUrl is also available (modulus.io) +//mongoose.connect(database.localUrl); // Connect to local MongoDB instance. A remoteUrl is also available (modulus.io) +mongoose.connect(database.remoteUrl); // Connect to local MongoDB instance. A remoteUrl is also available (modulus.io) app.use(express.static('./public')); // set the static files location /public/img will be /img for users app.use(morgan('dev')); // log every request to the console From ab065da7f8c507e47d66f244a481232d02abcfab Mon Sep 17 00:00:00 2001 From: "Md. Shafiqul Islam" Date: Sat, 22 Sep 2018 12:07:16 +0600 Subject: [PATCH 06/34] mongodb --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a72b52ebe..54efcc1ef 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ results npm-debug.log node_modules +mongodb From 0e70b72d464e9d6af08a596d67a56eaae96c085f Mon Sep 17 00:00:00 2001 From: "Md. Shafiqul Islam" Date: Sat, 22 Sep 2018 12:08:05 +0600 Subject: [PATCH 07/34] mongodb --- mongodb/db.sh | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 mongodb/db.sh diff --git a/mongodb/db.sh b/mongodb/db.sh deleted file mode 100644 index 4019cd8d9..000000000 --- a/mongodb/db.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash -docker run --name node-mongo -v /my/custom:/etc/mongo -d mongo: --config /etc/mongo/mongod.conf - -mongo --host localhost:27017 -u nodeuser -p nodepassword --authenticationDatabase admin - -docker run -d --name some-mongo -e MONGO_INITDB_ROOT_USERNAME=mongoadmin -e MONGO_INITDB_ROOT_PASSWORD=secret mongo - -docker run -it --rm --link some-mongo:mongo mongo mongo --host mongo -u mongoadmin -p secret --authenticationDatabase admin some-db \ No newline at end of file From bc503e7b7508506fdcabe20e60c649d20a31ebf2 Mon Sep 17 00:00:00 2001 From: "Md. Shafiqul Islam" Date: Sat, 22 Sep 2018 19:04:56 +0600 Subject: [PATCH 08/34] K8s configuration --- .dockerignore | 4 ++- Dockerfile | 14 ++++++----- config/database.js | 7 +++--- docker-compose.yml | 32 +++++++++++++----------- k8s-node-todo.yml | 62 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 94 insertions(+), 25 deletions(-) create mode 100644 k8s-node-todo.yml diff --git a/.dockerignore b/.dockerignore index b46cea289..88117a69f 100644 --- a/.dockerignore +++ b/.dockerignore @@ -5,4 +5,6 @@ Dockerfile README.md README_es.md mongodb -mongodb/* \ No newline at end of file +mongodb/* +docker-compose.yml +license \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 561a46355..0bd9cd626 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,14 +5,16 @@ COPY . . RUN npm install # CONFIG STANDARD ERROR LOG -#RUN ln -sf /dev/stdout /var/log/access.log \ -# && ln -sf /dev/stderr /var/log/error.log +RUN ln -sf /dev/stdout /var/log/access.log \ + && ln -sf /dev/stderr /var/log/error.log # SET HEALTH CHECK -#HEALTHCHECK --interval=5s \ -# --timeout=5s \ -# CMD curl -f http://127.0.0.1:8000 || exit 1 +HEALTHCHECK --interval=5s \ + --timeout=5s \ + CMD curl -f http://127.0.0.1:8000 || exit 1 +RUN apk add mongodb EXPOSE 8080 -#ENTRYPOINT ["node", "server.js"] \ No newline at end of file + +ENTRYPOINT ["node", "server.js"] \ No newline at end of file diff --git a/config/database.js b/config/database.js index 3091de017..d0a28bffe 100644 --- a/config/database.js +++ b/config/database.js @@ -1,5 +1,4 @@ module.exports = { - remoteUrl : 'mongodb://nodeuser:nodepassword@mongodb:27017/nodedb', - // localUrl: 'mongodb://localhost/meanstacktutorials' -}; -//'mongodb://username:password@mongodb_server:27017/db_name' \ No newline at end of file + remoteUrl : 'mongodb://mongodb:27017/test', + localUrl: 'mongodb://localhost/meanstacktutorials' +}; \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 60099828f..f1f1d1fc1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,27 +1,31 @@ version: '2.0' services: + # mongoDB + mongodb: + image: mongo:4.0.2 + hostname: mongodb + container_name: mongodb + #environment: + # MONGO_INITDB_ROOT_USERNAME: "uzzal" + # MONGO_INITDB_ROOT_PASSWORD: "password" + ports: + - "27017:27017" + restart: always + + # node-todo App node-todo: build: . container_name: node-todo hostname: node-todo - # environment: - # - MONGO_URI="mongodb://nodeuser:nodepassword@mongodb:27017/admin" ports: - - 8095:8080/tcp - #links: - # - mongodb + - 80:8080/tcp + tty: true + links: + - mongodb depends_on: - mongodb + restart: always - mongodb: - image: mongo:latest - hostname: mongodb - container_name: mongodb - ports: - - "27017:27017" - environment: - MONGO_INITDB_ROOT_USERNAME: "nodeuser" - MONGO_INITDB_ROOT_PASSWORD: "nodepassword" diff --git a/k8s-node-todo.yml b/k8s-node-todo.yml new file mode 100644 index 000000000..a62c18290 --- /dev/null +++ b/k8s-node-todo.yml @@ -0,0 +1,62 @@ +-- +apiVersion: v1 +kind: Service +metadata: + name: todo-service + labels: + name: node-todo-service + app: nodeapp +spec: + selector: + name: node-todo + app: todoapp + ports: + - port: 80 + name: node-port + targetPort: 8080 + +--- +apiVersion: v1 +kind: Pod +metadata: + name: todo-pod + labels: + name: node-todo + app: todoapp +spec: + containers: + - name: nodecontainer + build: . + ports: + - containerPort: 8080 +-- +apiVersion: v1 +kind: Service +metadata: + name: mongo-service + labels: + name: mongodb-service + app: database +spec: + selector: + nname: mongodb + app: database + ports: + - port: 27017 + name: db-port + targetPort: 27017 + +--- +apiVersion: v1 +kind: Pod +metadata: + name: mongodb + labels: + name: mongodb + app: database +spec: + containers: + - name: dbcontainer + image: mongo:4.0.2 + ports: + - containerPort: 27017 \ No newline at end of file From ffa60e099b1cfe6af3788823ff1652ddcf4d74a3 Mon Sep 17 00:00:00 2001 From: "Md. Shafiqul Islam" Date: Sat, 22 Sep 2018 19:14:04 +0600 Subject: [PATCH 09/34] K8s configuration --- k8s-node-todo.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/k8s-node-todo.yml b/k8s-node-todo.yml index a62c18290..b5ab41030 100644 --- a/k8s-node-todo.yml +++ b/k8s-node-todo.yml @@ -1,4 +1,4 @@ --- +--- apiVersion: v1 kind: Service metadata: @@ -26,10 +26,10 @@ metadata: spec: containers: - name: nodecontainer - build: . - ports: - - containerPort: 8080 --- + image: index.docker.io/uzzal2k5/node-todo:latest + ports: + - containerPort: 8080 +--- apiVersion: v1 kind: Service metadata: @@ -57,6 +57,6 @@ metadata: spec: containers: - name: dbcontainer - image: mongo:4.0.2 - ports: - - containerPort: 27017 \ No newline at end of file + image: mongo:4.0.2 + ports: + - containerPort: 27017 \ No newline at end of file From e5693799d96b83a590bb09b7f18c6c2ae9e618cc Mon Sep 17 00:00:00 2001 From: "Md. Shafiqul Islam" Date: Sat, 22 Sep 2018 20:10:48 +0600 Subject: [PATCH 10/34] Update k8s config --- k8s-node-todo.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/k8s-node-todo.yml b/k8s-node-todo.yml index b5ab41030..99f4d8ed9 100644 --- a/k8s-node-todo.yml +++ b/k8s-node-todo.yml @@ -14,6 +14,7 @@ spec: - port: 80 name: node-port targetPort: 8080 + type: LoadBalancer --- apiVersion: v1 @@ -27,19 +28,22 @@ spec: containers: - name: nodecontainer image: index.docker.io/uzzal2k5/node-todo:latest + env: + - name: MONGODB_HOST + value: mongodb ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: - name: mongo-service + name: mongodb labels: - name: mongodb-service + name: mongodb app: database spec: selector: - nname: mongodb + name: mongodb app: database ports: - port: 27017 From cff99c87f37c453e94c519b8587727f78cf4d46d Mon Sep 17 00:00:00 2001 From: "Md. Shafiqul Islam" Date: Sat, 22 Sep 2018 21:04:08 +0600 Subject: [PATCH 11/34] Jenkinsfile Written for CI/CD --- Jenkinsfile | 85 ++++++++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 2 +- k8s-node-todo.yml | 6 ++-- 3 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 Jenkinsfile diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 000000000..698c42880 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,85 @@ +#!groovy +import groovy.json.JsonSlurperClassic +def DOCKER_BUILD_SERVER = "tcp://10.10.10.10:2376" +def DOCKER_IMAGE_REGISTRY = "index.docker.io/uzzal2k5/" +def GIT_REPOSITORY_NAME = "https://github.com/uzzal2k5/node-todo.git" + + +def IMAGE_NAME = "node-todo" +def todoImages + + + +# Version & Release Specified Here +def getVersion(def projectJson){ + def slurper = new JsonSlurperClassic() + project = slurper.parseText(projectJson) + slurper = null + return project.version.split('-')[0] +} + + +# REPOSITORY CLONE FROM GIT +def CloneFromGit( REPOSITORY_NAME ){ + def version, revision + try { + git(branch: "${params.BRANCH}", + changelog: true, + credentialsId: 'github-credentials', + poll: true, + url: "${REPOSITORY_NAME }" + ) + } + catch (Exception e) { + println 'Some Exception happened here ' + throw e + + } + finally { + revision = version + "-" + sprintf("%04d", env.BUILD_NUMBER.toInteger()) + println "Start building revision $revision" + + } + return this +} + + +# DOCKER IMAGE BUILD & PUSH TO REGISTRY +def DockerImageBuild( DOCKER_BUILD_SERVER, DOCKER_IMAGE_REGISTRY, IMAGE_NAME ){ + + // DOCKER IMAGE BUILD + withDockerServer([uri: "${DOCKER_BUILD_SERVER}"]) { + stage('IMAGE BUILD'){ + + todoImages = docker.build("${DOCKER_IMAGE_REGISTRY}/${IMAGE_NAME}") + + + } + + //PUSH TO REGISTRY + stage('PUSH IMAGE'){ + withDockerRegistry(url: "${DOCKER_IMAGE_REGISTRY}") { + todoImages.push("${IMAGE_NAME}:${env.BUILD_NUMBER}") + todoImages.push("${IMAGE_NAME}:latest") + } + + } + + } + return this +} + +// BUILD NODE +node { + + + stage('GIT CLONE') { + CloneFromGit(GIT_REPOSITORY_NAME) + + } + + DockerImageBuild(SERVER_TO_DEPLOY,DOCKER_IMAGE_REGISTRY, IMAGE_NAME) + + +//NODE END +} diff --git a/docker-compose.yml b/docker-compose.yml index f1f1d1fc1..3360e24c4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -15,7 +15,7 @@ services: # node-todo App node-todo: build: . - container_name: node-todo + container_name: todo-container hostname: node-todo ports: - 80:8080/tcp diff --git a/k8s-node-todo.yml b/k8s-node-todo.yml index 99f4d8ed9..2f9ab731d 100644 --- a/k8s-node-todo.yml +++ b/k8s-node-todo.yml @@ -4,7 +4,7 @@ kind: Service metadata: name: todo-service labels: - name: node-todo-service + name: todo-service app: nodeapp spec: selector: @@ -26,7 +26,7 @@ metadata: app: todoapp spec: containers: - - name: nodecontainer + - name: todo-container image: index.docker.io/uzzal2k5/node-todo:latest env: - name: MONGODB_HOST @@ -60,7 +60,7 @@ metadata: app: database spec: containers: - - name: dbcontainer + - name: mongodb image: mongo:4.0.2 ports: - containerPort: 27017 \ No newline at end of file From 4f0f71863e2eaa9e0b05275cb992d0a8cf386a8b Mon Sep 17 00:00:00 2001 From: uzzal2k5 Date: Sun, 23 Sep 2018 01:47:19 +0600 Subject: [PATCH 12/34] Deploying with replication controller --- aws-k8s-replication.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 aws-k8s-replication.yml diff --git a/aws-k8s-replication.yml b/aws-k8s-replication.yml new file mode 100644 index 000000000..e69de29bb From 3cf343521a4030c7c9ef8ab475297c931e4bb2e5 Mon Sep 17 00:00:00 2001 From: "Md. Shafiqul Islam" Date: Sun, 23 Sep 2018 12:14:29 +0600 Subject: [PATCH 13/34] update node-todo app Replication --- aws-k8s-replication.yml | 76 +++++++++++++++++++++++++++++++++++++++++ k8s-node-todo.yml | 1 + 2 files changed, 77 insertions(+) diff --git a/aws-k8s-replication.yml b/aws-k8s-replication.yml index e69de29bb..2c8d5754e 100644 --- a/aws-k8s-replication.yml +++ b/aws-k8s-replication.yml @@ -0,0 +1,76 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: todo-service + labels: + name: todo-service + app: nodeapp +spec: + selector: + name: node-todo + app: todoapp + ports: + - port: 80 + name: node-port + targetPort: 8080 + protocol: TCP + type: LoadBalancer + +--- +apiVersion: v1 +kind: ReplicationController +metadata: + name: todo-replicas + labels: + name: node-todo + app: todoapp +spec: + replicas: 2 + template: + metadata: + name: todo-pod + labels: + name: node-todo + app: todoapp + spec: + containers: + - name: todo-container + image: index.docker.io/uzzal2k5/node-todo:latest + env: + - name: MONGODB_HOST + value: mongodb + ports: + - containerPort: 8080 + #imagePullPolicy: Always +--- +apiVersion: v1 +kind: Service +metadata: + name: mongodb + labels: + name: mongodb + app: database +spec: + selector: + name: mongodb + app: database + ports: + - port: 27017 + name: db-port + targetPort: 27017 + +--- +apiVersion: v1 +kind: Pod +metadata: + name: mongodb + labels: + name: mongodb + app: database +spec: + containers: + - name: mongodb + image: mongo:4.0.2 + ports: + - containerPort: 27017 \ No newline at end of file diff --git a/k8s-node-todo.yml b/k8s-node-todo.yml index 2f9ab731d..ea9b2e8c1 100644 --- a/k8s-node-todo.yml +++ b/k8s-node-todo.yml @@ -14,6 +14,7 @@ spec: - port: 80 name: node-port targetPort: 8080 + protocol: TCP type: LoadBalancer --- From 3122805be77b6125a7e0a2745d70ce6f0a2f5af1 Mon Sep 17 00:00:00 2001 From: "Md. Shafiqul Islam" Date: Sun, 23 Sep 2018 13:38:11 +0600 Subject: [PATCH 14/34] dockerIgnore --- .dockerignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.dockerignore b/.dockerignore index 88117a69f..9fe4451b5 100644 --- a/.dockerignore +++ b/.dockerignore @@ -7,4 +7,7 @@ README_es.md mongodb mongodb/* docker-compose.yml -license \ No newline at end of file +license +aws-k8s-replication.yml +k8s-node-todo.yml +Jenkinsfile From fe7f57d82d693044deb45b3b661d125a5ff71af6 Mon Sep 17 00:00:00 2001 From: "Md. Shafiqul Islam" Date: Sun, 23 Sep 2018 20:44:46 +0600 Subject: [PATCH 15/34] Jenkinsfile & Doccerment Write --- Jenkinsfile | 2 +- docs/DeployingProcedure.md | 334 +++++++++++++++++++++++++++++++++++++ 2 files changed, 335 insertions(+), 1 deletion(-) create mode 100644 docs/DeployingProcedure.md diff --git a/Jenkinsfile b/Jenkinsfile index 698c42880..b3ba17d88 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -7,7 +7,7 @@ def GIT_REPOSITORY_NAME = "https://github.com/uzzal2k5/node-todo.git" def IMAGE_NAME = "node-todo" def todoImages - +def version, revision # Version & Release Specified Here diff --git a/docs/DeployingProcedure.md b/docs/DeployingProcedure.md new file mode 100644 index 000000000..a116f0222 --- /dev/null +++ b/docs/DeployingProcedure.md @@ -0,0 +1,334 @@ +1 : Write Dockerfile for node-todo nodeJs app to build docker images + +2 : Test Build with manual build command + + docker build -t node-todo . + +3 : Write docker-compose file to deploy Container Service + + version: '2.0' + services: + # mongoDB + mongodb: + image: mongo:4.0.2 + hostname: mongodb + container_name: mongodb + #environment: + # MONGO_INITDB_ROOT_USERNAME: "uzzal" + # MONGO_INITDB_ROOT_PASSWORD: "password" + ports: + - "27017:27017" + restart: always + + # node-todo App + node-todo: + build: . + container_name: todo-container + hostname: node-todo + ports: + - 80:8080/tcp + tty: true + links: + - mongodb + depends_on: + - mongodb + restart: always + + + Note: Official mongoDB docker image are used here. I found some issue with USERNAME & PASSWORD + For that reasion, I leave USERNAEM & PASSWORD + +4 : Found Some Issue with Database Connection [Not Connecting Remote Database], So that I modified server.js Looking Database connection on 127.0.0.1:27017 + + //mongoose.connect(database.localUrl); + + mongoose.connect(database.remoteUrl); + +5 : Inthis point change DATABASE Connection as bellow + + config/database.js + --- + + module.exports = { + remoteUrl : 'mongodb://username:password@mongodb:27017/tododb', + localUrl: 'mongodb://localhost/meanstacktutorials' + }; + +6 : In step 5, I fall in authentication issue with database. After digging into depp on MongoDB Container, I found there was Issue with that official Image Creation, USERS are getting permission into test DB by default + +If I create user into MongoDB Container, That user get permission by default for test DB + + db.createUser({ + user: 'username', + pwd: 'password', + roles: [ { role: "dbOwner", db: "tododb" }, + { role: "dbAdmin", db: "tododb" }, + { role: "readWrite", db: "tododb" } + ]}) + +In this stage I build a new MongoDB image using Ubuntu:16.04 and and Test everything working fine with - + + module.exports = { + remoteUrl : 'mongodb://username:password@mongodb:27017/tododb', + localUrl: 'mongodb://localhost/meanstacktutorials' + }; + +After that I decided to use database connection without USERNAME & PASSWORD, as this is a test project. + + module.exports = { + remoteUrl : 'mongodb://mongodb:27017/tododb', + localUrl: 'mongodb://localhost/meanstacktutorials' + }; + +

Note :

In production, I will use custom MongoDB docker image with USER Authentication. + +7 : I write YML file to deploy node-todo application in kubernetes. I use [Kubernetes Playground | Katacoda](https://www.katacoda.com/courses/kubernetes/playground) to test deploy. + +I write two separate Kubernetes YML files. One for Single container with kind: Pod & seconde one I write for ReplicationController + + +k8s-node-todo.yml + + --- + apiVersion: v1 + kind: Service + metadata: + name: todo-service + labels: + name: todo-service + app: nodeapp + spec: + selector: + name: node-todo + app: todoapp + ports: + - port: 80 + name: node-port + targetPort: 8080 + protocol: TCP + type: LoadBalancer + + --- + apiVersion: v1 + kind: Pod + metadata: + name: todo-pod + labels: + name: node-todo + app: todoapp + spec: + containers: + - name: todo-container + image: index.docker.io/uzzal2k5/node-todo:latest + env: + - name: MONGODB_HOST + value: mongodb + ports: + - containerPort: 8080 + --- + apiVersion: v1 + kind: Service + metadata: + name: mongodb + labels: + name: mongodb + app: database + spec: + selector: + name: mongodb + app: database + ports: + - port: 27017 + name: db-port + targetPort: 27017 + + --- + apiVersion: v1 + kind: Pod + metadata: + name: mongodb + labels: + name: mongodb + app: database + spec: + containers: + - name: mongodb + image: mongo:4.0.2 + ports: + - containerPort: 27017 + +aws-k8s-replication.yml + + --- + apiVersion: v1 + kind: Service + metadata: + name: todo-service + labels: + name: todo-service + app: nodeapp + spec: + selector: + name: node-todo + app: todoapp + ports: + - port: 80 + name: node-port + targetPort: 8080 + protocol: TCP + type: LoadBalancer + + --- + apiVersion: v1 + kind: ReplicationController + metadata: + name: todo-replicas + labels: + name: node-todo + app: todoapp + spec: + replicas: 2 + template: + metadata: + name: todo-pod + labels: + name: node-todo + app: todoapp + spec: + containers: + - name: todo-container + image: index.docker.io/uzzal2k5/node-todo:latest + env: + - name: MONGODB_HOST + value: mongodb + ports: + - containerPort: 8080 + #imagePullPolicy: Always + --- + apiVersion: v1 + kind: Service + metadata: + name: mongodb + labels: + name: mongodb + app: database + spec: + selector: + name: mongodb + app: database + ports: + - port: 27017 + name: db-port + targetPort: 27017 + + --- + apiVersion: v1 + kind: Pod + metadata: + name: mongodb + labels: + name: mongodb + app: database + spec: + containers: + - name: mongodb + image: mongo:4.0.2 + ports: + - containerPort: 27017 + +Note: Need to active [uncomment] #imagePullPolicy: Always , If use AWS ECR [ AWS Docker Registry ] + + +8 : Finally I write Jenkinsfile to automate (CI/CD) build node-todo image , push it to docker hub registry. + + +Jenkinsfile + + #!groovy + import groovy.json.JsonSlurperClassic + def SERVER_TO_DEPLOY = "tcp://192.168.8.62:2376" + def DOCKER_IMAGE_REGISTRY = "index.docker.io/uzzal2k5" + def GIT_REPOSITORY_NAME = "https://github.com/uzzal2k5/node-todo.git" + def BRANCH = "master" + + def IMAGE_NAME = "node-todo" + def todoImages + def version, revision + + + // Version & Release Specified Here + def getVersion(def projectJson){ + def slurper = new JsonSlurperClassic() + project = slurper.parseText(projectJson) + slurper = null + return project.version.split('-')[0] + } + + + // REPOSITORY CLONE FROM GIT + def CloneFromGit( REPOSITORY_NAME, BRANCH ){ + def version, revision + try { + git(branch: "${BRANCH}", + changelog: true, + credentialsId: 'github-credentials', + poll: true, + url: "${REPOSITORY_NAME }" + ) + } + catch (Exception e) { + println 'Some Exception happened here ' + throw e + + } + finally { + revision = version + "-" + sprintf("%04d", env.BUILD_NUMBER.toInteger()) + println "Start building revision $revision" + + } + return this + } + + + // DOCKER IMAGE BUILD & PUSH TO REGISTRY + def DockerImageBuild( DOCKER_BUILD_SERVER, DOCKER_IMAGE_REGISTRY, IMAGE_NAME ){ + + // DOCKER IMAGE BUILD + withDockerServer([uri: "${DOCKER_BUILD_SERVER}"]) { + stage('IMAGE BUILD'){ + + todoImages = docker.build("${DOCKER_IMAGE_REGISTRY}/${IMAGE_NAME}") + + + } + + //PUSH TO REGISTRY + stage('PUSH IMAGE'){ + withDockerRegistry(credentialsId: 'DOCKERID', url: '') { + todoImages.push("${env.BUILD_NUMBER}") + todoImages.push("latest") + } + + } + + } + return this + } + + // BUILD NODE + node { + + + stage('GIT CLONE') { + CloneFromGit(GIT_REPOSITORY_NAME, BRANCH) + + } + + DockerImageBuild(SERVER_TO_DEPLOY,DOCKER_IMAGE_REGISTRY, IMAGE_NAME) + + + //NODE END + } + + +This Jekinsfile will automate builing docker image for this application according to Dockerfile \ No newline at end of file From 4f075eb2d3366dc4bf36a373e940cbc86749265f Mon Sep 17 00:00:00 2001 From: "Md. Shafiqul Islam" Date: Sun, 23 Sep 2018 20:47:59 +0600 Subject: [PATCH 16/34] Update Doccerment Write --- docs/DeployingProcedure.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/docs/DeployingProcedure.md b/docs/DeployingProcedure.md index a116f0222..a8f931fef 100644 --- a/docs/DeployingProcedure.md +++ b/docs/DeployingProcedure.md @@ -1,5 +1,26 @@ 1 : Write Dockerfile for node-todo nodeJs app to build docker images + FROM node:alpine + MAINTAINER uzzal, uzzal2k5@gmail.com + WORKDIR /node-todo + COPY . . + RUN npm install + + # CONFIG STANDARD ERROR LOG + RUN ln -sf /dev/stdout /var/log/access.log \ + && ln -sf /dev/stderr /var/log/error.log + + # SET HEALTH CHECK + HEALTHCHECK --interval=5s \ + --timeout=5s \ + CMD curl -f http://127.0.0.1:8000 || exit 1 + + RUN apk add mongodb + EXPOSE 8080 + + + ENTRYPOINT ["node", "server.js"] + 2 : Test Build with manual build command docker build -t node-todo . From 8fe28e9301078821cd087f2bccc20a56205192d6 Mon Sep 17 00:00:00 2001 From: Md Shafiqul Islam Date: Fri, 5 Oct 2018 16:37:58 +0600 Subject: [PATCH 17/34] Update Jenkinsfile --- Jenkinsfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index b3ba17d88..7215c33aa 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -10,7 +10,7 @@ def todoImages def version, revision -# Version & Release Specified Here +//Version & Release Specified Here def getVersion(def projectJson){ def slurper = new JsonSlurperClassic() project = slurper.parseText(projectJson) @@ -19,7 +19,7 @@ def getVersion(def projectJson){ } -# REPOSITORY CLONE FROM GIT +// REPOSITORY CLONE FROM GIT def CloneFromGit( REPOSITORY_NAME ){ def version, revision try { @@ -44,7 +44,7 @@ def CloneFromGit( REPOSITORY_NAME ){ } -# DOCKER IMAGE BUILD & PUSH TO REGISTRY +// DOCKER IMAGE BUILD & PUSH TO REGISTRY def DockerImageBuild( DOCKER_BUILD_SERVER, DOCKER_IMAGE_REGISTRY, IMAGE_NAME ){ // DOCKER IMAGE BUILD From 348c1e4d611f2d880d646d4739af451361f0a943 Mon Sep 17 00:00:00 2001 From: Md Shafiqul Islam Date: Fri, 5 Oct 2018 16:41:19 +0600 Subject: [PATCH 18/34] Update Jenkinsfile --- Jenkinsfile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 7215c33aa..82a3af8d0 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -8,6 +8,7 @@ def GIT_REPOSITORY_NAME = "https://github.com/uzzal2k5/node-todo.git" def IMAGE_NAME = "node-todo" def todoImages def version, revision +def BRANCH = 'master' //Version & Release Specified Here @@ -20,10 +21,10 @@ def getVersion(def projectJson){ // REPOSITORY CLONE FROM GIT -def CloneFromGit( REPOSITORY_NAME ){ +def CloneFromGit( REPOSITORY_NAME,BRANCH ){ def version, revision try { - git(branch: "${params.BRANCH}", + git(branch: "${BRANCH}", changelog: true, credentialsId: 'github-credentials', poll: true, @@ -74,7 +75,7 @@ node { stage('GIT CLONE') { - CloneFromGit(GIT_REPOSITORY_NAME) + CloneFromGit(GIT_REPOSITORY_NAME, BRANCH) } From fb94f903495a6791b6a940765fcc769b7195645d Mon Sep 17 00:00:00 2001 From: Md Shafiqul Islam Date: Fri, 5 Oct 2018 16:47:42 +0600 Subject: [PATCH 19/34] Update Jenkinsfile --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 82a3af8d0..6f56ecefc 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -79,7 +79,7 @@ node { } - DockerImageBuild(SERVER_TO_DEPLOY,DOCKER_IMAGE_REGISTRY, IMAGE_NAME) + DockerImageBuild(DOCKER_BUILD_SERVER,DOCKER_IMAGE_REGISTRY, IMAGE_NAME) //NODE END From 1c8bec387ca3a20fc110c876b9418c40dbdd8cf6 Mon Sep 17 00:00:00 2001 From: Md Shafiqul Islam Date: Fri, 5 Oct 2018 17:31:46 +0600 Subject: [PATCH 20/34] Update Jenkinsfile --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 6f56ecefc..6a0d71aef 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,6 +1,6 @@ #!groovy import groovy.json.JsonSlurperClassic -def DOCKER_BUILD_SERVER = "tcp://10.10.10.10:2376" +def DOCKER_BUILD_SERVER = "tcp://10.10.10.98:2376" def DOCKER_IMAGE_REGISTRY = "index.docker.io/uzzal2k5/" def GIT_REPOSITORY_NAME = "https://github.com/uzzal2k5/node-todo.git" From 369a5d38d64724d730e0a71f8c33d7e04f8bab7d Mon Sep 17 00:00:00 2001 From: Md Shafiqul Islam Date: Fri, 5 Oct 2018 18:09:12 +0600 Subject: [PATCH 21/34] Update Jenkinsfile --- Jenkinsfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 6a0d71aef..b8bb57185 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -52,7 +52,7 @@ def DockerImageBuild( DOCKER_BUILD_SERVER, DOCKER_IMAGE_REGISTRY, IMAGE_NAME ){ withDockerServer([uri: "${DOCKER_BUILD_SERVER}"]) { stage('IMAGE BUILD'){ - todoImages = docker.build("${DOCKER_IMAGE_REGISTRY}/${IMAGE_NAME}") + todoImages = docker.build("${IMAGE_NAME}") } @@ -60,8 +60,8 @@ def DockerImageBuild( DOCKER_BUILD_SERVER, DOCKER_IMAGE_REGISTRY, IMAGE_NAME ){ //PUSH TO REGISTRY stage('PUSH IMAGE'){ withDockerRegistry(url: "${DOCKER_IMAGE_REGISTRY}") { - todoImages.push("${IMAGE_NAME}:${env.BUILD_NUMBER}") - todoImages.push("${IMAGE_NAME}:latest") + todoImages.push("${env.BUILD_NUMBER}") + todoImages.push("latest") } } From 81513cb716e111ff2be6453843d00b3d93131484 Mon Sep 17 00:00:00 2001 From: Md Shafiqul Islam Date: Fri, 5 Oct 2018 19:24:01 +0600 Subject: [PATCH 22/34] Update Jenkinsfile --- Jenkinsfile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index b8bb57185..0fca2e794 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,7 +1,7 @@ #!groovy import groovy.json.JsonSlurperClassic def DOCKER_BUILD_SERVER = "tcp://10.10.10.98:2376" -def DOCKER_IMAGE_REGISTRY = "index.docker.io/uzzal2k5/" +def DOCKER_IMAGE_REPOSITORY = "uzzal2k5" def GIT_REPOSITORY_NAME = "https://github.com/uzzal2k5/node-todo.git" @@ -46,20 +46,20 @@ def CloneFromGit( REPOSITORY_NAME,BRANCH ){ // DOCKER IMAGE BUILD & PUSH TO REGISTRY -def DockerImageBuild( DOCKER_BUILD_SERVER, DOCKER_IMAGE_REGISTRY, IMAGE_NAME ){ +def DockerImageBuild( DOCKER_BUILD_SERVER, IMAGE_REPOSITORY, IMAGE_NAME ){ // DOCKER IMAGE BUILD withDockerServer([uri: "${DOCKER_BUILD_SERVER}"]) { stage('IMAGE BUILD'){ - todoImages = docker.build("${IMAGE_NAME}") + todoImages = docker.build("${IMAGE_REPOSITORY}/${IMAGE_NAME}") } //PUSH TO REGISTRY stage('PUSH IMAGE'){ - withDockerRegistry(url: "${DOCKER_IMAGE_REGISTRY}") { + withDockerRegistry(credentialsId: 'dockerhub_credential', url: '') { todoImages.push("${env.BUILD_NUMBER}") todoImages.push("latest") } @@ -79,7 +79,7 @@ node { } - DockerImageBuild(DOCKER_BUILD_SERVER,DOCKER_IMAGE_REGISTRY, IMAGE_NAME) + DockerImageBuild(DOCKER_BUILD_SERVER,DOCKER_IMAGE_REPOSITORY, IMAGE_NAME) //NODE END From d22922d456fb10c4e2faee9224cf1ae3b964c2af Mon Sep 17 00:00:00 2001 From: Md Shafiqul Islam Date: Wed, 1 Jul 2020 05:24:02 +0600 Subject: [PATCH 23/34] Update Jenkinsfile --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 0fca2e794..2405d7323 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,6 +1,6 @@ #!groovy import groovy.json.JsonSlurperClassic -def DOCKER_BUILD_SERVER = "tcp://10.10.10.98:2376" +def DOCKER_BUILD_SERVER = "tcp://10.5.52.146:2376" def DOCKER_IMAGE_REPOSITORY = "uzzal2k5" def GIT_REPOSITORY_NAME = "https://github.com/uzzal2k5/node-todo.git" From f82d104544e08ecc0cd22e7b3c0934b1d77b2821 Mon Sep 17 00:00:00 2001 From: Md Shafiqul Islam Date: Wed, 1 Jul 2020 05:27:00 +0600 Subject: [PATCH 24/34] Update Jenkinsfile --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 2405d7323..e8bb2178b 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,6 +1,6 @@ #!groovy import groovy.json.JsonSlurperClassic -def DOCKER_BUILD_SERVER = "tcp://10.5.52.146:2376" +def DOCKER_BUILD_SERVER = "unix:///var/run/docker.sock" def DOCKER_IMAGE_REPOSITORY = "uzzal2k5" def GIT_REPOSITORY_NAME = "https://github.com/uzzal2k5/node-todo.git" From bb6531ff212b0339502f8e4655e190de10223c4b Mon Sep 17 00:00:00 2001 From: "Md. Shafiqul Islam" Date: Sun, 21 May 2023 10:13:23 +0600 Subject: [PATCH 25/34] Integrate Synk --- Jenkinsfile | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index e8bb2178b..b7d089674 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -26,7 +26,7 @@ def CloneFromGit( REPOSITORY_NAME,BRANCH ){ try { git(branch: "${BRANCH}", changelog: true, - credentialsId: 'github-credentials', + credentialsId: 'github_access_credentials', poll: true, url: "${REPOSITORY_NAME }" ) @@ -69,6 +69,23 @@ def DockerImageBuild( DOCKER_BUILD_SERVER, IMAGE_REPOSITORY, IMAGE_NAME ){ } return this } +def ScanWithSynk(){ + tools { + snyk 'synk-latest' + } + stage('Scan') { + snykSecurity( + organisation: 'uzzal2k5', + projectName: 'nodejs_demo_snyk', + severity: 'medium', + snykInstallation: 'Snyk', + snykTokenId: 'synk_api_token', + targetFile: 'Dockerfile' + failOnIssues: 'false' + ) + + } +} // BUILD NODE node { @@ -78,8 +95,8 @@ node { CloneFromGit(GIT_REPOSITORY_NAME, BRANCH) } - - DockerImageBuild(DOCKER_BUILD_SERVER,DOCKER_IMAGE_REPOSITORY, IMAGE_NAME) + ScanWithSynk() +// DockerImageBuild(DOCKER_BUILD_SERVER,DOCKER_IMAGE_REPOSITORY, IMAGE_NAME) //NODE END From 4d7eed1172c0888996872b3cdc33339bd1a72cb1 Mon Sep 17 00:00:00 2001 From: "Md. Shafiqul Islam" Date: Sun, 21 May 2023 10:41:36 +0600 Subject: [PATCH 26/34] Jenkinsfile --- Jenkinsfile | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index b7d089674..7b1b97f9a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -70,9 +70,7 @@ def DockerImageBuild( DOCKER_BUILD_SERVER, IMAGE_REPOSITORY, IMAGE_NAME ){ return this } def ScanWithSynk(){ - tools { - snyk 'synk-latest' - } + stage('Scan') { snykSecurity( organisation: 'uzzal2k5', @@ -81,7 +79,6 @@ def ScanWithSynk(){ snykInstallation: 'Snyk', snykTokenId: 'synk_api_token', targetFile: 'Dockerfile' - failOnIssues: 'false' ) } @@ -90,13 +87,15 @@ def ScanWithSynk(){ // BUILD NODE node { - + tools { + snyk 'synk-latest' + } stage('GIT CLONE') { CloneFromGit(GIT_REPOSITORY_NAME, BRANCH) } - ScanWithSynk() -// DockerImageBuild(DOCKER_BUILD_SERVER,DOCKER_IMAGE_REPOSITORY, IMAGE_NAME) + ScanWithSynk() + DockerImageBuild(DOCKER_BUILD_SERVER,DOCKER_IMAGE_REPOSITORY, IMAGE_NAME) //NODE END From 52ab680b84fb6dab1e4ba9d2642485ba6c26e223 Mon Sep 17 00:00:00 2001 From: "Md. Shafiqul Islam" Date: Tue, 23 May 2023 03:40:36 +0600 Subject: [PATCH 27/34] Jenkins --- Jenkinsfile | 67 ++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 46 insertions(+), 21 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 7b1b97f9a..795320778 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -26,7 +26,7 @@ def CloneFromGit( REPOSITORY_NAME,BRANCH ){ try { git(branch: "${BRANCH}", changelog: true, - credentialsId: 'github_access_credentials', + credentialsId: 'github_credentials', poll: true, url: "${REPOSITORY_NAME }" ) @@ -51,52 +51,77 @@ def DockerImageBuild( DOCKER_BUILD_SERVER, IMAGE_REPOSITORY, IMAGE_NAME ){ // DOCKER IMAGE BUILD withDockerServer([uri: "${DOCKER_BUILD_SERVER}"]) { stage('IMAGE BUILD'){ - + steps{ todoImages = docker.build("${IMAGE_REPOSITORY}/${IMAGE_NAME}") - + } } +// stage('SCAN'){ +// steps{ +// script{ +// snykSecurity( +// organisation: 'uzzal2k5', +// projectName: 'uzzal2k5/node-todo', +// severity: 'medium', +// snykInstallation: 'snyk-latest', +// snykTokenId: 'synk_api_token', +// failOnIssues: false +// ) +// def variable = sh( +// script: 'snyk container test uzzal2k5/node-todo:latest --severity-threshold=medium', +// returnStatus: true +// ) +// echo "Error Code = ${variable}" +// if (variable !=0){ +// echo "Alert for Vulnerability Found" +// } +// } +// } +// } //PUSH TO REGISTRY stage('PUSH IMAGE'){ - withDockerRegistry(credentialsId: 'dockerhub_credential', url: '') { + steps{ + withDockerRegistry(credentialsId: 'dockerhub_credentials', url: '') { todoImages.push("${env.BUILD_NUMBER}") todoImages.push("latest") } + } } } return this } -def ScanWithSynk(){ - - stage('Scan') { - snykSecurity( - organisation: 'uzzal2k5', - projectName: 'nodejs_demo_snyk', - severity: 'medium', - snykInstallation: 'Snyk', - snykTokenId: 'synk_api_token', - targetFile: 'Dockerfile' - ) - - } -} +// def ScanWithSynk(){ +// snykSecurity( +// organisation: 'uzzal2k5', +// projectName: 'uzzal2k5/node-todo', +// severity: 'medium', +// snykInstallation: 'snyk-latest', +// snykTokenId: 'synk_api_token', +// targetFile: '/Users/uzzal/.jenkins/workspace/synk-project/Dockerfile', +// failOnIssues: false +// ) +// +// return this +// } // BUILD NODE node { + agent any tools { - snyk 'synk-latest' + snyk 'snyk-latest' } + stages { stage('GIT CLONE') { - CloneFromGit(GIT_REPOSITORY_NAME, BRANCH) + CloneFromGit(GIT_REPOSITORY_NAME, BRANCH) } - ScanWithSynk() DockerImageBuild(DOCKER_BUILD_SERVER,DOCKER_IMAGE_REPOSITORY, IMAGE_NAME) + } //NODE END } From 336857123b3553440d95d7f0a7189327fa6d4ec5 Mon Sep 17 00:00:00 2001 From: "Md. Shafiqul Islam" Date: Tue, 23 May 2023 03:43:34 +0600 Subject: [PATCH 28/34] Jenkins --- Jenkinsfile | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 795320778..517ebb57c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -51,10 +51,7 @@ def DockerImageBuild( DOCKER_BUILD_SERVER, IMAGE_REPOSITORY, IMAGE_NAME ){ // DOCKER IMAGE BUILD withDockerServer([uri: "${DOCKER_BUILD_SERVER}"]) { stage('IMAGE BUILD'){ - steps{ todoImages = docker.build("${IMAGE_REPOSITORY}/${IMAGE_NAME}") - } - } // stage('SCAN'){ // steps{ @@ -81,12 +78,10 @@ def DockerImageBuild( DOCKER_BUILD_SERVER, IMAGE_REPOSITORY, IMAGE_NAME ){ //PUSH TO REGISTRY stage('PUSH IMAGE'){ - steps{ withDockerRegistry(credentialsId: 'dockerhub_credentials', url: '') { todoImages.push("${env.BUILD_NUMBER}") todoImages.push("latest") } - } } @@ -111,17 +106,12 @@ def DockerImageBuild( DOCKER_BUILD_SERVER, IMAGE_REPOSITORY, IMAGE_NAME ){ node { agent any - tools { - snyk 'snyk-latest' - } - stages { stage('GIT CLONE') { CloneFromGit(GIT_REPOSITORY_NAME, BRANCH) } DockerImageBuild(DOCKER_BUILD_SERVER,DOCKER_IMAGE_REPOSITORY, IMAGE_NAME) - } //NODE END } From 449c4c235086273d50586aace1cc4339799d4a7d Mon Sep 17 00:00:00 2001 From: "Md. Shafiqul Islam" Date: Tue, 23 May 2023 03:58:12 +0600 Subject: [PATCH 29/34] Jenkins --- Jenkinsfile | 68 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 45 insertions(+), 23 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 517ebb57c..2a4274dfc 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -46,13 +46,13 @@ def CloneFromGit( REPOSITORY_NAME,BRANCH ){ // DOCKER IMAGE BUILD & PUSH TO REGISTRY -def DockerImageBuild( DOCKER_BUILD_SERVER, IMAGE_REPOSITORY, IMAGE_NAME ){ - - // DOCKER IMAGE BUILD - withDockerServer([uri: "${DOCKER_BUILD_SERVER}"]) { - stage('IMAGE BUILD'){ - todoImages = docker.build("${IMAGE_REPOSITORY}/${IMAGE_NAME}") - } +// def DockerImageBuild( DOCKER_BUILD_SERVER, IMAGE_REPOSITORY, IMAGE_NAME ){ +// +// // DOCKER IMAGE BUILD +// withDockerServer([uri: "${DOCKER_BUILD_SERVER}"]) { +// stage('IMAGE BUILD'){ +// todoImages = docker.build("${IMAGE_REPOSITORY}/${IMAGE_NAME}") +// } // stage('SCAN'){ // steps{ // script{ @@ -75,19 +75,19 @@ def DockerImageBuild( DOCKER_BUILD_SERVER, IMAGE_REPOSITORY, IMAGE_NAME ){ // } // } // } - - //PUSH TO REGISTRY - stage('PUSH IMAGE'){ - withDockerRegistry(credentialsId: 'dockerhub_credentials', url: '') { - todoImages.push("${env.BUILD_NUMBER}") - todoImages.push("latest") - } - - } - - } - return this -} +// +// //PUSH TO REGISTRY +// stage('PUSH IMAGE'){ +// withDockerRegistry(credentialsId: 'dockerhub_credentials', url: '') { +// todoImages.push("${env.BUILD_NUMBER}") +// todoImages.push("latest") +// } +// +// } +// +// } +// return this +// } // def ScanWithSynk(){ // snykSecurity( // organisation: 'uzzal2k5', @@ -105,12 +105,34 @@ def DockerImageBuild( DOCKER_BUILD_SERVER, IMAGE_REPOSITORY, IMAGE_NAME ){ // BUILD NODE node { agent any + stages { stage('GIT CLONE') { + steps { + CloneFromGit(GIT_REPOSITORY_NAME, BRANCH) + } + } + + withDockerServer([uri: "${DOCKER_BUILD_SERVER}"]) { + stage('IMAGE BUILD'){ + steps { + todoImages = docker.build("${IMAGE_REPOSITORY}/${IMAGE_NAME}") + } + } + stage('PUSH IMAGE'){ + steps { + withDockerRegistry(credentialsId: 'dockerhub_credentials', url: '') { + todoImages.push("${env.BUILD_NUMBER}") + todoImages.push("latest") + } + } + } + } + } + } + +// DockerImageBuild(DOCKER_BUILD_SERVER,DOCKER_IMAGE_REPOSITORY, IMAGE_NAME) - CloneFromGit(GIT_REPOSITORY_NAME, BRANCH) - } - DockerImageBuild(DOCKER_BUILD_SERVER,DOCKER_IMAGE_REPOSITORY, IMAGE_NAME) //NODE END From 64dbf5082126b6c367c9cb6ec35ea003aa4c2bab Mon Sep 17 00:00:00 2001 From: "Md. Shafiqul Islam" Date: Tue, 23 May 2023 03:58:27 +0600 Subject: [PATCH 30/34] Jenkins --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 2a4274dfc..82401e08d 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -103,7 +103,7 @@ def CloneFromGit( REPOSITORY_NAME,BRANCH ){ // } // BUILD NODE -node { +pipeline { agent any stages { From 5d471199262656d8db6f89ed136c390ceea499e5 Mon Sep 17 00:00:00 2001 From: "Md. Shafiqul Islam" Date: Tue, 23 May 2023 04:31:04 +0600 Subject: [PATCH 31/34] Dockerfile --- Dockerfile | 6 +++++- Jenkinsfile | 30 ++++++++++++------------------ 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0bd9cd626..77111be80 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,7 +13,11 @@ HEALTHCHECK --interval=5s \ --timeout=5s \ CMD curl -f http://127.0.0.1:8000 || exit 1 -RUN apk add mongodb +RUN echo 'http://dl-cdn.alpinelinux.org/alpine/v3.6/main' >> /etc/apk/repositories +RUN echo 'http://dl-cdn.alpinelinux.org/alpine/v3.6/community' >> /etc/apk/repositories +RUN apk update +RUN apk add mongodb=3.4.4-r0 +RUN mongo --version EXPOSE 8080 diff --git a/Jenkinsfile b/Jenkinsfile index 82401e08d..81beb1112 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -3,10 +3,6 @@ import groovy.json.JsonSlurperClassic def DOCKER_BUILD_SERVER = "unix:///var/run/docker.sock" def DOCKER_IMAGE_REPOSITORY = "uzzal2k5" def GIT_REPOSITORY_NAME = "https://github.com/uzzal2k5/node-todo.git" - - -def IMAGE_NAME = "node-todo" -def todoImages def version, revision def BRANCH = 'master' @@ -104,31 +100,29 @@ def CloneFromGit( REPOSITORY_NAME,BRANCH ){ // BUILD NODE pipeline { +environment { + IMAGE_NAME = "node-todo" + todoImages = '' + IMAGE_REPOSITORY = "uzzal2k5" + } + agent any stages { - stage('GIT CLONE') { + stage('GIT CLONE') { steps { CloneFromGit(GIT_REPOSITORY_NAME, BRANCH) } } - - withDockerServer([uri: "${DOCKER_BUILD_SERVER}"]) { - stage('IMAGE BUILD'){ - steps { + stage('IMAGE BUILD'){ + steps { + script { todoImages = docker.build("${IMAGE_REPOSITORY}/${IMAGE_NAME}") } } - stage('PUSH IMAGE'){ - steps { - withDockerRegistry(credentialsId: 'dockerhub_credentials', url: '') { - todoImages.push("${env.BUILD_NUMBER}") - todoImages.push("latest") - } - } - } } - } + + } // DockerImageBuild(DOCKER_BUILD_SERVER,DOCKER_IMAGE_REPOSITORY, IMAGE_NAME) From d7cec1cb55318e8fef647edca2631f0c272ab69a Mon Sep 17 00:00:00 2001 From: "Md. Shafiqul Islam" Date: Tue, 23 May 2023 04:41:01 +0600 Subject: [PATCH 32/34] Dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 77111be80..10dc3c075 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,7 +16,7 @@ HEALTHCHECK --interval=5s \ RUN echo 'http://dl-cdn.alpinelinux.org/alpine/v3.6/main' >> /etc/apk/repositories RUN echo 'http://dl-cdn.alpinelinux.org/alpine/v3.6/community' >> /etc/apk/repositories RUN apk update -RUN apk add mongodb=3.4.4-r0 +#RUN apk add mongodb=3.4.4-r0 RUN mongo --version EXPOSE 8080 From 41e1d2a5687e3925117f9c0133130f0d23c0b56b Mon Sep 17 00:00:00 2001 From: "Md. Shafiqul Islam" Date: Tue, 23 May 2023 04:49:00 +0600 Subject: [PATCH 33/34] Dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 10dc3c075..469749ae3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,7 +17,7 @@ RUN echo 'http://dl-cdn.alpinelinux.org/alpine/v3.6/main' >> /etc/apk/repositori RUN echo 'http://dl-cdn.alpinelinux.org/alpine/v3.6/community' >> /etc/apk/repositories RUN apk update #RUN apk add mongodb=3.4.4-r0 -RUN mongo --version +#RUN mongo --version EXPOSE 8080 From 533a0def2aafc478692f2583c2bc09eda9719b6d Mon Sep 17 00:00:00 2001 From: "Md. Shafiqul Islam" Date: Tue, 23 May 2023 04:51:41 +0600 Subject: [PATCH 34/34] Dockerfile --- Jenkinsfile | 45 +++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 81beb1112..bac83bffc 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -49,28 +49,7 @@ def CloneFromGit( REPOSITORY_NAME,BRANCH ){ // stage('IMAGE BUILD'){ // todoImages = docker.build("${IMAGE_REPOSITORY}/${IMAGE_NAME}") // } -// stage('SCAN'){ -// steps{ -// script{ -// snykSecurity( -// organisation: 'uzzal2k5', -// projectName: 'uzzal2k5/node-todo', -// severity: 'medium', -// snykInstallation: 'snyk-latest', -// snykTokenId: 'synk_api_token', -// failOnIssues: false -// ) -// def variable = sh( -// script: 'snyk container test uzzal2k5/node-todo:latest --severity-threshold=medium', -// returnStatus: true -// ) -// echo "Error Code = ${variable}" -// if (variable !=0){ -// echo "Alert for Vulnerability Found" -// } -// } -// } -// } + // // //PUSH TO REGISTRY // stage('PUSH IMAGE'){ @@ -121,6 +100,28 @@ environment { } } } + stage('SCAN'){ + steps{ + script{ + snykSecurity( + organisation: 'uzzal2k5', + projectName: 'uzzal2k5/node-todo', + severity: 'medium', + snykInstallation: 'snyk-latest', + snykTokenId: 'synk_api_token', + failOnIssues: false + ) + def variable = sh( + script: 'snyk container test uzzal2k5/node-todo:latest --severity-threshold=medium', + returnStatus: true + ) + echo "Error Code = ${variable}" + if (variable !=0){ + echo "Alert for Vulnerability Found" + } + } + } + } }