--- /dev/null
+/* Copyright ETSI Contributors and Others
+ *
+ * All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License. You may obtain
+ * a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+pipeline {
+ agent none
+ parameters {
+ // string(defaultValue: 'artifactory-osm', description: '', name: 'ARTIFACTORY_SERVER')
+
+ // Parameters to define the specific OSM version to test
+ // --> Defaults to latest stable version of Release FOURTEEN
+ string(defaultValue: 'https://osm-download.etsi.org/ftp/osm-14.0-fourteen/install_osm.sh', description: 'URL to OSM installer', name: 'INSTALLER_URL')
+ string(defaultValue: 'testing-daily', description: 'Release for OSM binaries (REPO_BASE)', name: 'REPO_BASE')
+ string(defaultValue: 'testing-daily', description: 'OSM docker tag (DOCKER_TAG)', name: 'DOCKER_TAG')
+ string(defaultValue: 'testing', description: 'Repository name for OSM packages (REPO_NAME)', name: 'REPO_NAME')
+
+ // Parameters for docker run
+ string(defaultValue: 'opensourcemano/tests', description: 'Name of docker image for client-side of Robot tests', name: 'TEST_IMAGE')
+ string(defaultValue: 'testing-daily', description: 'Tag of docker image for client-side', name: 'TEST_TAG')
+
+ // Parameters to define SSH keys (Jenkins secret) used when creating VMs
+ string(defaultValue: '', description: 'Jenkins credential containing SSH private key used in VMs', name: 'SSH_PRIVATE_KEY')
+ string(defaultValue: '', description: 'Jenkins credential containing SSH public key used in VMs', name: 'SSH_PUBLIC_KEY')
+
+ // Parameter to set the target environment
+ // string(defaultValue: 'azure-etsi-environment', description: 'Defines the VIM target', name: 'VIM_TARGET_ENVIRONMENT')
+ // string(defaultValue: 'azure/azure.rc', description: 'Cloud config environment file', name: 'CLOUD_ENV_FILE')
+ // Parameter to set the name of secret in Jenkins for Azure JSON credentials
+ string(defaultValue: 'azure-credentials', description: 'Jenkins secret that contains Azure JSON credentials', name: 'AZURE_CREDENTIALS')
+ // File format (take care of brackets in clientId):
+ // {
+ // "clientId": "{<client-id>}",
+ // "clientSecret": "<secret>",
+ // "subscriptionId": "<subscription-id>",
+ // "tenantId": "<tenant-id>",
+ // "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
+ // "resourceManagerEndpointUrl": "https://management.azure.com/",
+ // "activeDirectoryGraphResourceId": "https://graph.windows.net/",
+ // "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
+ // "galleryEndpointUrl": "https://gallery.azure.com/",
+ // "managementEndpointUrl": "https://management.core.windows.net/"
+ // }
+
+ // Parameter to set the tag for selecting Robot test to be run
+ string(defaultValue: 'azure', description: 'Tag for selecting Robot test to be run', name: 'ROBOT_RUN_TAG')
+
+ // Configuration of thresholds for Robot tests
+ string(defaultValue: '99.0', description: '% passed Robot tests to mark the build as passed', name: 'ROBOT_PASS_THRESHOLD')
+ string(defaultValue: '80.0', description: '% passed Robot tests to mark the build as unstable (if lower, it will be failed)', name: 'ROBOT_UNSTABLE_THRESHOLD')
+ }
+ environment {
+ // Azure environment
+ CLOUD_TYPE = 'azure'
+ SOURCE_IMAGE_NAME = 'Canonical:0001-com-ubuntu-server-jammy:22_04-lts:latest'
+ FLAVOR_NAME = 'Standard_D4as_v4'
+ K8S_FLAVOR_NAME = 'Standard_A2_v2'
+ USE_PAAS_K8S = 'FALSE'
+ PRIORITY = 'Regular'
+ RESOURCE_GROUP = 'OSM_CICD_GROUP'
+ VNET_NAME = 'OSM-CICD-net'
+ VIM_MGMT_NET = 'OSM-CICD-subnet'
+ VIM_TARGET = 'azure-etsi'
+ AZURE_FLAVORS_PATTERN = '^Standard'
+ AZURE_REGION = 'westeurope'
+ OSM_VIM_MULTIPLIER_TIMEOUT = '4.0'
+
+ /*
+ // Openstack environment
+ CLOUD_TYPE = 'openstack'
+ OS_CLOUD = 'etsi-vim-telefonica'
+ OS_DOMAIN_NAME = 'Default'
+ VIM_TARGET = 'etsi-vim-telefonica'
+ VIM_MGMT_NET = 'osm-ext'
+ VIM_EXT_NET = 'osm-ext'
+ OVERRIDES = '--override-epa'
+ FLAVOR_NAME = 'osm.sanity'
+ SOURCE_IMAGE_NAME = 'ubuntu22.04'
+ SSH_KEY_NAME = 'niv2020'
+ SDNC_USER = 'karaf'
+ SDNC_PASSWORD = 'karaf'
+ SDNC_URL = 'http://172.21.248.11:8181'
+ SDNC_TYPE = 'onos_vpls'
+
+ // Google Cloud environment
+ CLOUD_TYPE = 'gcp'
+ GCP_PROJECT = 'telcocloudpocs'
+ GCP_ZONE = 'europe-west1-b'
+ GCP_MACHINE_TYPE = 'e2-standard-4'
+ GCP_DISK_SIZE = '40'
+ GCP_IMAGE_PROJECT = 'ubuntu-os-cloud'
+ GCP_IMAGE_FAMILY = 'ubuntu-2204-lts'
+ VIM_TARGET = 'gcp'
+ VIM_MGMT_NET = 'default'
+ OSM_VIM_MULTIPLIER_TIMEOUT = '4.0'
+ */
+ }
+ stages {
+ stage('E2E TESTS') {
+ agent {
+ docker {
+ image "${params.TEST_IMAGE}:${params.TEST_TAG}"
+ args "-u root:root --entrypoint=''"
+ }
+ }
+ stages {
+ stage('Set environment') {
+ steps {
+ script {
+ if (params.SSH_PUBLIC_KEY == '') {
+ // Gererate SSH private and public keys
+ sh "mkdir -m 700 ~/.ssh"
+ sh "ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ''"
+ }
+ else {
+ // SSH private and public keys from Jenkins credentials
+ sh "mkdir -m 700 ~/.ssh"
+ withCredentials([file(credentialsId: "${params.SSH_PRIVATE_KEY}", variable: 'SSHPATH')]) {
+ sh "cp ${SSHPATH} ~/.ssh/id_rsa"
+ }
+ withCredentials([file(credentialsId: "${params.SSH_PUBLIC_KEY}", variable: 'SSHPATH')]) {
+ sh "cp ${SSHPATH} ~/.ssh/id_rsa.pub"
+ }
+ sh "chmod 400 ~/.ssh/id_rsa ~/.ssh/id_rsa.pub"
+ }
+ // This file is used by some Robot test (BASIC12)
+ sh "cp ~/.ssh/id_rsa ~/osm_id_rsa"
+ }
+ // Azure credentials
+ withCredentials([file(credentialsId: "${params.AZURE_CREDENTIALS}", variable: 'PATH')]) {
+ sh "cp ${PATH} ~/azure-creds.json"
+ sh """
+ set +x; \
+ AZURE_CLIENT_ID=\$(cat ~/azure-creds.json | jq -r .clientId | sed s/[{}]//g) ; \
+ AZURE_SECRET=\$(cat ~/azure-creds.json | jq -r .clientSecret) ; \
+ AZURE_TENANT=\$(cat ~/azure-creds.json | jq -r .tenantId) ; \
+ az login --service-principal --username \$AZURE_CLIENT_ID --password \$AZURE_SECRET --tenant \$AZURE_TENANT
+ """
+ sh "az vm list -o table"
+ }
+ }
+ }
+ stage('Create k8s cluster') {
+ steps {
+ sh "/robot-systest/cloud-scripts/create-k8s.sh"
+ sh "cat /robot-systest/results/k8s_environment.rc"
+ }
+ }
+ stage('Install OSM') {
+ steps {
+ sh "/robot-systest/cloud-scripts/create-osm-vm.sh"
+ sh "cat /robot-systest/results/osm_environment.rc"
+ sh ". /robot-systest/results/osm_environment.rc ; /robot-systest/cloud-scripts/remote-install-osm.sh"
+ }
+ }
+ stage('Add VIM and K8s cluster to OSM') {
+ steps {
+ sh """
+ . /robot-systest/results/osm_environment.rc ; \
+ . /robot-systest/results/k8s_environment.rc ; \
+ osm version ; \
+ set +x; \
+ export AZURE_CLIENT_ID=\$(cat ~/azure-creds.json | jq -r .clientId | sed s/[{}]//g) ; \
+ export AZURE_SECRET=\$(cat ~/azure-creds.json | jq -r .clientSecret) ; \
+ export AZURE_TENANT=\$(cat ~/azure-creds.json | jq -r .tenantId) ; \
+ export AZURE_SUBSCRIPTION_ID=\$(cat ~/azure-creds.json | jq -r .subscriptionId) ; \
+ /robot-systest/cloud-scripts/add-vim-and-k8scluster.sh
+ """
+ }
+
+ }
+ stage('Run Robot tests') {
+ steps {
+ sh """
+ . /robot-systest/results/osm_environment.rc ; \
+ . /robot-systest/results/k8s_environment.rc ; \
+ /robot-systest/run_test.sh -t ${params.ROBOT_RUN_TAG}
+ """
+ }
+ }
+ }
+ post {
+ always {
+ echo "Retrieve container logs"
+ sh """
+ . /robot-systest/results/osm_environment.rc ; \
+ /robot-systest/cloud-scripts/remote-extract-logs.sh
+ """
+
+ echo "Save results"
+ sh "rm -rf results"
+ sh "cp -var /robot-systest/results /robot-systest/reports/* ."
+ archiveArtifacts artifacts: 'results/**/*', fingerprint: true
+
+ echo "Updates the Robot dashboard in Jenkins"
+ robot outputPath: '.', passThreshold: "${params.ROBOT_PASS_THRESHOLD}", unstableThreshold: "${params.ROBOT_UNSTABLE_THRESHOLD}"
+
+ echo "Destroy the K8s cluster"
+ sh '. /robot-systest/results/k8s_environment.rc ; /robot-systest/cloud-scripts/delete-k8s.sh'
+
+ echo "Destroy the OSM host"
+ sh '. /robot-systest/results/osm_environment.rc ; /robot-systest/cloud-scripts/delete-osm-vm.sh'
+ sh "az vm list -o table"
+ }
+ }
+ }
+ }
+}
+