Bug 2171: Wait for cloud init
[osm/devops.git] / jenkins / ci-pipelines / ci_stage_3.groovy
index 5f8369e..a65b8b7 100644 (file)
@@ -153,8 +153,7 @@ void archive_logs(Map remote) {
     sshCommand remote: remote, command: '''ls -al logs'''
     sshGet remote: remote, from: 'logs', into: '.', override: true
     sh 'cp logs/* .'
-    sshGet remote: remote, from: 'ens3.pcap', into: 'ens3.pcap', override: true
-    archiveArtifacts artifacts: '*.log, *.pcap'
+    archiveArtifacts artifacts: '*.log'
 }
 
 String get_value(String key, String output) {
@@ -449,8 +448,9 @@ node("${params.NODE}") {
                         pty: true
                     ]
 
+                    // Ensure the VM is ready
+                    sshCommand remote: remote, command: 'cloud-init status --wait'
                     // Force time sync to avoid clock drift and invalid certificates
-                    sshCommand remote: remote, command: 'nohup sudo tcpdump -i ens3 -w ens3.pcap -s 400 & sleep 5'
                     sshCommand remote: remote, command: 'sudo apt-get update'
                     sshCommand remote: remote, command: 'sudo apt-get install -y chrony'
                     sshCommand remote: remote, command: 'sudo service chrony stop'
@@ -546,10 +546,6 @@ node("${params.NODE}") {
                         prometheusPort = 9091
                         osmHostname = IP_ADDRESS
                     }
-                    sshCommand remote: remote, command: """
-                        sudo killall tcpdump
-                    """
-
                 } // stage("Install")
 ///////////////////////////////////////////////////////////////////////////////////////
 // Health check of installed OSM in remote vm
@@ -572,7 +568,6 @@ node("${params.NODE}") {
             if ( params.DO_ROBOT ) {
                 try {
                     stage('System Integration Test') {
-
                         if (useCharmedInstaller) {
                             tempdir = sh(returnStdout: true, script: 'mktemp -d').trim()
                             sh(script: "touch ${tempdir}/hosts")
@@ -645,35 +640,88 @@ EOF"""
                             }
                             parallel parallelSteps
                         }
-
                         stage('Snap promotion') {
-                            snaps = ['osmclient']
-                            sh 'snapcraft login --with ~/.snapcraft/config'
-                            for (snap in snaps) {
-                                channel = 'latest/'
+                            withCredentials([string(credentialsId: 'Snapstore', variable: 'SNAPCRAFT_STORE_CREDENTIALS')]) {
+                                snaps = ['osmclient']
+                                for (snap in snaps) {
+                                    channel = 'latest/'
+                                    if (BRANCH_NAME.startsWith('v')) {
+                                        channel = BRANCH_NAME.substring(1) + '/'
+                                    } else if (BRANCH_NAME != 'master') {
+                                        channel += '/' + BRANCH_NAME.replaceAll('/', '-')
+                                    }
+                                    track = channel + 'edge\\*'
+                                    edge_rev = sh(returnStdout: true,
+                                        script: "snapcraft revisions $snap | " +
+                                        "grep \"$track\" | tail -1 | awk '{print \$1}'").trim()
+                                    track = channel + 'beta\\*'
+                                    beta_rev = sh(returnStdout: true,
+                                        script: "snapcraft revisions $snap | " +
+                                        "grep \"$track\" | tail -1 | awk '{print \$1}'").trim()
+
+                                    print "Edge: $edge_rev, Beta: $beta_rev"
+
+                                    if (edge_rev != beta_rev) {
+                                        print "Promoting $edge_rev to beta in place of $beta_rev"
+                                        beta_track = channel + 'beta'
+                                        sh "snapcraft release $snap $edge_rev $beta_track"
+                                    }
+                                }
+                            }
+                        } // stage('Snap promotion')
+                        stage('Charm promotion') {
+                            charms = [
+                                'osm', // bundle
+                                'osm-ha', // bundle
+                                'osm-grafana',
+                                'osm-mariadb',
+                                'mongodb-exporter-k8s',
+                                'mysqld-exporter-k8s',
+                                'osm-lcm',
+                                'osm-mon',
+                                'osm-nbi',
+                                'osm-ng-ui',
+                                'osm-pol',
+                                'osm-ro',
+                                'osm-prometheus',
+                                'osm-vca-integrator',
+                            ]
+                            for (charm in charms) {
+
+                                channel = 'latest'
                                 if (BRANCH_NAME.startsWith('v')) {
-                                    channel = BRANCH_NAME.substring(1) + '/'
+                                    channel = BRANCH_NAME.substring(1)
                                 } else if (BRANCH_NAME != 'master') {
                                     channel += '/' + BRANCH_NAME.replaceAll('/', '-')
                                 }
-                                track = channel + 'edge\\*'
-                                edge_rev = sh(returnStdout: true,
-                                    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: "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 "snapcraft release $snap $edge_rev $beta_track"
+
+                                withCredentials([string(credentialsId: 'Charmstore', variable: 'CHARMCRAFT_AUTH')]) {
+                                    sh "charmcraft status $charm --format json > ${charm}.json"
+                                    isCharm = sh(returnStdout: true, script: "grep architecture ${charm}.json | wc -l").trim() as int
+                                    if (isCharm) {
+                                        jqScriptEdge = "cat ${charm}.json | jq -r '.[] | select(.track==\"$channel\") | .mappings[] | select(.base.architecture==\"amd64\" and .base.channel==\"20.04\") | .releases[] | select(.channel==\"latest/edge/merged\")| .version'|head -1"
+                                        jqScriptBeta = "cat ${charm}.json | jq -r '.[] | select(.track==\"$channel\") | .mappings[] | select(.base.architecture==\"amd64\" and .base.channel==\"20.04\") | .releases[] | select(.channel==\"latest/beta\")| .version'|head -1"
+                                    } else {
+                                        jqScriptEdge = "cat ${charm}.json | jq -r '.[] | select(.track==\"$channel\") | .mappings[].releases[] | select(.channel==\"latest/edge/merged\")| .version'|head -1"
+                                        jqScriptBeta = "cat ${charm}.json | jq -r '.[] | select(.track==\"$channel\") | .mappings[].releases[] | select(.channel==\"latest/beta\")| .version'|head -1"
+                                    }
+                                    // edge/merged is used in place of /edge as 10.1.0 LTS uses latest/edge
+                                    edge_rev = sh(returnStdout: true, script: jqScriptEdge).trim()
+                                    beta_rev = sh(returnStdout: true, script: jqScriptBeta).trim()
+                                    try { edge_rev = edge_rev as int } catch (NumberFormatException nfe) {edge_rev = 0}
+                                    try { beta_rev = beta_rev as int } catch (NumberFormatException nfe) {beta_rev = 0}
+
+                                    print "Edge: $edge_rev, Beta: $beta_rev"
+
+                                    if (edge_rev > beta_rev) {
+                                        print "Promoting $edge_rev to beta in place of $beta_rev"
+                                        beta_track = channel + 'beta'
+                                        sh "charmcraft release ${charm} --revision=${edge_rev} --channel=${channel}/beta"
+                                    }
+
                                 }
                             }
-                        } // stage('Snap promotion')
+                        } // stage('Charm promotion')
                     } // if (params.DO_DOCKERPUSH)
                 } // stage('Archive')
             } // if (params.SAVE_ARTIFACTS_OVERRIDE || stage_archive)
@@ -681,18 +729,22 @@ EOF"""
     } finally {
        stage('Archive Container Logs') {
             if ( ARCHIVE_LOGS_FLAG ) {
-                // Archive logs
-                remote = [
-                    name: containerName,
-                    host: IP_ADDRESS,
-                    user: 'ubuntu',
-                    identityFile: SSH_KEY,
-                    allowAnyHosts: true,
-                    logLevel: 'INFO',
-                    pty: true
-                ]
-                println('Archiving container logs')
-                archive_logs(remote)
+                try {
+                    // Archive logs
+                    remote = [
+                        name: containerName,
+                        host: IP_ADDRESS,
+                        user: 'ubuntu',
+                        identityFile: SSH_KEY,
+                        allowAnyHosts: true,
+                        logLevel: 'INFO',
+                        pty: true
+                    ]
+                    println('Archiving container logs')
+                    archive_logs(remote)
+                } catch (Exception e) {
+                    println('Error fetching logs: '+ e.getMessage())
+                }
             } // end if ( ARCHIVE_LOGS_FLAG )
         }
         stage('Cleanup') {