Browse Source

Change Dockerfile, add Jenkinsfile, remoce healthcheck

Tomishinets Vladimir 4 years ago
parent
commit
2bb65fe889
5 changed files with 130 additions and 42 deletions
  1. 10 16
      Dockerfile
  2. 105 0
      devK8s.Jenkinsfile
  3. 0 15
      docker-entrypoint.sh
  4. 15 0
      entrypoint.sh
  5. 0 11
      healthcheck.sh

+ 10 - 16
Dockerfile

@@ -1,31 +1,25 @@
-FROM registry.sdsys.ru/iru/iru-base:7.6
-ENTRYPOINT ["/opt/docker-entrypoint.sh"]
-COPY docker-entrypoint.sh \
-     healthcheck.sh \
-     /opt/
+FROM jcr.infoclinica.ru/iru/iru-base:7.6
+ENTRYPOINT ["/entrypoint.sh"]
+COPY entrypoint.sh \
+     /
 ENV CATALINA_HOME="/opt/tomcat"
-ENV PATH=$CATALINA_HOME/bin:$PATH \
+ENV PATH="$PATH:/opt/tomcat/bin" \
     CATALINA_OPTS="-Dconfig.file=/etc/web-laboratory-admin/application.conf" \
     JAVA_HOME=/usr/java/default \
     JAVA_OPTS="-Xms512M -Xmx1024M -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true" \
-    WORKDIR=$CATALINA_HOME \
-    DB_CLUSTER=mongodb \
-    APPNET=labnetwork
+    WORKDIR=$CATALINA_HOME
+
 EXPOSE 8091 8080 8009 2551
-HEALTHCHECK --start-period=300s --interval=15s --timeout=5s --retries=2 CMD /opt/healthcheck.sh
-ARG repo=prod 
+ARG repo=prod
 ARG version=16.1
 
 RUN set -x \
            && curl https://repo.infoclinica.ru/yum/centos/sds-${repo}-${version}.repo -o /etc/yum.repos.d/sds-${repo}-${version}.repo \
            && yum install tomcat-8.0.26-01 -y \
-           && yum install iputils telnet nc -y \
-           && yum install web-laboratory-admin -y \
-#           && yum install -y http://192.168.201.50/yum/centos/6/prod/16.1/noarch/web-laboratory-admin-16.1-20190326194125.el6.noarch.rpm \
+           && yum install iputils telnet nc web-laboratory-admin -y \
            && yum clean all \
            && rm -rf /var/cache/yum \
-           && chmod +x /opt/docker-entrypoint.sh \
-           && chmod +x /opt/healthcheck.sh \
+           && chmod +x /entrypoint.sh \
            && chown -R tomcat:tomcat /etc/web-laboratory-admin \
            && cd /opt/tomcat/conf/web-laboratory-admin/localhost \
            && ln -s /etc/web-laboratory-admin/ROOT.xml ROOT.xml

+ 105 - 0
devK8s.Jenkinsfile

@@ -0,0 +1,105 @@
+@Library('jenkins-library@master') _
+def Label = "admin-lab-build-${UUID.randomUUID().toString()}"
+pipeline {
+  options {
+    buildDiscarder logRotator(numToKeepStr: '10')
+    disableConcurrentBuilds()
+  }
+  agent {
+    kubernetes {
+      label Label
+      yaml libraryResource('adminPodDefinition.yaml')
+    }
+  }
+  environment {
+    CLOUD='cloud-it-k8s'
+    DOCKER_IMAGE='lab/admin'
+    CHART_SUBPATH='helm/lab'
+    NAMESPACE='lab'
+    HELM_GIT_URL='ssh://git@git.sdsys.ru:8022/labportal/k8s.git'
+    APP_GIT_URL='ssh://git@git.sdsys.ru:8022/labportal/admin.git'
+    JENKINS_MAIL='jenkins.dev@sdsys.ru'
+    DOCKER_REGISTRY='jcr.infoclinica.ru'
+    PROJECT=''
+    CHART_NAME=''
+    CHART_PATH=''
+    HELM_DIR=''
+    TAG=''
+  }
+  parameters {
+    string(
+      name: "repo",
+      defaultValue: "prod",
+      description: "Repository to build and/or deploy from."
+    )
+    string(
+      name: "version",
+      defaultValue: "16.1",
+      description: "Witch version to build and/or deploy."
+    )
+    string(
+      name: "mailto",
+      defaultValue: "admin@sdsys.ru",
+      description: "Email which has to be notified."
+    )
+  }
+  stages {
+    stage("Prepare to Build") {
+      steps {
+        script {
+          gitOps.clone(HELM_GIT_URL)
+          HELM_DIR = dirOps.calculateDir(HELM_GIT_URL)
+          CHART_PATH = "${HELM_DIR}/${CHART_SUBPATH}"
+          PROJECT = DOCKER_IMAGE.split("/")[1]
+        }
+      }
+    }
+    stage("Build Image") {
+      steps {
+        script {
+          echo "Build Image with Kaniko"
+          REGISTRY = "${DOCKER_REGISTRY}/${DOCKER_IMAGE}"
+          ARGS = [ "repo=${repo}", "version=${version}" ]
+          TAG = "${repo}-${BUILD_NUMBER}"
+          k8sBuildImage.kaniko(REGISTRY, TAG, ARGS)
+        }
+      }
+    }
+    stage("Update Helm Chart values.yaml") {
+      steps {
+        script {
+          echo "Update Helm Chart"
+          def data = readYaml file: "${CHART_PATH}/values.yaml"
+          TAG_PATH = "images.${PROJECT}.dev"
+          yamlOps.updateBuilder(TAG_PATH, data, TAG)
+          writeYaml file: "${CHART_PATH}/values.yaml", data: data, overwrite: true
+        }
+      }
+    }
+    // stage("Update APP") {
+    //   steps {
+    //     script {
+    //       RELEASENAME = CHART_SUBPATH.split("/")[1]
+    //       try {
+    //         echo "Update APP"
+    //         k8sHelmOps.upgrade(CLOUD, NAMESPACE, RELEASENAME, CHART_PATH)
+    //       }
+    //       catch(err) {
+    //         echo "Recovering APP"
+    //         k8sHelmOps.rollback(CLOUD, NAMESPACE, RELEASENAME)
+    //         throw err
+    //       }
+    //     }
+    //   }
+    // }
+    // stage("Push changes to REPO") {
+    //   steps {
+    //     script {
+    //       echo "Push changes to Repo"
+    //       COMMIT = "Version update ${PROJECT}"
+    //       gitOps.push(HELM_DIR, COMMIT)
+    //     }
+    //   }
+    // }
+  }
+}

+ 0 - 15
docker-entrypoint.sh

@@ -1,15 +0,0 @@
-#!/usr/bin/env bash
-
-echo "Initial nslookup ${HOSTNAME}.${APPNET}"
-nslookup ${HOSTNAME}.${APPNET}
-while [ $? -ne 0 ]; do
-  echo "Waiting for ${HOSTNAME}.${APPNET} to become available"
-  sleep 1
-  nslookup ${HOSTNAME}.${APPNET}
-done
-
-sed -i "s/\${DB_CLUSTER}/\"${DB_CLUSTER}\"/" /etc/web-laboratory-admin/application.conf
-
-sed -i "s/ADMINHOST/$(dig ${HOSTNAME}.${APPNET} +short)/" /etc/web-laboratory-admin/application.conf
-
-exec "$@"

+ 15 - 0
entrypoint.sh

@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+waitDb() {
+  while ! nslookup $1; do
+    echo "Waiting for $1 to become available"
+    sleep 5
+    nslookup $1
+  done
+}
+[ ! -z ${INIT} ] && { waitDb mongodb; waitDb fb3-lab }
+
+#sed -i "s/\${DB_CLUSTER}/\"${DB_CLUSTER}\"/" /etc/web-laboratory-admin/application.conf
+#sed -i "s/ADMINHOST/0\.0\.0\.0:2551/" /etc/web-laboratory-admin/application.conf
+
+exec "$@"

+ 0 - 11
healthcheck.sh

@@ -1,11 +0,0 @@
-#!/bin/bash
-
-containerstart=`stat -c %Z /proc/1`
-curtime=`date +%s`
-if (( curtime-containerstart < 180 )); then
-#    while ! ping -c 1 ${DB_CLUSTER}; do echo "Waiting for ${DB_CLUSTER} to be available"; sleep 1; done
-    echo "0"
-    exit 0
-fi
-
-curl -f 127.0.0.1:8091/login || exit 1