Snap promotion fix
[osm/devops.git] / jenkins / ci-pipelines / ci_stage_3.groovy
index 6523deb..4ba5630 100644 (file)
@@ -47,7 +47,7 @@ properties([
         string(defaultValue: '/home/jenkins/hive/robot-systest.cfg', description: '', name: 'ROBOT_VIM'),
         string(defaultValue: '/home/jenkins/hive/kubeconfig.yaml', description: '', name: 'KUBECONFIG'),
         string(defaultValue: '/home/jenkins/hive/clouds.yaml', description: '', name: 'CLOUDS'),
-        string(defaultValue: 'Charmed', description: '', name: 'INSTALLER'),
+        string(defaultValue: 'Default', description: '', name: 'INSTALLER'),
     ])
 ])
 
@@ -55,7 +55,7 @@ def uninstall_osm(stackName) {
     sh """
          export OSM_USE_LOCAL_DEVOPS=true
          export PATH=$PATH:/snap/bin
-         installers/full_install_osm.sh -y -w /tmp/osm -t ${stackName} -s ${stackName} --test --nolxd --nodocker --nojuju --nohostports --nohostclient --uninstall
+         installers/full_install_osm.sh -y -c swarm -w /tmp/osm -t ${stackName} -s ${stackName} --test --nolxd --nodocker --nojuju --nohostports --nohostclient --uninstall
        """
 }
 
@@ -71,7 +71,7 @@ def run_systest(stackName,tagName,testName,envfile=null) {
     junit  '*.xml'
 }
 
-def run_robot_systest(tagName,testName,osmHostname,prometheusHostname,prometheus_port=null,envfile=null,kubeconfig=null,clouds=null,hostfile=null) {
+def run_robot_systest(tagName,testName,osmHostname,prometheusHostname,prometheus_port=null,envfile=null,kubeconfig=null,clouds=null,hostfile=null,jujuPassword=null) {
     tempdir = sh(returnStdout: true, script: "mktemp -d").trim()
     if ( !envfile )
     {
@@ -87,8 +87,13 @@ def run_robot_systest(tagName,testName,osmHostname,prometheusHostname,prometheus
         hostfilemount="-v "+hostfile+":/etc/hosts"
     }
 
+    JUJU_PASSWORD_VAR = ""
+    if ( jujuPassword != null) {
+        JUJU_PASSWORD_VAR = "--env JUJU_PASSWORD="+jujuPassword
+    }
+
     try {
-        sh "docker run --env OSM_HOSTNAME=${osmHostname} --env PROMETHEUS_HOSTNAME=${prometheusHostname} ${PROMETHEUS_PORT_VAR} --env-file ${envfile} -v ${clouds}:/etc/openstack/clouds.yaml -v ${kubeconfig}:/root/.kube/config -v ${tempdir}:/robot-systest/reports ${hostfilemount} opensourcemano/tests:${tagName} -c -t ${testName}"
+        sh "docker run --env OSM_HOSTNAME=${osmHostname} --env PROMETHEUS_HOSTNAME=${prometheusHostname} ${PROMETHEUS_PORT_VAR} ${JUJU_PASSWORD_VAR} --env-file ${envfile} -v ${clouds}:/etc/openstack/clouds.yaml -v ${kubeconfig}:/root/.kube/config -v ${tempdir}:/robot-systest/reports ${hostfilemount} opensourcemano/tests:${tagName} -c -t ${testName}"
     } finally {
         sh "cp ${tempdir}/* ."
         outputDirectory = sh(returnStdout: true, script: "pwd").trim()
@@ -115,11 +120,22 @@ def archive_logs(remote) {
             for container in `kubectl get pods -n osm | grep -v operator | grep -v NAME| awk '{print $1}'`; do
                 logfile=`echo $container | cut -d- -f1`
                 echo "Extracting log for $logfile"
-                kubectl logs -n osm $container 2>&1 > logs/$logfile.log
+                kubectl logs -n osm $container --timestamps=true 2>&1 > logs/$logfile.log
             done
         '''
     } else {
-        // collect logs from k8s based installer...
+        sshCommand remote: remote, command: '''
+            for deployment in `kubectl -n osm get deployments | grep -v operator | grep -v NAME| awk '{print $1}'`; do
+                echo "Extracting log for $deployment"
+                kubectl -n osm logs deployments/$deployment --timestamps=true --all-containers 2>&1 > logs/$deployment.log
+            done
+        '''
+        sshCommand remote: remote, command: '''
+            for statefulset in `kubectl -n osm get statefulsets | grep -v operator | grep -v NAME| awk '{print $1}'`; do
+                echo "Extracting log for $statefulset"
+                kubectl -n osm logs statefulsets/$statefulset --timestamps=true --all-containers 2>&1 > logs/$statefulset.log
+            done
+        '''
     }
 
     sh "rm -rf logs"
@@ -143,6 +159,7 @@ def get_value(key, output) {
 node("${params.NODE}") {
 
     INTERNAL_DOCKER_REGISTRY = 'osm.etsi.org:5050/devops/cicd/'
+    INTERNAL_DOCKER_PROXY = 'http://172.21.1.1:5000'
     SSH_KEY = '~/hive/cicd_rsa'
     sh 'env'
 
@@ -369,21 +386,22 @@ node("${params.NODE}") {
                     remote.identityFile = SSH_KEY
                     remote.allowAnyHosts = true
                     remote.logLevel = 'INFO'
+                    remote.pty = true
 
                     sshCommand remote: remote, command: """
-                        wget https://osm-download.etsi.org/ftp/osm-8.0-eight/install_osm.sh
+                        wget https://osm-download.etsi.org/ftp/osm-9.0-nine/install_osm.sh
                         chmod +x ./install_osm.sh
+                        sed -i '1 i\\export PATH=/snap/bin:\${PATH}' ~/.bashrc
                     """
 
                     if ( useCharmedInstaller ) {
 
                         // Use local proxy for docker hub
                         sshCommand remote: remote, command: '''
-                            sudo snap install microk8s --classic
+                            sudo snap install microk8s --classic --channel=1.19/stable
                             sudo sed -i "s|https://registry-1.docker.io|http://172.21.1.1:5000|" /var/snap/microk8s/current/args/containerd-template.toml
                             sudo systemctl restart snap.microk8s.daemon-containerd.service
                             sudo snap alias microk8s.kubectl kubectl
-                            echo export PATH=/snap/bin:\${PATH} > ~/.bashrc
                         '''
 
                         withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'gitlab-registry',
@@ -402,10 +420,22 @@ node("${params.NODE}") {
                         prometheusPort = 80
                         osmHostname = "nbi."+IP_ADDRESS+".xip.io:443"
                     } else {
-                        // Run -k8s installer here
-                        // Update to use 172.21.1.1 as the dockerhub proxy
-                        // Specify registry to use for installer
-                        // set osmHostname, prometheusHostname, prometheusPort as needed
+                        // Run -k8s installer here specifying internal docker registry and docker proxy
+                        withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'gitlab-registry',
+                                        usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) {
+                            sshCommand remote: remote, command: """
+                                ./install_osm.sh -y \
+                                    ${repo_base_url} \
+                                    ${repo_key_name} \
+                                    ${release} -r unstable \
+                                    -d ${USERNAME}:${PASSWORD}@${INTERNAL_DOCKER_REGISTRY} \
+                                    -p ${INTERNAL_DOCKER_PROXY} \
+                                    -t ${container_name}
+                            """
+                        }
+                        prometheusHostname = IP_ADDRESS
+                        prometheusPort = 9091
+                        osmHostname = IP_ADDRESS
                     }
                 }
             }
@@ -413,11 +443,7 @@ node("${params.NODE}") {
             stage_archive = false
             if ( params.DO_SMOKE ) {
                 stage("OSM Health") {
-                    if ( useCharmedInstaller ) {
-                        stackName = "osm"
-                    } else {
-                        stackName = container_name
-                    }
+                    stackName = "osm"
                     sshCommand remote: remote, command: """
                         /usr/share/osm-devops/installers/osm_health.sh -k -s ${stackName}
                     """
@@ -442,6 +468,10 @@ EOF"""
                                 hostfile=null
                             }
 
+                            jujuPassword=sshCommand remote: remote, command: """
+                                echo `juju gui 2>&1 | grep password | cut -d: -f2`
+                            """
+
                             run_robot_systest(
                                 container_name,
                                 params.TEST_NAME,
@@ -451,11 +481,12 @@ EOF"""
                                 params.ROBOT_VIM,
                                 params.KUBECONFIG,
                                 params.CLOUDS,
-                                hostfile)
+                                hostfile,
+                                jujuPassword)
                         }
                     }
                 } finally {
-                    stage("Archive Contailer Logs") {
+                    stage("Archive Container Logs") {
                         // Archive logs to containers_logs.txt
                         archive_logs(remote)
                         if ( ! currentBuild.result.equals('UNSTABLE') && ! currentBuild.result.equals('FAILURE')) {
@@ -487,8 +518,9 @@ EOF"""
 
                         stage("Snap promotion") {
                             def snaps = ["osmclient"]
+                            sh "snapcraft login --with ~/.snapcraft/config"
                             for (snap in snaps) {
-                                channel=""
+                                channel="latest/"
                                 if (BRANCH_NAME.startsWith("v")) {
                                     channel=BRANCH_NAME.substring(1)+"/"
                                 } else if (BRANCH_NAME!="master") {
@@ -496,26 +528,19 @@ EOF"""
                                 }
                                 track=channel+"edge\\*"
                                 edge_rev=sh(returnStdout: true,
-                                    script: "sudo docker run -v ~/.snapcraft:/snapcraft -v ${WORKSPACE}:/build " +
-                                    "-w /build snapcore/snapcraft:stable /bin/bash -c " +
-                                    "\"snapcraft login --with /snapcraft/config &>/dev/null && " +
-                                    "snapcraft revisions $snap\" | " +
-                                    "grep \" $track\" | tail -1 | awk '{print \$1}'").trim()
+                                    script: "snapcraft revisions $snap | " +
+                                    "grep \"$track\" | tail -1 | awk '{print \$1}'").trim()
+                                print "edge rev is $edge_rev"
                                 track=channel+"beta\\*"
                                 beta_rev=sh(returnStdout: true,
-                                    script: "sudo docker run -v ~/.snapcraft:/snapcraft -v ${WORKSPACE}:/build " +
-                                    "-w /build snapcore/snapcraft:stable /bin/bash -c " +
-                                    "\"snapcraft login --with /snapcraft/config &>/dev/null && " +
-                                    "snapcraft revisions $snap\" | " +
-                                    "grep \" $track\" | tail -1 | awk '{print \$1}'").trim()
+                                    script: "snapcraft revisions $snap | " +
+                                    "grep \"$track\" | tail -1 | awk '{print \$1}'").trim()
+                                print "beta rev is $beta_rev"
 
                                 if ( edge_rev != beta_rev ) {
                                     print "Promoting $edge_rev to beta in place of $beta_rev"
                                     beta_track=channel+"beta"
-                                    sh("sudo docker run -v ~/.snapcraft:/snapcraft -v ${WORKSPACE}:/build " +
-                                        "-w /build snapcore/snapcraft:stable /bin/bash -c " +
-                                        "\"snapcraft login --with /snapcraft/config &>/dev/null && " +
-                                        "snapcraft release $snap $edge_rev $beta_track\"")
+                                    sh "snapcraft release $snap $edge_rev $beta_track"
                                 }
                             }
                         }
@@ -555,4 +580,4 @@ EOF"""
             sh "docker rm ${http_server_name} || true"
         }
     }
-}
\ No newline at end of file
+}