lib = library(identifier: 'jenkins@1.0.4', retriever: modernSCM([ $class: 'GitSCMSource', remote: 'https://github.com/opensearch-project/opensearch-build-libraries.git', ])) pipeline { options { timeout(time: 5, unit: 'HOURS') buildDiscarder(logRotator(daysToKeepStr: '7')) } agent none environment { AGENT_X64 = 'Jenkins-Agent-AL2-X64-C54xlarge-Docker-Host' } triggers { parameterizedCron ''' H 1 * * * %INPUT_MANIFEST=2.9.1/opensearch-2.9.1.yml;TARGET_JOB_NAME=distribution-build-opensearch;BUILD_PLATFORM=linux macos windows;BUILD_DISTRIBUTION=tar rpm deb zip H 1 * * * %INPUT_MANIFEST=2.10.0/opensearch-dashboards-2.10.0.yml;TARGET_JOB_NAME=distribution-build-opensearch-dashboards;BUILD_PLATFORM=linux windows;BUILD_DISTRIBUTION=tar rpm deb zip H 1 * * * %INPUT_MANIFEST=2.10.0/opensearch-2.10.0.yml;TARGET_JOB_NAME=distribution-build-opensearch;BUILD_PLATFORM=linux macos windows;BUILD_DISTRIBUTION=tar rpm deb zip H 1 * * * %INPUT_MANIFEST=2.8.1/opensearch-dashboards-2.8.1.yml;TARGET_JOB_NAME=distribution-build-opensearch-dashboards;BUILD_PLATFORM=linux windows;BUILD_DISTRIBUTION=tar rpm deb zip H 1 * * * %INPUT_MANIFEST=2.8.1/opensearch-2.8.1.yml;TARGET_JOB_NAME=distribution-build-opensearch;BUILD_PLATFORM=linux macos windows;BUILD_DISTRIBUTION=tar rpm deb zip H 1 * * * %INPUT_MANIFEST=1.4.0/opensearch-1.4.0.yml;TARGET_JOB_NAME=distribution-build-opensearch;BUILD_PLATFORM=linux macos windows;BUILD_DISTRIBUTION=tar rpm zip H 1 * * * %INPUT_MANIFEST=1.4.0/opensearch-dashboards-1.4.0.yml;TARGET_JOB_NAME=distribution-build-opensearch-dashboards;BUILD_PLATFORM=linux windows;BUILD_DISTRIBUTION=tar rpm zip H 1 * * * %INPUT_MANIFEST=3.0.0/opensearch-3.0.0.yml;TEST_MANIFEST=3.0.0/opensearch-3.0.0-test.yml;TARGET_JOB_NAME=distribution-build-opensearch;BUILD_PLATFORM=linux macos windows;BUILD_DISTRIBUTION=tar rpm deb zip H 1 * * * %INPUT_MANIFEST=3.0.0/opensearch-dashboards-3.0.0.yml;TARGET_JOB_NAME=distribution-build-opensearch-dashboards;BUILD_PLATFORM=linux windows;BUILD_DISTRIBUTION=tar rpm deb zip ''' } parameters { string( name: 'INPUT_MANIFEST', description: 'Input manifest under the manifests folder, e.g. 2.0.0/opensearch-2.0.0.yml.', trim: true ) string( name: 'TEST_MANIFEST', description: 'Test manifest under the manifests folder, e.g. 2.0.0/opensearch-2.0.0-test.yml. Currently only applicable for distribution-build-opensearch job', trim: true ) string( name: 'TARGET_JOB_NAME', description: 'Job to trigger if build has changed', trim: true ) string( name: 'BUILD_PLATFORM', description: 'Platform to build', trim: true ) string( name: 'BUILD_DISTRIBUTION', description: 'Distribution to build', trim: true ) } stages { stage('detect docker image + args') { agent { docker { label AGENT_X64 image 'docker/library/alpine:3' registryUrl 'https://public.ecr.aws/' alwaysPull true } } steps { script { dockerAgent = detectDockerAgent() } } } stage('trigger-build-if-needed') { agent { docker { label AGENT_X64 image dockerAgent.image args dockerAgent.args registryUrl 'https://public.ecr.aws/' alwaysPull true } } steps { script { lock(resource: "CheckForBuild-${INPUT_MANIFEST}-${TARGET_JOB_NAME}", skipIfLocked: true) { def sha = getManifestSHA( inputManifest: "manifests/${INPUT_MANIFEST}", jobName: "${TARGET_JOB_NAME}" ) if (sha.exists) { echo "Skipping, ${sha.path} already exists." } else { if (TARGET_JOB_NAME != 'distribution-build-opensearch' && TARGET_JOB_NAME != 'distribution-build-opensearch-dashboards') { error "Job ${TARGET_JOB_NAME} is invalid" } build job: "${TARGET_JOB_NAME}", parameters: [ string(name: 'INPUT_MANIFEST', value: "${INPUT_MANIFEST}"), string(name: 'TEST_MANIFEST', value: "${TEST_MANIFEST}"), string(name: 'BUILD_PLATFORM', value: "${BUILD_PLATFORM}"), string(name: 'BUILD_DISTRIBUTION', value: "${BUILD_DISTRIBUTION}") ], wait: true echo "Build succeeded, uploading build SHA for that job" buildUploadManifestSHA( inputManifest: "manifests/${INPUT_MANIFEST}", jobName: "${TARGET_JOB_NAME}" ) } } } } post { always { postCleanup() } } } } post { failure { node(AGENT_X64) { script { publishNotification( icon: ':warning:', message: 'Failed checking for build to trigger', credentialsId: 'jenkins-build-notice-webhook', manifest: "${INPUT_MANIFEST}", target_job_name: "${TARGET_JOB_NAME}" ) postCleanup() } } } } }