| /* |
| 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: env.BRANCH_NAME, description: '', name: 'GERRIT_BRANCH') |
| string(defaultValue: 'osm/NBI', description: '', name: 'GERRIT_PROJECT') |
| string(defaultValue: env.GERRIT_REFSPEC, description: '', name: 'GERRIT_REFSPEC') |
| string(defaultValue: env.GERRIT_PATCHSET_REVISION, description: '', name: 'GERRIT_PATCHSET_REVISION') |
| string(defaultValue: 'https://osm.etsi.org/gerrit', description: '', name: 'PROJECT_URL_PREFIX') |
| booleanParam(defaultValue: false, description: '', name: 'TEST_INSTALL') |
| // string(defaultValue: 'artifactory-osm', description: '', name: 'ARTIFACTORY_SERVER') |
| // New parameters for Docker image build |
| string(defaultValue: 'opensourcemano/nbi', description: 'Docker Image Name', name: 'IMAGENAME') |
| string(defaultValue: 'localhost:5000', description: 'Docker Registry', name: 'DOCKER_REGISTRY') |
| string(defaultValue: 'http://', description: 'Docker Registry protocol', name: 'DOCKER_REGISTRY_PROTOCOL') |
| string(defaultValue: '', description: 'ID of Docker Registry Credentials', name: 'DOCKER_CREDENTIALS') // `defaultValue` to be updated with actual ID in Jenkins whenever needed |
| } |
| stages { |
| stage('LICENSE SCAN') { |
| agent { label 'osm1' } |
| steps { |
| echo "Clones Devops repo:" |
| dir('devops') { |
| git url: "${params.PROJECT_URL_PREFIX}/osm/devops", branch: "${params.GERRIT_BRANCH}" |
| } |
| echo "License scan:" |
| sh "devops/tools/license_scan.sh" |
| } |
| } |
| stage('PRE-CHECKS AND UNIT TESTS') { |
| agent { |
| dockerfile { |
| filename 'Dockerfile.testing' |
| } |
| } |
| stages { |
| stage('Linting tests') { |
| steps { |
| echo "Linting tests (flake8):" |
| sh "devops-stages/new-pipeline/stage-lint.sh" |
| } |
| } |
| stage('Unit tests') { |
| steps { |
| echo "Unit tests (unittest):" |
| sh "devops-stages/new-pipeline/stage-test.sh" |
| } |
| } |
| } |
| post { |
| always { |
| echo "Saves all the results:" |
| // archiveArtifacts artifacts: 'relative/path/to/files/**/*.txt', fingerprint: true |
| } |
| } |
| } |
| stage('DOCKER IMAGE BUILD AND PUSH') { |
| agent { label 'osm2' } |
| stages { |
| stage('Build image') { |
| steps{ |
| echo "Building ${params.IMAGENAME}:${env.BUILD_NUMBER} image:" |
| // Here we have to use Dockerfile.production |
| script { |
| dockerImage = docker.build "${params.IMAGENAME}:${env.BUILD_NUMBER}" |
| } |
| } |
| } |
| stage('Upload to private registry') { |
| steps{ |
| echo "Here it would upload the image with appropriate tags: build number, latest:" |
| // script { |
| // docker.withRegistry( params.DOCKER_REGISTRY_PROTOCOL + params.DOCKER_REGISTRY, params.DOCKER_CREDENTIALS ) { |
| // dockerImage.push("${env.BUILD_NUMBER}") |
| // dockerImage.push("${params.GERRIT_BRANCH}-latest") |
| // } |
| // } |
| } |
| } |
| stage('Remove unused Docker image') { |
| steps{ |
| echo "Here it will remove the docker image" |
| // sh "docker rmi ${params.IMAGENAME}:${env.BUILD_NUMBER}" |
| |
| // // Name format for private registry |
| // sh "docker rmi ${params.DOCKER_REGISTRY}/${params.IMAGENAME}:${env.BUILD_NUMBER}" |
| // sh "docker rmi ${params.DOCKER_REGISTRY}/${params.IMAGENAME}:${params.GERRIT_BRANCH}-latest" |
| // // Name format for default public registry |
| // //sh "docker rmi ${IMAGENAME}:latest" |
| } |
| } |
| } |
| } |
| stage('UNIT TESTS OVER RUNNING CONTAINER') { |
| agent { |
| docker { |
| image "${params.DOCKER_REGISTRY}/${params.IMAGENAME}:${env.BUILD_NUMBER}" |
| } |
| } |
| steps { |
| echo "The image has been successfully instantiated" |
| echo "(no additional unit tests over running container are required for this module)" |
| } |
| } |
| stage('INVOKE E2E SMOKE TESTS') { |
| agent { label 'system' } |
| steps { |
| echo "Triggering E2E tests pipeline" |
| build job: 'E2E-install-and-testing' |
| // As last stage, here it should call the "Deployment and E2E Testing" pipeline with the appropriate parameters to: |
| // - Run smoke tests only |
| // - Avoid pushing images to public Docker Registry (this will be done once Daily) |
| // |
| //build job: '<Job name>', parameters: [[$class: 'StringParameterValue', name: 'param1', value: 'test_param']] |
| } |
| } |
| } |
| } |
| |