From b1739115af48206292a2686b66ad2f72204ac23e Mon Sep 17 00:00:00 2001 From: Michael Bloch Date: Thu, 18 Aug 2022 23:19:28 +1000 Subject: [PATCH] Improving test pipeliness ### Added - Added new Pipeline to run security test for Full-Set & Consolidated - Added new parameter to operational task test-aem-security pipeline to inject AEM Host to test via input parameters ### Changed - Reorganised Full-Set/Consolidated Platform Testing pipeline so they trigger the existing pipelines for the testing - Reorganised Full-Set Blue/Green Testing pipeline so they trigger the existing pipelines for the testing - Reorganised Full-Set Recovery Testing pipeline so they trigger the existing pipelines for the testing - Reorganised Full-Set Author Standby Testing pipeline so they trigger the existing pipelines for the testing - Improved readability of operational task test-acceptance by separating each acceptance test into an own stage ### Fixed - Fixed Green stack creation in Blue/Green Testing pipeline to use the offline-snapshots from the Blue stack for stack creation #57 --- CHANGELOG.md | 13 + .../playbooks/includes/testing-gen.yaml | 96 ++ .../aws/switch-dns-consolidated | 2 +- .../operational-tasks/test-acceptance | 81 +- .../operational-tasks/test-aem-security | 7 +- .../testing/aws/consolidated-platform | 597 ++++++----- .../testing/aws/consolidated-security | 125 +++ .../testing/aws/full-set-blue-green | 396 +++----- .../testing/aws/full-set-platform | 941 +++++++++--------- .../testing/aws/full-set-recovery | 192 +--- .../testing/aws/full-set-security | 154 +++ .../aws/promote-author-standby-full-set | 189 +--- .../config/jobs-testing-blue-green.xml.j2 | 18 - .../jobs-testing-consolidated-security.xml.j2 | 136 +++ .../config/jobs-testing-platform.xml.j2 | 14 +- .../config/jobs-testing-security.xml.j2 | 148 +++ .../jenkins/config/jobs-testing.xml.j2 | 12 - 17 files changed, 1727 insertions(+), 1394 deletions(-) create mode 100644 provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/consolidated-security create mode 100644 provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/full-set-security create mode 100644 templates/ansible/jenkins/config/jobs-testing-consolidated-security.xml.j2 create mode 100644 templates/ansible/jenkins/config/jobs-testing-security.xml.j2 diff --git a/CHANGELOG.md b/CHANGELOG.md index 02fd0fcd..e46982ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,19 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## Unreleased +### Added +- Added new Pipeline to run security test for Full-Set & Consolidated +- Added new parameter to operational task test-aem-security pipeline to inject AEM Host to test via input parameters + +### Changed +- Reorganised Full-Set/Consolidated Platform Testing pipeline so they trigger the existing pipelines for the testing +- Reorganised Full-Set Blue/Green Testing pipeline so they trigger the existing pipelines for the testing +- Reorganised Full-Set Recovery Testing pipeline so they trigger the existing pipelines for the testing +- Reorganised Full-Set Author Standby Testing pipeline so they trigger the existing pipelines for the testing +- Improved readability of operational task test-acceptance by separating each acceptance test into an own stage + +### Fixed +- Fixed Green stack creation in Blue/Green Testing pipeline to use the offline-snapshots from the Blue stack for stack creation #57 ## 5.12.0 - 2022-08-16 ### Changed diff --git a/provisioners/ansible/playbooks/includes/testing-gen.yaml b/provisioners/ansible/playbooks/includes/testing-gen.yaml index 55d62817..5f463f6f 100644 --- a/provisioners/ansible/playbooks/includes/testing-gen.yaml +++ b/provisioners/ansible/playbooks/includes/testing-gen.yaml @@ -44,6 +44,26 @@ set_fact: testing_platform_consolidated_jobs_trimmed: "{{ testing_platform_consolidated_jobs | trim_skipped() }}" +- name: Create a list of security full-set testing jobs for AWS + shell: echo {{ item.path }} + with_filetree: ../../../provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/ + when: item.state == 'file' and item.path is match('.*full-set-security') + register: testing_security_full_set_jobs + +- name: Trim skipped security full-set testing jobs for AWS + set_fact: + testing_security_full_set_jobs_trimmed: "{{ testing_security_full_set_jobs | trim_skipped() }}" + +- name: Create a list of security consolidated testing jobs for AWS + shell: echo {{ item.path }} + with_filetree: ../../../provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/ + when: item.state == 'file' and item.path is match('.*consolidated-security') + register: testing_security_consolidated_jobs + +- name: Trim skipped security consolidated testing jobs for AWS + set_fact: + testing_security_consolidated_jobs_trimmed: "{{ testing_security_consolidated_jobs | trim_skipped() }}" + - name: Create a list of promote author standby full-set testing jobs for AWS shell: echo {{ item.path }} with_filetree: ../../../provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/ @@ -102,6 +122,30 @@ - "{{ aem_test_suite_profiles_trimmed.results }}" - "{{ aem_aws_stack_builder_aem_stack_manager_profiles_trimmed.results }}" +- name: "Generate jobs for security full-set testing configuration profile directories" + file: + path: ../../../stage/jenkins/jobs/aem-opencloud-{{ aem_opencloud.version }}/testing/aws/{{ item[0].item.path }}-{{ item[2].item.path }}-{{ item[3].item.path }}-{{ item[4].item.path }}/{{ item[1].item.path }}/ + state: directory + mode: '0776' + with_nested: + - "{{ aem_aws_stack_builder_aem_full_set_profiles_trimmed.results }}" + - "{{ testing_security_full_set_jobs_trimmed.results }}" + - "{{ aem_stack_manager_messenger_profiles_trimmed.results }}" + - "{{ aem_test_suite_profiles_trimmed.results }}" + - "{{ aem_aws_stack_builder_aem_stack_manager_profiles_trimmed.results }}" + +- name: "Generate jobs for security consolidated testing configuration profile directories" + file: + path: ../../../stage/jenkins/jobs/aem-opencloud-{{ aem_opencloud.version }}/testing/aws/{{ item[0].item.path }}-{{ item[2].item.path }}-{{ item[3].item.path }}-{{ item[4].item.path }}/{{ item[1].item.path }}/ + state: directory + mode: '0776' + with_nested: + - "{{ aem_aws_stack_builder_aem_consolidated_profiles_trimmed.results }}" + - "{{ testing_security_consolidated_jobs_trimmed.results }}" + - "{{ aem_stack_manager_messenger_profiles_trimmed.results }}" + - "{{ aem_test_suite_profiles_trimmed.results }}" + - "{{ aem_aws_stack_builder_aem_stack_manager_profiles_trimmed.results }}" + - name: "Generate jobs for promote author standby full-set testing configuration profile directories" file: path: ../../../stage/jenkins/jobs/aem-opencloud-{{ aem_opencloud.version }}/testing/aws/{{ item[0].item.path }}-{{ item[2].item.path }}-{{ item[3].item.path }}-{{ item[4].item.path }}/{{ item[1].item.path }}/ @@ -162,6 +206,30 @@ - "{{ aem_test_suite_profiles_trimmed.results }}" - "{{ aem_aws_stack_builder_aem_stack_manager_profiles_trimmed.results }}" +- name: "Generate jobs for security full-set testing configuration config.xml" + template: + src: '../../../templates/ansible/jenkins/config/category-config-profile.xml.j2' + dest: ../../../stage/jenkins/jobs/aem-opencloud-{{ aem_opencloud.version }}/testing/aws/{{ item[0].item.path }}-{{ item[2].item.path }}-{{ item[3].item.path }}-{{ item[4].item.path }}/config.xml + mode: '0644' + with_nested: + - "{{ aem_aws_stack_builder_aem_full_set_profiles_trimmed.results }}" + - "{{ testing_security_full_set_jobs_trimmed.results }}" + - "{{ aem_stack_manager_messenger_profiles_trimmed.results }}" + - "{{ aem_test_suite_profiles_trimmed.results }}" + - "{{ aem_aws_stack_builder_aem_stack_manager_profiles_trimmed.results }}" + +- name: "Generate jobs for security consolidated testing configuration config.xml" + template: + src: '../../../templates/ansible/jenkins/config/category-config-profile.xml.j2' + dest: ../../../stage/jenkins/jobs/aem-opencloud-{{ aem_opencloud.version }}/testing/aws/{{ item[0].item.path }}-{{ item[2].item.path }}-{{ item[3].item.path }}-{{ item[4].item.path }}/config.xml + mode: '0644' + with_nested: + - "{{ aem_aws_stack_builder_aem_consolidated_profiles_trimmed.results }}" + - "{{ testing_security_consolidated_jobs_trimmed.results }}" + - "{{ aem_stack_manager_messenger_profiles_trimmed.results }}" + - "{{ aem_test_suite_profiles_trimmed.results }}" + - "{{ aem_aws_stack_builder_aem_stack_manager_profiles_trimmed.results }}" + - name: "Generate jobs for promote author standby full-set testing configuration config.xml" template: src: '../../../templates/ansible/jenkins/config/category-config-profile.xml.j2' @@ -230,6 +298,34 @@ - "{{ aem_test_suite_profiles_trimmed.results }}" - "{{ aem_aws_stack_builder_aem_stack_manager_profiles_trimmed.results }}" +- name: "Generate jobs for security full-set testing config.xml" + vars: + aem_architecture_type: "{{ 'consolidated' if item[1].stdout is match('.*consolidated*') else 'full-set' }}" + template: + src: ../../../templates/ansible/jenkins/config/jobs-testing-security.xml.j2 + dest: ../../../stage/jenkins/jobs/aem-opencloud-{{ aem_opencloud.version }}/testing/aws/{{ item[0].item.path }}-{{ item[2].item.path }}-{{ item[3].item.path }}-{{ item[4].item.path }}/{{ item[1].item.path }}/config.xml + mode: '0644' + with_nested: + - "{{ aem_aws_stack_builder_aem_full_set_profiles_trimmed.results }}" + - "{{ testing_security_full_set_jobs_trimmed.results }}" + - "{{ aem_stack_manager_messenger_profiles_trimmed.results }}" + - "{{ aem_test_suite_profiles_trimmed.results }}" + - "{{ aem_aws_stack_builder_aem_stack_manager_profiles_trimmed.results }}" + +- name: "Generate jobs for security consolidated testing config.xml" + vars: + aem_architecture_type: "{{ 'consolidated' if item[1].stdout is match('.*consolidated*') else 'full-set' }}" + template: + src: ../../../templates/ansible/jenkins/config/jobs-testing-consolidated-security.xml.j2 + dest: ../../../stage/jenkins/jobs/aem-opencloud-{{ aem_opencloud.version }}/testing/aws/{{ item[0].item.path }}-{{ item[2].item.path }}-{{ item[3].item.path }}-{{ item[4].item.path }}/{{ item[1].item.path }}/config.xml + mode: '0644' + with_nested: + - "{{ aem_aws_stack_builder_aem_consolidated_profiles_trimmed.results }}" + - "{{ testing_security_consolidated_jobs_trimmed.results }}" + - "{{ aem_stack_manager_messenger_profiles_trimmed.results }}" + - "{{ aem_test_suite_profiles_trimmed.results }}" + - "{{ aem_aws_stack_builder_aem_stack_manager_profiles_trimmed.results }}" + - name: "Generate jobs for promote author standby full-set testing config.xml" vars: aem_architecture_type: "{{ 'consolidated' if item[1].stdout is match('.*consolidated*') else 'full-set' }}" diff --git a/provisioners/jenkins/jenkinsfiles/aem-opencloud/manage-environments/aws/switch-dns-consolidated b/provisioners/jenkins/jenkinsfiles/aem-opencloud/manage-environments/aws/switch-dns-consolidated index 48892cf8..68be9267 100644 --- a/provisioners/jenkins/jenkinsfiles/aem-opencloud/manage-environments/aws/switch-dns-consolidated +++ b/provisioners/jenkins/jenkinsfiles/aem-opencloud/manage-environments/aws/switch-dns-consolidated @@ -65,7 +65,7 @@ pipeline { steps { JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make switch-dns-consolidated config_path=${env.AOC_CONFIG_DIR}/aem-aws-stack-builder/${params.AOC_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/ stack_prefix=${params.STACK_PREFIX} author_publish_dispatcher_hosted_zone=${AUTHOR_PUBLISH_DISPATCHER_HOSTED_ZONE} author_publish_dispatcher_record_set=${AUTHOR_PUBLISH_DISPATCHER_RECORD_SET}") + ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make switch-dns-consolidated config_path=${env.AOC_CONFIG_DIR}/aem-aws-stack-builder/${params.AOC_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/ stack_prefix=${params.STACK_PREFIX} author_publish_dispatcher_hosted_zone=${params.AUTHOR_PUBLISH_DISPATCHER_HOSTED_ZONE} author_publish_dispatcher_record_set=${params.AUTHOR_PUBLISH_DISPATCHER_RECORD_SET}") } post { always { diff --git a/provisioners/jenkins/jenkinsfiles/aem-opencloud/operational-tasks/test-acceptance b/provisioners/jenkins/jenkinsfiles/aem-opencloud/operational-tasks/test-acceptance index d270c7dc..e87e8d8d 100644 --- a/provisioners/jenkins/jenkinsfiles/aem-opencloud/operational-tasks/test-acceptance +++ b/provisioners/jenkins/jenkinsfiles/aem-opencloud/operational-tasks/test-acceptance @@ -55,10 +55,87 @@ pipeline { } } } - stage('Run acceptance tests') { + stage('Prepare configuration') { + steps { + JenkinsStagePreStep this + ExecCommand(this, env.TMPDIR, "aem-test-suite", "make config-aem-aws config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE}") + } + post { + always { + JenkinsStagePostStep this + } + } + } + stage('Architecture') { + steps { + JenkinsStagePreStep this + ExecCommand(this, env.TMPDIR, "aem-test-suite", "make test-acceptance-architecture-${params.AEM_ARCHITECTURE} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE} stack_prefix=${params.STACK_PREFIX}") + } + post { + always { + JenkinsStagePostStep this + } + } + } + stage('Author-Primary') { + steps { + JenkinsStagePreStep this + ExecCommand(this, env.TMPDIR, "aem-test-suite", "make test-acceptance-author-primary config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE} stack_prefix=${params.STACK_PREFIX}") + } + post { + always { + JenkinsStagePostStep this + } + } + } + stage('Author-Standby') { + steps { + JenkinsStagePreStep this + ExecCommand(this, env.TMPDIR, "aem-test-suite", "make test-acceptance-author-standby config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE} stack_prefix=${params.STACK_PREFIX}") + } + post { + always { + JenkinsStagePostStep this + } + } + } + stage('Publish') { + steps { + JenkinsStagePreStep this + ExecCommand(this, env.TMPDIR, "aem-test-suite", "make test-acceptance-publish config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE} stack_prefix=${params.STACK_PREFIX}") + } + post { + always { + JenkinsStagePostStep this + } + } + } + stage('Author-Dispatcher') { + steps { + JenkinsStagePreStep this + ExecCommand(this, env.TMPDIR, "aem-test-suite", "make test-acceptance-author-dispatcher config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE} stack_prefix=${params.STACK_PREFIX}") + } + post { + always { + JenkinsStagePostStep this + } + } + } + stage('Publish-Dispatcher') { + steps { + JenkinsStagePreStep this + ExecCommand(this, env.TMPDIR, "aem-test-suite", "make test-acceptance-publish-dispatcher config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE} stack_prefix=${params.STACK_PREFIX}") + } + post { + always { + JenkinsStagePostStep this + } + } + } + stage('Orchestrator') { steps { JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-test-suite", "make test-acceptance-${params.AEM_ARCHITECTURE} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE} stack_prefix=${params.STACK_PREFIX}") + ExecCommand(this, env.TMPDIR, "aem-test-suite", "make test-acceptance-orchestrator config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE} stack_prefix=${params.STACK_PREFIX}") } post { always { diff --git a/provisioners/jenkins/jenkinsfiles/aem-opencloud/operational-tasks/test-aem-security b/provisioners/jenkins/jenkinsfiles/aem-opencloud/operational-tasks/test-aem-security index d7c02a29..c004a5f7 100644 --- a/provisioners/jenkins/jenkinsfiles/aem-opencloud/operational-tasks/test-aem-security +++ b/provisioners/jenkins/jenkinsfiles/aem-opencloud/operational-tasks/test-aem-security @@ -14,10 +14,10 @@ pipeline { TMPDIR = "/tmp/shinesolutions/aem-opencloud-manager" AOC_CONFIG_DIR = "${env.TMPDIR}/aem-opencloud-config" AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE = "${env.AOC_CONFIG_DIR}/aem-test-suite/${params.AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/" - } parameters { string(name: 'AOC_VERSION_AEM_TEST_SUITE', defaultValue: config.library.aem_test_suite, description: 'Version of aem-test-suite repo to archive') + string(name: 'AEM_HOST', defaultValue: '', description: '(Optional) DNS Name of the AEM Host to run the test against, e.g. author.aemopencloud.cms') } stages { stage('Initialise pipeline') { @@ -69,6 +69,11 @@ pipeline { } stage('Run Security test') { steps { + script { + if (!params.AEM_HOST.isEmpty()) { + env.aem_host = params.AEM_HOST + } + } JenkinsStagePreStep this ExecCommand(this, env.TMPDIR, "aem-test-suite", "make test-security-${params.AEM_SECURITY_TEST_PLAN} stack_prefix=${params.STACK_PREFIX}") } diff --git a/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/consolidated-platform b/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/consolidated-platform index e6761f0e..9312e6e6 100644 --- a/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/consolidated-platform +++ b/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/consolidated-platform @@ -1,6 +1,15 @@ @Library('aem-opencloud-manager') _ def configString = libraryResource 'aem_opencloud/config.json' def config = readJSON text: configString +def getDate() { + Date date = new Date() + return date.format('yyyyMMdd') as String +} +def genId() { + return UUID.randomUUID().toString().split('-')[-1] +} +def date = getDate() +def id = genId() pipeline { agent { docker { @@ -10,19 +19,15 @@ pipeline { } environment { TMPDIR = "/tmp/shinesolutions/aem-opencloud-manager" - AOC_CONFIG_DIR = "${env.TMPDIR}/aem-opencloud-config" - AOC_CONSOLIDATED_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER = "${env.AOC_CONFIG_DIR}/aem-aws-stack-builder/${params.AOC_AEM_STACK_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/" - AOC_STACK_MANAGER_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER = "${env.AOC_CONFIG_DIR}/aem-aws-stack-builder/${params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/" - AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER = "${env.AOC_CONFIG_DIR}/aem-stack-manager-messenger/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/" - // AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE = "${env.AOC_CONFIG_DIR}/aem-test-suite/${params.AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/" } parameters { string(name: 'AOC_VERSION_AEM_AWS_STACK_BUILDER', defaultValue: config.library.aem_aws_stack_builder, description: 'Version of aem-aws-stack-builder repo to archive') string(name: 'AOC_VERSION_AEM_STACK_MANAGER_MESSENGER', defaultValue: config.library.aem_stack_manager_messenger, description: 'Version of aem-stack-manager-messenger repo') - // string(name: 'AOC_VERSION_AEM_TEST_SUITE', defaultValue: config.library.aem_test_suite, description: 'Version of aem-test-suite repo to archive') string(name: 'SOURCE_AUTHOR_SNAPSHOT_ID', defaultValue: '', description: 'Source Snapshot ID from the Author repository') string(name: 'SOURCE_PUBLISH_SNAPSHOT_ID', defaultValue: '', description: 'Source Snapshot ID from the Publish repository') string(name: 'SOURCE_SNAPSHOT_STACK_PREFIX', defaultValue: '', description: 'Source Stack Prefix to get source Snapshot IDs from.') + string(name: 'STACK_MANAGER_STACK_PREFIX', defaultValue: 'aoc-sm-' + id, description: 'Stack Manager Stack Prefix to create for the test.') + string(name: 'STACK_PREFIX', defaultValue: 'aoc-con-' + id, description: 'AEM Stack Stack Prefix to create for the test.') } stages { @@ -37,417 +42,373 @@ pipeline { JenkinsPipelinePreStep this } } - stage('Prepare AEM Stack Manager libraries') { - steps { - JenkinsStagePreStep this - AocPrepareLibrary(this, "aem-aws-stack-builder", params.AOC_VERSION_AEM_AWS_STACK_BUILDER, params.AWS_LIBRARY_S3_BUCKET, params.AWS_LIBRARY_S3_PATH, env.TMPDIR) - AocPrepareConfig(this, params.AOC_CONFIG_ARTIFACT_URL, env.TMPDIR) - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Resolve AEM Stack Manager dependencies') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make deps") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Prepare AEM Stack Manager configuration') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make config config_path=${env.AOC_STACK_MANAGER_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER}") - } - post { - always { - JenkinsStagePostStep this - } - } - } stage('Create AEM Stack Manager environment') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make create-stack-manager config_path=${env.AOC_STACK_MANAGER_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER} stack_prefix=${params.STACK_MANAGER_STACK_PREFIX}") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Prepare AEM Consolidated libraries') { - steps { - JenkinsStagePreStep this - sh "rm -rf ${env.TMPDIR}" - AocPrepareLibrary(this, "aem-aws-stack-builder", params.AOC_VERSION_AEM_AWS_STACK_BUILDER, params.AWS_LIBRARY_S3_BUCKET, params.AWS_LIBRARY_S3_PATH, env.TMPDIR) - AocPrepareLibrary(this, "aem-stack-manager-messenger", params.AOC_VERSION_AEM_STACK_MANAGER_MESSENGER, params.AWS_LIBRARY_S3_BUCKET, params.AWS_LIBRARY_S3_PATH, env.TMPDIR) - // AocPrepareLibrary(this, "aem-test-suite", params.AOC_VERSION_AEM_TEST_SUITE, params.AWS_LIBRARY_S3_BUCKET, params.AWS_LIBRARY_S3_PATH, env.TMPDIR) - AocPrepareConfig(this, params.AOC_CONFIG_ARTIFACT_URL, env.TMPDIR) - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Resolve AEM Consolidated dependencies') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make deps") - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make deps") - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make stage") - // ExecCommand(this, env.TMPDIR, "aem-test-suite", "make deps") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Prepare AEM Consolidated configuration') { - steps { - JenkinsStagePreStep this - GenerateOfflineSnapshotConfig(this, params.SOURCE_AUTHOR_SNAPSHOT_ID, params.SOURCE_PUBLISH_SNAPSHOT_ID, params.SOURCE_SNAPSHOT_STACK_PREFIX, env.AOC_CONSOLIDATED_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER) - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make config config_path=${env.AOC_CONSOLIDATED_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER}") - // ExecCommand(this, env.TMPDIR, "aem-test-suite", "make config-aem-aws config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../manage-environments/aws/${params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/create-stack-manager/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'AOC_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER', value: params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER), + string(name: 'STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX) + ] } } stage('Create AEM Consolidated environment') { steps { - JenkinsStagePreStep this - AocPrepareParamArtifact(this, params.AOC_DEPLOYMENT_DESCRIPTOR_URL, env.TMPDIR + '/aem-aws-stack-builder/stage/', 'deploy-artifacts-descriptor.json') - AocPrepareParamArtifact(this, params.AOC_EXPORT_DESCRIPTOR_URL, env.TMPDIR + '/aem-aws-stack-builder/stage/', 'export-backups-descriptor.json') - AocPrepareParamArtifact(this, params.AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL, env.TMPDIR + '/aem-aws-stack-builder/stage/', 'content-healthcheck-descriptor.json') - AocPrepareParamArtifact(this, params.AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL, env.TMPDIR + '/aem-aws-stack-builder/stage/', 'aem-custom-stack-provisioner.tar.gz') - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make create-consolidated config_path=${env.AOC_CONSOLIDATED_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER} stack_prefix=${params.STACK_PREFIX}") - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make check-readiness-consolidated stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Run acceptance tests') { - steps { - JenkinsStagePreStep this - // ExecCommand(this, env.TMPDIR, "aem-test-suite", "make test-acceptance-consolidated stack_prefix=${params.STACK_PREFIX}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../manage-environments/aws/${params.AOC_AEM_STACK_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}-${AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}-${AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/create-consolidated/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AOC_DEPLOYMENT_DESCRIPTOR_URL', value: params.AOC_DEPLOYMENT_DESCRIPTOR_URL), + string(name: 'AOC_EXPORT_DESCRIPTOR_URL', value: params.AOC_EXPORT_DESCRIPTOR_URL), + string(name: 'AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL', value: params.AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL), + string(name: 'AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL', value: params.AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL), + string(name: 'SOURCE_AUTHOR_SNAPSHOT_ID', value: params.SOURCE_AUTHOR_SNAPSHOT_ID), + string(name: 'SOURCE_PUBLISH_SNAPSHOT_ID', value: params.SOURCE_PUBLISH_SNAPSHOT_ID), + string(name: 'SOURCE_SNAPSHOT_STACK_PREFIX', value: params.SOURCE_SNAPSHOT_STACK_PREFIX) + ] } } stage('Unschedule live snapshot') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make unschedule-live-snapshot-consolidated stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - - JenkinsStagePostStep this - } - } - } - stage('Unschedule offline snapshot') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make unschedule-offline-snapshot-consolidated stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - - JenkinsStagePostStep this - } - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/unschedule-live-snapshot-consolidated/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] + } + } + stage('Unschedule offline snapshots') { + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/unschedule-offline-snapshot-consolidated/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] + } } stage('Unschedule offline compaction snapshot') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make unschedule-offline-compaction-snapshot-consolidated stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } - } + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/unschedule-offline-compaction-snapshot-consolidated/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] + } } stage('list all packages') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make list-packages stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=author-publish-dispatcher") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/list-packages/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'author-publish-dispatcher') + ] } } stage('Enable CRXDE') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make enable-crxde stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=author-publish-dispatcher") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/enable-crxde/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'author-publish-dispatcher') + ] } } stage('Disable CRXDE') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make disable-crxde stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=author-publish-dispatcher") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/disable-crxde/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'author-publish-dispatcher') + ] } } stage('Flush AEM Publish-Dispatcher cache') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make flush-dispatcher-cache stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=author-publish-dispatcher") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/flush-dispatcher-cache/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'author-publish-dispatcher') + ] } } stage('Deploy applications') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make deploy-artifacts-consolidated stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} descriptor_file=deploy-artifacts-descriptor.json") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/deploy-artifacts-consolidated/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AOC_DEPLOYMENT_DESCRIPTOR_URL', value: params.AOC_DEPLOYMENT_DESCRIPTOR_URL) + ] } } stage('Check environment readiness after deployment') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make check-readiness-consolidated stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/check-readiness-consolidated/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] } } stage('Deplopy single Artifact on Author') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make deploy-artifact stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=author-publish-dispatcher aem_id=author source=${params.DEPLOY_PACKAGE_SOURCE} group=${params.DEPLOY_PACKAGE_GROUP} name=${params.DEPLOY_PACKAGE_NAME} version=${params.DEPLOY_PACKAGE_VERSION} replicate=${params.DEPLOY_PACKAGE_REPLICATE} activate=${params.DEPLOY_PACKAGE_ACTIVATE} force=${params.DEPLOY_PACKAGE_FORCE}") - } - post { - always { - - JenkinsStagePostStep this - } + // Script ensures backwards compatibility + script{ + if ( params.DEPLOY_PACKAGE_SOURCE[-4..-1] == '.zip' ) { + package_source = params.DEPLOY_PACKAGE_SOURCE + } + else { + package_source = params.DEPLOY_PACKAGE_SOURCE + '/' + params.DEPLOY_PACKAGE_NAME + '-' + params.DEPLOY_PACKAGE_VERSION + '.zip' + } + } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/deploy-artifact/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'author-publish-dispatcher'), + string(name: 'AEM_ID', value: 'author'), + string(name: 'PACKAGE_ACTIVATE', value: params.DEPLOY_PACKAGE_ACTIVATE), + string(name: 'PACKAGE_FORCE', value: params.DEPLOY_PACKAGE_FORCE), + string(name: 'PACKAGE_GROUP', value: params.DEPLOY_PACKAGE_GROUP), + string(name: 'PACKAGE_NAME', value: params.DEPLOY_PACKAGE_NAME), + string(name: 'PACKAGE_REPLICATE', value: params.DEPLOY_PACKAGE_REPLICATE), + string(name: 'PACKAGE_SOURCE', value: package_source), + string(name: 'PACKAGE_VERSION', value: params.DEPLOY_PACKAGE_VERSION) + ] } } stage('Deplopy single Artifact on Publish') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make deploy-artifact stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=author-publish-dispatcher aem_id=publish source=${params.DEPLOY_PACKAGE_SOURCE} group=${params.DEPLOY_PACKAGE_GROUP} name=${params.DEPLOY_PACKAGE_NAME} version=${params.DEPLOY_PACKAGE_VERSION} replicate=${params.DEPLOY_PACKAGE_REPLICATE} activate=${params.DEPLOY_PACKAGE_ACTIVATE} force=${params.DEPLOY_PACKAGE_FORCE}") - } - post { - always { - - JenkinsStagePostStep this - } + // Script ensures backwards compatibility + script{ + if ( params.DEPLOY_PACKAGE_SOURCE[-4..-1] == '.zip' ) { + package_source = params.DEPLOY_PACKAGE_SOURCE + } + else { + package_source = params.DEPLOY_PACKAGE_SOURCE + '/' + params.DEPLOY_PACKAGE_NAME + '-' + params.DEPLOY_PACKAGE_VERSION + '.zip' + } + } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/deploy-artifact/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'author-publish-dispatcher'), + string(name: 'AEM_ID', value: 'publish'), + string(name: 'PACKAGE_ACTIVATE', value: params.DEPLOY_PACKAGE_ACTIVATE), + string(name: 'PACKAGE_FORCE', value: params.DEPLOY_PACKAGE_FORCE), + string(name: 'PACKAGE_GROUP', value: params.DEPLOY_PACKAGE_GROUP), + string(name: 'PACKAGE_NAME', value: params.DEPLOY_PACKAGE_NAME), + string(name: 'PACKAGE_REPLICATE', value: params.DEPLOY_PACKAGE_REPLICATE), + string(name: 'PACKAGE_SOURCE', value: package_source), + string(name: 'PACKAGE_VERSION', value: params.DEPLOY_PACKAGE_VERSION) + ] } } stage('Check environment readiness after single artifact deployment') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make check-readiness-consolidated stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/check-readiness-consolidated/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] } } stage('Export artifacts') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make export-packages-consolidated stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} descriptor_file='export-backups-descriptor.json'") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/export-packages-consolidated/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AOC_EXPORT_DESCRIPTOR_URL', value: params.AOC_EXPORT_DESCRIPTOR_URL) + ] } } stage('Import exported Artifact on Author') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make import-package stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=author-publish-dispatcher aem_id=author source_stack_prefix=${params.IMPORT_PACKAGE_SOURCE_STACK_PREFIX} package_group=${params.IMPORT_PACKAGE_GROUP} package_name=${params.IMPORT_PACKAGE_NAME} package_datestamp=${params.IMPORT_PACKAGE_DATESTAMP}") - } - post { - always { - - JenkinsStagePostStep this - } + // Script ensures backwards compatibility + script{ + if ( params.IMPORT_PACKAGE_SOURCE_STACK_PREFIX.isEmpty() ) { + package_source_stack_prefix = params.STACK_PREFIX + } + else { + package_source_stack_prefix = params.IMPORT_PACKAGE_SOURCE_STACK_PREFIX + } + if ( params.IMPORT_PACKAGE_DATESTAMP.isEmpty() ) { + package_datestamp = date + } + else { + package_datestamp = params.IMPORT_PACKAGE_DATESTAMP + } + } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/import-package/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'author-publish-dispatcher'), + string(name: 'AEM_ID', value: 'author'), + string(name: 'PACKAGE_DATESTAMP', value: package_datestamp), + string(name: 'PACKAGE_GROUP', value: params.IMPORT_PACKAGE_GROUP), + string(name: 'PACKAGE_NAME', value: params.IMPORT_PACKAGE_NAME), + string(name: 'PACKAGE_SOURCE_STACK_PREFIX', value: package_source_stack_prefix) + ] } } stage('Import exported Artifact on Publish') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make import-package stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=author-publish-dispatcher aem_id=publish source_stack_prefix=${params.IMPORT_PACKAGE_SOURCE_STACK_PREFIX} package_group=${params.IMPORT_PACKAGE_GROUP} package_name=${params.IMPORT_PACKAGE_NAME} package_datestamp=${params.IMPORT_PACKAGE_DATESTAMP}") - } - post { - always { - - JenkinsStagePostStep this - } + // Script ensures backwards compatibility + script{ + if ( params.IMPORT_PACKAGE_SOURCE_STACK_PREFIX.isEmpty() ) { + package_source_stack_prefix = params.STACK_PREFIX + } + else { + package_source_stack_prefix = params.IMPORT_PACKAGE_SOURCE_STACK_PREFIX + } + if ( params.IMPORT_PACKAGE_DATESTAMP.isEmpty() ) { + package_datestamp = date + } + else { + package_datestamp = params.IMPORT_PACKAGE_DATESTAMP + } + } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/import-package/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'author-publish-dispatcher'), + string(name: 'AEM_ID', value: 'publish'), + string(name: 'PACKAGE_DATESTAMP', value: package_datestamp), + string(name: 'PACKAGE_GROUP', value: params.IMPORT_PACKAGE_GROUP), + string(name: 'PACKAGE_NAME', value: params.IMPORT_PACKAGE_NAME), + string(name: 'PACKAGE_SOURCE_STACK_PREFIX', value: package_source_stack_prefix) + ] } } stage('Check environment readiness after package import') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make check-readiness-consolidated stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/check-readiness-consolidated/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] } } stage('Run live-snapshot') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make live-snapshot stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=author-publish-dispatcher") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/live-snapshot/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'author-publish-dispatcher') + ] } } stage('Run offline-snapshot') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make offline-snapshot-consolidated stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/offline-snapshot-consolidated/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] } } stage('Check environment readiness after offline-snapshot') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make check-readiness-consolidated stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/check-readiness-consolidated/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] } } stage('Run offline-compaction-snapshot') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make offline-compaction-snapshot-consolidated stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/offline-compaction-snapshot-consolidated/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] } } stage('Check environment readiness after offline-compaction-snapshot') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make check-readiness-consolidated stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/check-readiness-consolidated/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] } } stage('Schedule live-snapshot') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make schedule-live-snapshot-consolidated stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/schedule-live-snapshot-consolidated/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'author-primary') + ] } } stage('Schedule offline-snapshot') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make schedule-offline-snapshot-consolidated stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/schedule-offline-snapshot-consolidated/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] } } stage('Schedule offline-compaction-snapshot') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make schedule-offline-compaction-snapshot-consolidated stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Delete AEM OpenCloud Consolidated environment') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make delete-consolidated config_path=${env.AOC_CONSOLIDATED_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER} stack_prefix=${params.STACK_PREFIX}") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Delete AEM OpenCloud Stack Manager environment') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make delete-stack-manager config_path=${env.AOC_STACK_MANAGER_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER} stack_prefix=${params.STACK_MANAGER_STACK_PREFIX}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/schedule-offline-compaction-snapshot-consolidated/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] } } } post { always { + build job: "../../../manage-environments/aws/${params.AOC_AEM_STACK_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}-${AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}-${AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/delete-consolidated/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX) + ] + build job: "../../../manage-environments/aws/${params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/delete-stack-manager/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'AOC_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER', value: params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER), + string(name: 'STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX) + ] JenkinsPipelinePostStep this } success { @@ -465,4 +426,4 @@ pipeline { } } } -} + } diff --git a/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/consolidated-security b/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/consolidated-security new file mode 100644 index 00000000..a5c44374 --- /dev/null +++ b/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/consolidated-security @@ -0,0 +1,125 @@ +@Library('aem-opencloud-manager') _ +def configString = libraryResource 'aem_opencloud/config.json' +def config = readJSON text: configString +def getDate() { + Date date = new Date() + return date.format('yyyyMMdd') as String +} +def genId() { + return UUID.randomUUID().toString().split('-')[-1] +} +def date = getDate() +def id = genId() +pipeline { + agent { + docker { + image params.JENKINS_AGENT_DOCKER_IMAGE + args params.JENKINS_AGENT_DOCKER_ARGS + } + } + environment { + TMPDIR = "/tmp/shinesolutions/aem-opencloud-manager" + } + parameters { + string(name: 'AOC_VERSION_AEM_AWS_STACK_BUILDER', defaultValue: config.library.aem_aws_stack_builder, description: 'Version of aem-aws-stack-builder repo to archive') + string(name: 'AOC_VERSION_AEM_STACK_MANAGER_MESSENGER', defaultValue: config.library.aem_stack_manager_messenger, description: 'Version of aem-stack-manager-messenger repo') + string(name: 'AOC_VERSION_AEM_TEST_SUITE', defaultValue: config.library.aem_test_suite, description: 'Version of aem-test-suite repo to archive') + string(name: 'SOURCE_AUTHOR_SNAPSHOT_ID', defaultValue: '', description: 'Source Snapshot ID from the Author repository') + string(name: 'SOURCE_PUBLISH_SNAPSHOT_ID', defaultValue: '', description: 'Source Snapshot ID from the Publish repository') + string(name: 'SOURCE_SNAPSHOT_STACK_PREFIX', defaultValue: '', description: 'Source Stack Prefix to get source Snapshot IDs from.') + string(name: 'STACK_MANAGER_STACK_PREFIX', defaultValue: 'aoc-sm-' + id, description: 'Stack Manager Stack Prefix to create for the test.') + string(name: 'STACK_PREFIX', defaultValue: 'aoc-fs-' + id, description: 'AEM Stack Stack Prefix to create for the test.') + } + stages { + stage('Initialise Jenkins pipeline') { + steps { + script { + if (params.ENABLE_SLACK_NOTIFICATIONS == true) { + slackSend (color: '#FFFF00', message: "START: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})") + } + } + JenkinsInit(this, params.AOC_CUSTOM_MANAGER_STEPS_ARTIFACT_URL, env.TMPDIR) + JenkinsPipelinePreStep this + } + } + stage('Create AEM Stack Manager environment') { + steps { + build job: "../../../manage-environments/aws/${params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/create-stack-manager/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'AOC_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER', value: params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER), + string(name: 'STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX) + ] + } + } + stage('Create AEM Consolidated environment') { + steps { + build job: "../../../manage-environments/aws/${params.AOC_AEM_STACK_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}-${AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}-${AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/create-consolidated/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AOC_DEPLOYMENT_DESCRIPTOR_URL', value: params.AOC_DEPLOYMENT_DESCRIPTOR_URL), + string(name: 'AOC_EXPORT_DESCRIPTOR_URL', value: params.AOC_EXPORT_DESCRIPTOR_URL), + string(name: 'AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL', value: params.AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL), + string(name: 'AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL', value: params.AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL), + string(name: 'SOURCE_AUTHOR_SNAPSHOT_ID', value: params.SOURCE_AUTHOR_SNAPSHOT_ID), + string(name: 'SOURCE_PUBLISH_SNAPSHOT_ID', value: params.SOURCE_PUBLISH_SNAPSHOT_ID), + string(name: 'SOURCE_SNAPSHOT_STACK_PREFIX', value: params.SOURCE_SNAPSHOT_STACK_PREFIX) + ] + } + } + stage('Switch DNS ') { + steps { + build job: "../../../manage-environments/aws/${params.AOC_AEM_STACK_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}-${AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}-${AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/switch-dns-consolidated/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'AUTHOR_PUBLISH_DISPATCHER_HOSTED_ZONE', value: params.AUTHOR_DISPATCHER_HOSTED_ZONE), + string(name: 'AUTHOR_PUBLISH_DISPATCHER_RECORD_SET', value: params.AUTHOR_DISPATCHER_RECORD_SET) + ] + } + } + stage('AEM Author Security test') { + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/test-aem-security/${params.AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'AEM_SECURITY_TEST_PLAN', value: 'author') + string(name: 'AEM_HOST', value: "${params.AUTHOR_DISPATCHER_RECORD_SET}.${params.AUTHOR_DISPATCHER_HOSTED_ZONE}") + ] + } + } + } + post { + always { + build job: "../../../manage-environments/aws/${params.AOC_AEM_STACK_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}-${AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}-${AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/delete-consolidated/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX) + ] + build job: "../../../manage-environments/aws/${params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/delete-stack-manager/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'AOC_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER', value: params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER), + string(name: 'STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] + JenkinsPipelinePostStep this + } + success { + script { + if (params.ENABLE_SLACK_NOTIFICATIONS == true) { + slackSend (color: '#00FF00', message: "SUCCESS: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})") + } + } + } + failure { + script { + if (params.ENABLE_SLACK_NOTIFICATIONS == true) { + slackSend (color: '#FF0000', message: "FAILURE: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})") + } + } + } + } +} diff --git a/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/full-set-blue-green b/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/full-set-blue-green index 23848d63..2dd11fdb 100644 --- a/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/full-set-blue-green +++ b/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/full-set-blue-green @@ -1,6 +1,15 @@ @Library('aem-opencloud-manager') _ def configString = libraryResource 'aem_opencloud/config.json' def config = readJSON text: configString +def getDate() { + Date date = new Date() + return date.format('yyyyMMdd') as String +} +def genId() { + return UUID.randomUUID().toString().split('-')[-1] +} +def date = getDate() +def id = genId() pipeline { agent { docker { @@ -10,11 +19,6 @@ pipeline { } environment { TMPDIR = "/tmp/shinesolutions/aem-opencloud-manager" - AOC_CONFIG_DIR = "${env.TMPDIR}/aem-opencloud-config" - AOC_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER = "${env.AOC_CONFIG_DIR}/aem-aws-stack-builder/${params.AOC_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/" - AOC_STACK_MANAGER_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER = "${env.AOC_CONFIG_DIR}/aem-aws-stack-builder/${params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/" - AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER = "${env.AOC_CONFIG_DIR}/aem-stack-manager-messenger/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/" - AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE = "${env.AOC_CONFIG_DIR}/aem-test-suite/${params.AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/" } parameters { string(name: 'AOC_VERSION_AEM_AWS_STACK_BUILDER', defaultValue: config.library.aem_aws_stack_builder, description: 'Version of aem-aws-stack-builder repo to archive') @@ -22,7 +26,11 @@ pipeline { string(name: 'AOC_VERSION_AEM_TEST_SUITE', defaultValue: config.library.aem_test_suite, description: 'Version of aem-test-suite repo to archive') string(name: 'SOURCE_AUTHOR_SNAPSHOT_ID', defaultValue: '', description: 'Source Snapshot ID from the Author repository') string(name: 'SOURCE_PUBLISH_SNAPSHOT_ID', defaultValue: '', description: 'Source Snapshot ID from the Publish repository') - string(name: 'SOURCE_SNAPSHOT_STACK_PREFIX', defaultValue: '', description: 'Source Stack Prefix to get source Snapshot IDs from.') } + string(name: 'SOURCE_SNAPSHOT_STACK_PREFIX', defaultValue: '', description: 'Source Stack Prefix to get source Snapshot IDs from.') + string(name: 'STACK_MANAGER_STACK_PREFIX', defaultValue: 'aoc-sm-' + id, description: 'Stack Manager Stack Prefix to create for the test.') + string(name: 'STACK_PREFIX_BLUE', defaultValue: 'aoc-fs-blue-' + id, description: 'AEM Blue Stack Stack Prefix to create for the test.') + string(name: 'STACK_PREFIX_GREEN', defaultValue: 'aoc-fs-green-' + id, description: 'AEM Green Stack Stack Prefix to create for the test.') + } stages { stage('Initialise Jenkins pipeline') { steps { @@ -35,317 +43,159 @@ pipeline { JenkinsPipelinePreStep this } } - stage('Prepare AEM Stack Manager libraries') { - steps { - JenkinsStagePreStep this - AocPrepareLibrary(this, "aem-aws-stack-builder", params.AOC_VERSION_AEM_AWS_STACK_BUILDER, params.AWS_LIBRARY_S3_BUCKET, params.AWS_LIBRARY_S3_PATH, env.TMPDIR) - AocPrepareConfig(this, params.AOC_CONFIG_ARTIFACT_URL, env.TMPDIR) - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Resolve AEM Stack Manager dependencies') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make deps") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Prepare AEM Stack Manager configuration') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make config config_path=${env.AOC_STACK_MANAGER_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER}") - } - post { - always { - JenkinsStagePostStep this - } - } - } stage('Create AEM Stack Manager environment') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make create-stack-manager config_path=${env.AOC_STACK_MANAGER_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER} stack_prefix=${params.STACK_MANAGER_STACK_PREFIX}") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Prepare AEM OpenCloud libraries and configuration for blue stack') { - steps { - JenkinsStagePreStep this - sh "rm -rf ${env.TMPDIR}" - AocPrepareLibrary(this, "aem-aws-stack-builder", params.AOC_VERSION_AEM_AWS_STACK_BUILDER, params.AWS_LIBRARY_S3_BUCKET, params.AWS_LIBRARY_S3_PATH, env.TMPDIR) - AocPrepareLibrary(this, "aem-stack-manager-messenger", params.AOC_VERSION_AEM_STACK_MANAGER_MESSENGER, params.AWS_LIBRARY_S3_BUCKET, params.AWS_LIBRARY_S3_PATH, env.TMPDIR) - AocPrepareLibrary(this, "aem-test-suite", params.AOC_VERSION_AEM_TEST_SUITE, params.AWS_LIBRARY_S3_BUCKET, params.AWS_LIBRARY_S3_PATH, env.TMPDIR) - AocPrepareConfig(this, params.AOC_CONFIG_ARTIFACT_URL, env.TMPDIR) - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Resolve dependencies for blue stack') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make deps") - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make deps") - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make stage") - ExecCommand(this, env.TMPDIR, "aem-test-suite", "make deps") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Prepare configuration for blue AEM environment') { - steps { - JenkinsStagePreStep this - GenerateOfflineSnapshotConfig(this, params.SOURCE_AUTHOR_SNAPSHOT_ID, params.SOURCE_PUBLISH_SNAPSHOT_ID, params.SOURCE_SNAPSHOT_STACK_PREFIX, env.AOC_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER) - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make config config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER}") - ExecCommand(this, env.TMPDIR, "aem-test-suite", "make config-aem-aws config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE}") - } - post { - always { - // Running stage post-script - JenkinsStagePostStep this - } + build job: "../../../manage-environments/aws/${params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/create-stack-manager/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'AOC_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER', value: params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER),, + string(name: 'STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX) + ] } } stage('Create blue AEM environment') { steps { - JenkinsStagePreStep this - AocPrepareParamArtifact(this, params.AOC_DEPLOYMENT_DESCRIPTOR_URL, env.TMPDIR + '/aem-aws-stack-builder/stage/', 'deploy-artifacts-descriptor.json') - AocPrepareParamArtifact(this, params.AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL, env.TMPDIR + '/aem-aws-stack-builder/stage/', 'content-healthcheck-descriptor.json') - AocPrepareParamArtifact(this, params.AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL, env.TMPDIR + '/aem-aws-stack-builder/stage/', 'aem-custom-stack-provisioner.tar.gz') - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make create-full-set config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER} stack_prefix=${params.STACK_PREFIX_BLUE}") - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make check-readiness-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX_BLUE} config_path=${AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Run acceptance tests for blue AEM environment') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-test-suite", "make test-acceptance-full-set config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE} stack_prefix=${params.STACK_PREFIX_BLUE}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../manage-environments/aws/${params.AOC_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}-${AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}-${AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/create-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX_BLUE), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AOC_DEPLOYMENT_DESCRIPTOR_URL', value: params.AOC_DEPLOYMENT_DESCRIPTOR_URL), + string(name: 'AOC_EXPORT_DESCRIPTOR_URL', value: params.AOC_EXPORT_DESCRIPTOR_URL), + string(name: 'AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL', value: params.AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL), + string(name: 'AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL', value: params.AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL), + string(name: 'SOURCE_AUTHOR_SNAPSHOT_ID', value: params.SOURCE_AUTHOR_SNAPSHOT_ID), + string(name: 'SOURCE_PUBLISH_SNAPSHOT_ID', value: params.SOURCE_PUBLISH_SNAPSHOT_ID), + string(name: 'SOURCE_SNAPSHOT_STACK_PREFIX', value: params.SOURCE_SNAPSHOT_STACK_PREFIX) + ] } } stage('Deploy applications on blue AEM environment') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make deploy-artifacts-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX_BLUE} config_path=${AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} descriptor_file=deploy-artifacts-descriptor.json") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/deploy-artifacts-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX_BLUE), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AOC_DEPLOYMENT_DESCRIPTOR_URL', value: params.AOC_DEPLOYMENT_DESCRIPTOR_URL) + + ] } } - stage('Check Content ALARM State is OK on blue AEM environment') { + stage('Check Blue Stack after deployment') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-test-suite", "make test-contenthealthcheck-alarm-state stack_prefix=${params.STACK_PREFIX_BLUE} config_path=${AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/check-readiness-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX_BLUE), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] } } - stage('Check blue AEM environment readiness') { + stage('Check Content ALARM State is OK on blue AEM environment') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make check-readiness-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX_BLUE} config_path=${AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/test-contenthealthcheck-alarm/${params.AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX_BLUE), + ] + } } stage('Run SM-Event offline-snapshot on blue AEM environment') { steps { - // Running Stage Prerun-Script - JenkinsStagePreStep this - // Trigger offline-snapshot for Consolidated - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make offline-snapshot-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX_BLUE} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - // Running stage post-script - JenkinsStagePostStep this - } - } - } - stage('Delete blue AEM environment') { - steps { - JenkinsStagePreStep this - - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make delete-full-set config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER} stack_prefix=${params.STACK_PREFIX_BLUE}") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Prepare AEM OpenCloud libraries and configuration for green stack') { - steps { - JenkinsStagePreStep this - sh "rm -rf ${env.TMPDIR}" - AocPrepareLibrary(this, "aem-aws-stack-builder", params.AOC_VERSION_AEM_AWS_STACK_BUILDER, params.AWS_LIBRARY_S3_BUCKET, params.AWS_LIBRARY_S3_PATH, env.TMPDIR) - AocPrepareLibrary(this, "aem-stack-manager-messenger", params.AOC_VERSION_AEM_STACK_MANAGER_MESSENGER, params.AWS_LIBRARY_S3_BUCKET, params.AWS_LIBRARY_S3_PATH, env.TMPDIR) - AocPrepareLibrary(this, "aem-test-suite", params.AOC_VERSION_AEM_TEST_SUITE, params.AWS_LIBRARY_S3_BUCKET, params.AWS_LIBRARY_S3_PATH, env.TMPDIR) - AocPrepareConfig(this, params.AOC_CONFIG_ARTIFACT_URL, env.TMPDIR) - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Resolve dependencies for green stack') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make deps") - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make deps") - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make stage") - ExecCommand(this, env.TMPDIR, "aem-test-suite", "make deps") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/offline-snapshot-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX_BLUE), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] } } - stage('Prepare configuration for green AEM environment') { + stage('Check environment readiness after offline-snapshot') { steps { - JenkinsStagePreStep this - GenerateOfflineSnapshotConfigV2(this, params.SOURCE_AUTHOR_SNAPSHOT_ID, params.SOURCE_PUBLISH_SNAPSHOT_ID, params.STACK_PREFIX_BLUE, env.AOC_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER, params.AWS_REGION) - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make config config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER}") - ExecCommand(this, env.TMPDIR, "aem-test-suite", "make config-aem-aws config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE}") - } - post { - always { - // Running stage post-script - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/check-readiness-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX_BLUE), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] } } stage('Create green AEM environment') { steps { - JenkinsStagePreStep this - AocPrepareParamArtifact(this, params.AOC_DEPLOYMENT_DESCRIPTOR_URL, env.TMPDIR + '/aem-aws-stack-builder/stage/', 'deploy-artifacts-descriptor.json') - AocPrepareParamArtifact(this, params.AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL, env.TMPDIR + '/aem-aws-stack-builder/stage/', 'content-healthcheck-descriptor.json') - AocPrepareParamArtifact(this, params.AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL, env.TMPDIR + '/aem-aws-stack-builder/stage/', 'aem-custom-stack-provisioner.tar.gz') - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make create-full-set config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER} stack_prefix=${params.STACK_PREFIX_GREEN}") - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make check-readiness-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX_GREEN} config_path=${AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Run acceptance for green AEM environment') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-test-suite", "make test-acceptance-full-set config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE} stack_prefix=${params.STACK_PREFIX_GREEN}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../manage-environments/aws/${params.AOC_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}-${AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}-${AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/create-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX_GREEN), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AOC_DEPLOYMENT_DESCRIPTOR_URL', value: params.AOC_DEPLOYMENT_DESCRIPTOR_URL), + string(name: 'AOC_EXPORT_DESCRIPTOR_URL', value: params.AOC_EXPORT_DESCRIPTOR_URL), + string(name: 'AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL', value: params.AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL), + string(name: 'AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL', value: params.AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL), + string(name: 'SOURCE_SNAPSHOT_STACK_PREFIX', value: params.STACK_PREFIX_BLUE) + ] } } stage('Deploy applications on green AEM environment') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make deploy-artifacts-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX_GREEN} config_path=${AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} descriptor_file=deploy-artifacts-descriptor.json") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/deploy-artifacts-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX_GREEN), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AOC_DEPLOYMENT_DESCRIPTOR_URL', value: params.AOC_DEPLOYMENT_DESCRIPTOR_URL) + + ] } } - stage('Check Content ALARM State is OK on green AEM environment') { + stage('Check green Stack after deployment') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-test-suite", "make test-contenthealthcheck-alarm-state stack_prefix=${params.STACK_PREFIX_GREEN} config_path=${AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/check-readiness-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX_GREEN), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] } } - stage('Check green AEM environment readiness') { + stage('Check Content ALARM State is OK on green AEM environment') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make check-readiness-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX_GREEN} config_path=${AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/test-contenthealthcheck-alarm/${params.AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX_GREEN), + ] + } } stage('Run SM-Event offline-snapshot on green AEM environment') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make offline-snapshot-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX_GREEN} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Delete green AEM environment') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make delete-full-set config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER} stack_prefix=${params.STACK_PREFIX_GREEN}") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Delete AEM OpenCloud Stack Manager environment') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make delete-stack-manager config_path=${env.AOC_STACK_MANAGER_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER} stack_prefix=${params.STACK_MANAGER_STACK_PREFIX}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/offline-snapshot-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX_GREEN), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] } } } post { always { + build job: "../../../manage-environments/aws/${params.AOC_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}-${AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}-${AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/delete-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX_BLUE) + ] + build job: "../../../manage-environments/aws/${params.AOC_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}-${AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}-${AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/delete-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX_GREEN) + ] + build job: "../../../manage-environments/aws/${params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/delete-stack-manager/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'AOC_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER', value: params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER), + string(name: 'STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] JenkinsPipelinePostStep this } success { diff --git a/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/full-set-platform b/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/full-set-platform index 589d865e..5b80c643 100644 --- a/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/full-set-platform +++ b/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/full-set-platform @@ -1,6 +1,15 @@ @Library('aem-opencloud-manager') _ def configString = libraryResource 'aem_opencloud/config.json' def config = readJSON text: configString +def getDate() { + Date date = new Date() + return date.format('yyyyMMdd') as String +} +def genId() { + return UUID.randomUUID().toString().split('-')[-1] +} +def date = getDate() +def id = genId() pipeline { agent { docker { @@ -10,11 +19,6 @@ pipeline { } environment { TMPDIR = "/tmp/shinesolutions/aem-opencloud-manager" - AOC_CONFIG_DIR = "${env.TMPDIR}/aem-opencloud-config" - AOC_FULLSET_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER = "${env.AOC_CONFIG_DIR}/aem-aws-stack-builder/${params.AOC_AEM_STACK_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/" - AOC_STACK_MANAGER_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER = "${env.AOC_CONFIG_DIR}/aem-aws-stack-builder/${params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/" - AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER = "${env.AOC_CONFIG_DIR}/aem-stack-manager-messenger/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/" - AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE = "${env.AOC_CONFIG_DIR}/aem-test-suite/${params.AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/" } parameters { string(name: 'AOC_VERSION_AEM_AWS_STACK_BUILDER', defaultValue: config.library.aem_aws_stack_builder, description: 'Version of aem-aws-stack-builder repo to archive') @@ -23,10 +27,11 @@ pipeline { string(name: 'SOURCE_AUTHOR_SNAPSHOT_ID', defaultValue: '', description: 'Source Snapshot ID from the Author repository') string(name: 'SOURCE_PUBLISH_SNAPSHOT_ID', defaultValue: '', description: 'Source Snapshot ID from the Publish repository') string(name: 'SOURCE_SNAPSHOT_STACK_PREFIX', defaultValue: '', description: 'Source Stack Prefix to get source Snapshot IDs from.') + string(name: 'STACK_MANAGER_STACK_PREFIX', defaultValue: 'aoc-sm-' + id, description: 'Stack Manager Stack Prefix to create for the test.') + string(name: 'STACK_PREFIX', defaultValue: 'aoc-fs-' + id, description: 'AEM Stack Stack Prefix to create for the test.') } - stages { - stage('Initialise pipeline') { + stage('Initialise Jenkins pipeline') { steps { script { if (params.ENABLE_SLACK_NOTIFICATIONS == true) { @@ -37,543 +42,539 @@ pipeline { JenkinsPipelinePreStep this } } - stage('Prepare AEM Stack Manager libraries') { - steps { - JenkinsStagePreStep this - AocPrepareLibrary(this, "aem-aws-stack-builder", params.AOC_VERSION_AEM_AWS_STACK_BUILDER, params.AWS_LIBRARY_S3_BUCKET, params.AWS_LIBRARY_S3_PATH, env.TMPDIR) - AocPrepareConfig(this, params.AOC_CONFIG_ARTIFACT_URL, env.TMPDIR) - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Resolve AEM Stack Manager dependencies') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make deps") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Prepare AEM Stack Manager configuration') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make config config_path=${env.AOC_STACK_MANAGER_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER}") - } - post { - always { - JenkinsStagePostStep this - } - } - } stage('Create AEM Stack Manager environment') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make create-stack-manager config_path=${env.AOC_STACK_MANAGER_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER} stack_prefix=${params.STACK_MANAGER_STACK_PREFIX}") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Prepare AEM Full-Set libraries') { - steps { - JenkinsStagePreStep this - sh "rm -rf ${env.TMPDIR}" - AocPrepareLibrary(this, "aem-aws-stack-builder", params.AOC_VERSION_AEM_AWS_STACK_BUILDER, params.AWS_LIBRARY_S3_BUCKET, params.AWS_LIBRARY_S3_PATH, env.TMPDIR) - AocPrepareLibrary(this, "aem-stack-manager-messenger", params.AOC_VERSION_AEM_STACK_MANAGER_MESSENGER, params.AWS_LIBRARY_S3_BUCKET, params.AWS_LIBRARY_S3_PATH, env.TMPDIR) - AocPrepareLibrary(this, "aem-test-suite", params.AOC_VERSION_AEM_TEST_SUITE, params.AWS_LIBRARY_S3_BUCKET, params.AWS_LIBRARY_S3_PATH, env.TMPDIR) - AocPrepareConfig(this, params.AOC_CONFIG_ARTIFACT_URL, env.TMPDIR) - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Resolve AEM Full-Set dependencies') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make deps") - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make deps") - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make stage") - ExecCommand(this, env.TMPDIR, "aem-test-suite", "make deps") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Prepare AEM Full-Set configuration') { - steps { - JenkinsStagePreStep this - GenerateOfflineSnapshotConfig(this, params.SOURCE_AUTHOR_SNAPSHOT_ID, params.SOURCE_PUBLISH_SNAPSHOT_ID, params.SOURCE_SNAPSHOT_STACK_PREFIX, env.AOC_FULLSET_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER) - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make config config_path=${env.AOC_FULLSET_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER}") - ExecCommand(this, env.TMPDIR, "aem-test-suite", "make config-aem-aws config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../manage-environments/aws/${params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/create-stack-manager/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'AOC_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER', value: params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER), + string(name: 'STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX) + ] } } stage('Create AEM Full-Set environment') { steps { - JenkinsStagePreStep this - AocPrepareParamArtifact(this, params.AOC_DEPLOYMENT_DESCRIPTOR_URL, env.TMPDIR + '/aem-aws-stack-builder/stage/', 'deploy-artifacts-descriptor.json') - AocPrepareParamArtifact(this, params.AOC_EXPORT_DESCRIPTOR_URL, env.TMPDIR + '/aem-aws-stack-builder/stage/', 'export-backups-descriptor.json') - AocPrepareParamArtifact(this, params.AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL, env.TMPDIR + '/aem-aws-stack-builder/stage/', 'content-healthcheck-descriptor.json') - AocPrepareParamArtifact(this, params.AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL, env.TMPDIR + '/aem-aws-stack-builder/stage/', 'aem-custom-stack-provisioner.tar.gz') - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make create-full-set config_path=${env.AOC_FULLSET_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER} stack_prefix=${params.STACK_PREFIX}") - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make check-readiness-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../manage-environments/aws/${params.AOC_AEM_STACK_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}-${AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}-${AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/create-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AOC_CONFIG_ARTIFACT_URL', value: params.AOC_CONFIG_ARTIFACT_URL), + string(name: 'AOC_DEPLOYMENT_DESCRIPTOR_URL', value: params.AOC_DEPLOYMENT_DESCRIPTOR_URL), + string(name: 'AOC_EXPORT_DESCRIPTOR_URL', value: params.AOC_EXPORT_DESCRIPTOR_URL), + string(name: 'AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL', value: params.AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL), + string(name: 'AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL', value: params.AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL), + string(name: 'SOURCE_AUTHOR_SNAPSHOT_ID', value: params.SOURCE_AUTHOR_SNAPSHOT_ID), + string(name: 'SOURCE_PUBLISH_SNAPSHOT_ID', value: params.SOURCE_PUBLISH_SNAPSHOT_ID), + string(name: 'SOURCE_SNAPSHOT_STACK_PREFIX', value: params.SOURCE_SNAPSHOT_STACK_PREFIX) + ] } } stage('Run acceptance tests') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-test-suite", "make test-acceptance-full-set config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE} stack_prefix=${params.STACK_PREFIX}") - } - post { - always { - JenkinsStagePostStep this + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/test-acceptance/${params.AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'AEM_ARCHITECTURE', value: 'full-set') + ] + } + } + stage('Unschedule live snapshots') { + failFast true + parallel { + stage('Unschedule live snapshot on author-primary') { + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/unschedule-live-snapshot-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'author-primary') + ] + } + } + stage('Unschedule live snapshot on author-standby') { + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/unschedule-live-snapshot-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'author-standby') + ] + } + } + stage('Unschedule live snapshot on publish') { + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/unschedule-live-snapshot-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'publish') + ] } } + } } - stage('Unschedule live snapshot on author-primary') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make unschedule-live-snapshot-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=author-primary") - } - post { - always { - - JenkinsStagePostStep this - } - } - } - stage('Unschedule live snapshot on author-standby') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make unschedule-live-snapshot-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=author-standby") - } - post { - always { - - JenkinsStagePostStep this - } - } - } - stage('Unschedule live snapshot on publish') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make unschedule-live-snapshot-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=publish") - } - post { - always { - - JenkinsStagePostStep this - } - } - } - stage('Unschedule offline snapshot') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make unschedule-offline-snapshot-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - - JenkinsStagePostStep this - } - } + stage('Unschedule offline snapshots') { + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/unschedule-offline-snapshot-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] + } } stage('Unschedule offline compaction snapshot') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make unschedule-offline-compaction-snapshot-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('list all packages of author-primary') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make list-packages stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=author-primary") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('list all packages of publish') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make list-packages stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=publish") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Enable CRXDE on author-primary') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make enable-crxde stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=author-primary") - } - post { - always { - JenkinsStagePostStep this - } - } + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/unschedule-offline-compaction-snapshot-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] + } } - stage('Enable CRXDE on publish') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make enable-crxde stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=publish") - } - post { - always { - JenkinsStagePostStep this + stage('list all packages') { + failFast true + parallel { + stage('list all packages of author-primary') { + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/list-packages/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'author-primary') + ] + } + } + stage('list all packages of publish') { + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/list-packages/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'publish') + ] } } + } } - stage('Disable CRXDE on author-primary') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make disable-crxde stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=author-primary") - } - post { - always { - JenkinsStagePostStep this + stage('Enable CRXDE') { + failFast true + parallel { + stage('Enable CRXDE on author-primary') { + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/enable-crxde/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'author-primary') + ] + } + } + stage('Enable CRXDE on publish') { + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/enable-crxde/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'publish') + ] } } + } } - stage('Disable CRXDE on publish') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make disable-crxde stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=publish") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Flush AEM Publish-Dispatcher cache on author-dispatcher') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make flush-dispatcher-cache stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=author-dispatcher") - } - post { - always { - JenkinsStagePostStep this + stage('Disable CRXDE') { + failFast true + parallel { + stage('Disable CRXDE on author-primary') { + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/disable-crxde/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'author-primary') + ] + } + } + stage('Disable CRXDE on publish') { + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/disable-crxde/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'publish') + ] } } + } } - stage('Flush AEM Publish-Dispatcher cache on publish-dispatcher') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make flush-dispatcher-cache stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=publish-dispatcher") - } - post { - always { - JenkinsStagePostStep this + stage('Flush AEM Dispatcher Cache') { + failFast true + parallel { + stage('Flush AEM Author-Dispatcher cache') { + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/flush-dispatcher-cache/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'author-dispatcher') + ] + } + } + stage('Flush AEM Publish-Dispatcher cache') { + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/flush-dispatcher-cache/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'publish-dispatcher') + ] } } + } } stage('Deploy applications') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make deploy-artifacts-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} descriptor_file=deploy-artifacts-descriptor.json") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/deploy-artifacts-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AOC_DEPLOYMENT_DESCRIPTOR_URL', value: params.AOC_DEPLOYMENT_DESCRIPTOR_URL) + ] } } stage('Check environment readiness after deployment') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make check-readiness-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Deplopy single Artifact on author-primary') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make deploy-artifact stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=author-primary aem_id=author source=${params.DEPLOY_PACKAGE_SOURCE} group=${params.DEPLOY_PACKAGE_GROUP} name=${params.DEPLOY_PACKAGE_NAME} version=${params.DEPLOY_PACKAGE_VERSION} replicate=${params.DEPLOY_PACKAGE_REPLICATE} activate=${params.DEPLOY_PACKAGE_ACTIVATE} force=${params.DEPLOY_PACKAGE_FORCE}") - } - post { - always { - - JenkinsStagePostStep this - } - } - } - stage('Deplopy single Artifact on Publish') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make deploy-artifact stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=publish aem_id=publish source=${params.DEPLOY_PACKAGE_SOURCE} group=${params.DEPLOY_PACKAGE_GROUP} name=${params.DEPLOY_PACKAGE_NAME} version=${params.DEPLOY_PACKAGE_VERSION} replicate=${params.DEPLOY_PACKAGE_REPLICATE} activate=${params.DEPLOY_PACKAGE_ACTIVATE} force=${params.DEPLOY_PACKAGE_FORCE}") - } - post { - always { - - JenkinsStagePostStep this + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/check-readiness-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] + } + } + stage('Deploy single Artifact') { + failFast true + parallel { + stage('Deploy single Artifact on Author-Primary') { + steps { + // Script ensures backwards compatibility + script{ + if ( params.DEPLOY_PACKAGE_SOURCE[-4..-1] == '.zip' ) { + package_source = params.DEPLOY_PACKAGE_SOURCE + } + else { + package_source = params.DEPLOY_PACKAGE_SOURCE + '/' + params.DEPLOY_PACKAGE_NAME + '-' + params.DEPLOY_PACKAGE_VERSION + '.zip' + } + } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/deploy-artifact/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'author-primary'), + string(name: 'AEM_ID', value: 'author'), + string(name: 'PACKAGE_ACTIVATE', value: params.DEPLOY_PACKAGE_ACTIVATE), + string(name: 'PACKAGE_FORCE', value: params.DEPLOY_PACKAGE_FORCE), + string(name: 'PACKAGE_GROUP', value: params.DEPLOY_PACKAGE_GROUP), + string(name: 'PACKAGE_NAME', value: params.DEPLOY_PACKAGE_NAME), + string(name: 'PACKAGE_REPLICATE', value: params.DEPLOY_PACKAGE_REPLICATE), + string(name: 'PACKAGE_SOURCE', value: package_source), + string(name: 'PACKAGE_VERSION', value: params.DEPLOY_PACKAGE_VERSION) + ] + } + } + stage('Deploy single Artifact on Publish') { + steps { + // Script ensures backwards compatibility + script{ + if ( params.DEPLOY_PACKAGE_SOURCE[-4..-1] == '.zip' ) { + package_source = params.DEPLOY_PACKAGE_SOURCE + } + else { + package_source = params.DEPLOY_PACKAGE_SOURCE + '/' + params.DEPLOY_PACKAGE_NAME + '-' + params.DEPLOY_PACKAGE_VERSION + '.zip' + } + } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/deploy-artifact/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'publish'), + string(name: 'AEM_ID', value: 'publish'), + string(name: 'PACKAGE_ACTIVATE', value: params.DEPLOY_PACKAGE_ACTIVATE), + string(name: 'PACKAGE_FORCE', value: params.DEPLOY_PACKAGE_FORCE), + string(name: 'PACKAGE_GROUP', value: params.DEPLOY_PACKAGE_GROUP), + string(name: 'PACKAGE_NAME', value: params.DEPLOY_PACKAGE_NAME), + string(name: 'PACKAGE_REPLICATE', value: params.DEPLOY_PACKAGE_REPLICATE), + string(name: 'PACKAGE_SOURCE', value: package_source), + string(name: 'PACKAGE_VERSION', value: params.DEPLOY_PACKAGE_VERSION) + ] } } + } } stage('Check environment readiness after single artifact deployment') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make check-readiness-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } - } + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/check-readiness-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] + } } stage('Export artifacts') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make export-packages-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} descriptor_file='export-backups-descriptor.json'") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Import exported Artifact on author-primary') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make import-package stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=author-primary aem_id=author source_stack_prefix=${params.IMPORT_PACKAGE_SOURCE_STACK_PREFIX} package_group=${params.IMPORT_PACKAGE_GROUP} package_name=${params.IMPORT_PACKAGE_NAME} package_datestamp=${params.IMPORT_PACKAGE_DATESTAMP}") - } - post { - always { - - JenkinsStagePostStep this - } - } - } - stage('Import exported Artifact on publish') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make import-package stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=publish aem_id=publish source_stack_prefix=${params.IMPORT_PACKAGE_SOURCE_STACK_PREFIX} package_group=${params.IMPORT_PACKAGE_GROUP} package_name=${params.IMPORT_PACKAGE_NAME} package_datestamp=${params.IMPORT_PACKAGE_DATESTAMP}") - } - post { - always { - - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/export-packages-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AOC_EXPORT_DESCRIPTOR_URL', value: params.AOC_EXPORT_DESCRIPTOR_URL) + ] + } + } + stage('Import exported Artifact') { + failFast true + parallel { + stage('Import exported Artifact on author-primary') { + steps { + // Script ensures backwards compatibility + script{ + if ( params.IMPORT_PACKAGE_SOURCE_STACK_PREFIX.isEmpty() ) { + package_source_stack_prefix = params.STACK_PREFIX + } + else { + package_source_stack_prefix = params.IMPORT_PACKAGE_SOURCE_STACK_PREFIX + } + if ( params.IMPORT_PACKAGE_DATESTAMP.isEmpty() ) { + package_datestamp = date + } + else { + package_datestamp = params.IMPORT_PACKAGE_DATESTAMP + } + } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/import-package/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'author-primary'), + string(name: 'AEM_ID', value: 'author'), + string(name: 'PACKAGE_DATESTAMP', value: package_datestamp), + string(name: 'PACKAGE_GROUP', value: params.IMPORT_PACKAGE_GROUP), + string(name: 'PACKAGE_NAME', value: params.IMPORT_PACKAGE_NAME), + string(name: 'PACKAGE_SOURCE_STACK_PREFIX', value: package_source_stack_prefix) + ] + } + } + stage('Import exported Artifact on publish') { + steps { + // Script ensures backwards compatibility + script{ + if ( params.IMPORT_PACKAGE_SOURCE_STACK_PREFIX.isEmpty() ) { + package_source_stack_prefix = params.STACK_PREFIX + } + else { + package_source_stack_prefix = params.IMPORT_PACKAGE_SOURCE_STACK_PREFIX + } + if ( params.IMPORT_PACKAGE_DATESTAMP.isEmpty() ) { + package_datestamp = date + } + else { + package_datestamp = params.IMPORT_PACKAGE_DATESTAMP + } + } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/import-package/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'publish'), + string(name: 'AEM_ID', value: 'publish'), + string(name: 'PACKAGE_DATESTAMP', value: package_datestamp), + string(name: 'PACKAGE_GROUP', value: params.IMPORT_PACKAGE_GROUP), + string(name: 'PACKAGE_NAME', value: params.IMPORT_PACKAGE_NAME), + string(name: 'PACKAGE_SOURCE_STACK_PREFIX', value: package_source_stack_prefix) + ] + } } + } } stage('Check environment readiness after package import') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make check-readiness-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Run live-snapshot on author-primary') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make live-snapshot stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=author-primary") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Run live-snapshot on author-standby') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make live-snapshot stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=author-standby") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Run live-snapshot on publish') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make live-snapshot stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=publish") - } - post { - always { - JenkinsStagePostStep this + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/check-readiness-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] + } + } + stage('Run live-snapshot') { + failFast true + parallel { + stage('Run live-snapshot on author-primary') { + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/live-snapshot/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'author-primary') + ] + } + } + stage('Run live-snapshot on publish') { + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/live-snapshot/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'publish') + ] } } + } } stage('Run offline-snapshot') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make offline-snapshot-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/offline-snapshot-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] } } stage('Check environment readiness after offline-snapshot') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make check-readiness-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/check-readiness-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] } } stage('Run offline-compaction-snapshot') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make offline-compaction-snapshot-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/offline-compaction-snapshot-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] } } stage('Check environment readiness after offline-compaction-snapshot') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make check-readiness-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Schedule live-snapshot on Author-Primary') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make schedule-live-snapshot-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=author-primary") - } - post { - always { - - JenkinsStagePostStep this - } - } - } - stage('Schedule live-snapshot on Author-Standby') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make schedule-live-snapshot-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=author-standby") - } - post { - always { - - JenkinsStagePostStep this - } - } - } - stage('Schedule live-snapshot on Publish') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make schedule-live-snapshot-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER} component=publish") - } - post { - always { - - JenkinsStagePostStep this + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/check-readiness-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] + } + } + stage('Schedule live snapshots') { + failFast true + parallel { + stage('Schedule live snapshot on author-primary') { + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/schedule-live-snapshot-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'author-primary') + ] + } + } + stage('Schedule live snapshot on author-standby') { + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/schedule-live-snapshot-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'author-standby') + ] + } + } + stage('Schedule live snapshot on publish') { + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/schedule-live-snapshot-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AEM_COMPONENT', value: 'publish') + ] } } + } } - stage('Schedule offline-snapshot') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make schedule-offline-snapshot-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } - } + stage('Schedule offline snapshot') { + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/schedule-offline-snapshot-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] + } } - stage('Schedule offline-compaction-snapshot') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make schedule-offline-compaction-snapshot-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } - } + stage('Schedule offline compaction snapshot') { + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/schedule-offline-compaction-snapshot-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] + } } stage('Promote Author Standby to Author primary') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make promote-author stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - - JenkinsStagePostStep this - } - } - } - stage('Delete AEM OpenCloud Full-Set environment') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make delete-full-set config_path=${env.AOC_FULLSET_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER} stack_prefix=${params.STACK_PREFIX}") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Delete AEM OpenCloud Stack Manager environment') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make delete-stack-manager config_path=${env.AOC_STACK_MANAGER_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER} stack_prefix=${params.STACK_MANAGER_STACK_PREFIX}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/promote-author/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] } } } post { always { + build job: "../../../manage-environments/aws/${params.AOC_AEM_STACK_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}-${AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}-${AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/delete-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX) + ] + build job: "../../../manage-environments/aws/${params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/delete-stack-manager/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'AOC_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER', value: params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER), + string(name: 'STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] JenkinsPipelinePostStep this } success { diff --git a/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/full-set-recovery b/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/full-set-recovery index 5841f314..c72cbddc 100644 --- a/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/full-set-recovery +++ b/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/full-set-recovery @@ -1,6 +1,15 @@ @Library('aem-opencloud-manager') _ def configString = libraryResource 'aem_opencloud/config.json' def config = readJSON text: configString +def getDate() { + Date date = new Date() + return date.format('yyyyMMdd') as String +} +def genId() { + return UUID.randomUUID().toString().split('-')[-1] +} +def date = getDate() +def id = genId() pipeline { agent { docker { @@ -10,11 +19,6 @@ pipeline { } environment { TMPDIR = "/tmp/shinesolutions/aem-opencloud-manager" - AOC_CONFIG_DIR = "${env.TMPDIR}/aem-opencloud-config" - AOC_FULLSET_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER = "${env.AOC_CONFIG_DIR}/aem-aws-stack-builder/${params.AOC_AEM_STACK_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/" - AOC_STACK_MANAGER_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER = "${env.AOC_CONFIG_DIR}/aem-aws-stack-builder/${params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/" - AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER = "${env.AOC_CONFIG_DIR}/aem-stack-manager-messenger/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/" - AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE = "${env.AOC_CONFIG_DIR}/aem-test-suite/${params.AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/" } parameters { string(name: 'AOC_VERSION_AEM_AWS_STACK_BUILDER', defaultValue: config.library.aem_aws_stack_builder, description: 'Version of aem-aws-stack-builder repo to archive') @@ -23,10 +27,11 @@ pipeline { string(name: 'SOURCE_AUTHOR_SNAPSHOT_ID', defaultValue: '', description: 'Source Snapshot ID from the Author repository') string(name: 'SOURCE_PUBLISH_SNAPSHOT_ID', defaultValue: '', description: 'Source Snapshot ID from the Publish repository') string(name: 'SOURCE_SNAPSHOT_STACK_PREFIX', defaultValue: '', description: 'Source Stack Prefix to get source Snapshot IDs from.') + string(name: 'STACK_MANAGER_STACK_PREFIX', defaultValue: 'aoc-sm-' + id, description: 'Stack Manager Stack Prefix to create for the test.') + string(name: 'STACK_PREFIX', defaultValue: 'aoc-fs-' + id, description: 'AEM Stack Stack Prefix to create for the test.') } - stages { - stage('Initialise pipeline') { + stage('Initialise Jenkins pipeline') { steps { script { if (params.ENABLE_SLACK_NOTIFICATIONS == true) { @@ -37,156 +42,57 @@ pipeline { JenkinsPipelinePreStep this } } - stage('Prepare AEM Stack Manager libraries') { - steps { - JenkinsStagePreStep this - AocPrepareLibrary(this, "aem-aws-stack-builder", params.AOC_VERSION_AEM_AWS_STACK_BUILDER, params.AWS_LIBRARY_S3_BUCKET, params.AWS_LIBRARY_S3_PATH, env.TMPDIR) - AocPrepareConfig(this, params.AOC_CONFIG_ARTIFACT_URL, env.TMPDIR) - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Resolve AEM Stack Manager dependencies') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make deps") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Prepare AEM Stack Manager configuration') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make config config_path=${env.AOC_STACK_MANAGER_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER}") - } - post { - always { - JenkinsStagePostStep this - } - } - } stage('Create AEM Stack Manager environment') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make create-stack-manager config_path=${env.AOC_STACK_MANAGER_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER} stack_prefix=${params.STACK_MANAGER_STACK_PREFIX}") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Prepare AEM Full-Set libraries') { - steps { - JenkinsStagePreStep this - sh "rm -rf ${env.TMPDIR}" - AocPrepareLibrary(this, "aem-aws-stack-builder", params.AOC_VERSION_AEM_AWS_STACK_BUILDER, params.AWS_LIBRARY_S3_BUCKET, params.AWS_LIBRARY_S3_PATH, env.TMPDIR) - AocPrepareLibrary(this, "aem-stack-manager-messenger", params.AOC_VERSION_AEM_STACK_MANAGER_MESSENGER, params.AWS_LIBRARY_S3_BUCKET, params.AWS_LIBRARY_S3_PATH, env.TMPDIR) - AocPrepareLibrary(this, "aem-test-suite", params.AOC_VERSION_AEM_TEST_SUITE, params.AWS_LIBRARY_S3_BUCKET, params.AWS_LIBRARY_S3_PATH, env.TMPDIR) - AocPrepareConfig(this, params.AOC_CONFIG_ARTIFACT_URL, env.TMPDIR) - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Resolve AEM Full-Set dependencies') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make deps") - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make deps") - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make stage") - ExecCommand(this, env.TMPDIR, "aem-test-suite", "make deps") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Prepare AEM Full-Set configuration') { - steps { - JenkinsStagePreStep this - GenerateOfflineSnapshotConfig(this, params.SOURCE_AUTHOR_SNAPSHOT_ID, params.SOURCE_PUBLISH_SNAPSHOT_ID, params.SOURCE_SNAPSHOT_STACK_PREFIX, env.AOC_FULLSET_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER) - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make config config_path=${env.AOC_FULLSET_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER}") - ExecCommand(this, env.TMPDIR, "aem-test-suite", "make config-aem-aws config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../manage-environments/aws/${params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/create-stack-manager/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'AOC_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER', value: params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER),, + string(name: 'STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX) + ] } } stage('Create AEM Full-Set environment') { steps { - JenkinsStagePreStep this - AocPrepareParamArtifact(this, params.AOC_DEPLOYMENT_DESCRIPTOR_URL, env.TMPDIR + '/aem-aws-stack-builder/stage/', 'deploy-artifacts-descriptor.json') - AocPrepareParamArtifact(this, params.AOC_EXPORT_DESCRIPTOR_URL, env.TMPDIR + '/aem-aws-stack-builder/stage/', 'export-backups-descriptor.json') - AocPrepareParamArtifact(this, params.AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL, env.TMPDIR + '/aem-aws-stack-builder/stage/', 'content-healthcheck-descriptor.json') - AocPrepareParamArtifact(this, params.AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL, env.TMPDIR + '/aem-aws-stack-builder/stage/', 'aem-custom-stack-provisioner.tar.gz') - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make create-full-set config_path=${env.AOC_FULLSET_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER} stack_prefix=${params.STACK_PREFIX}") - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make check-readiness-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Run acceptance tests') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-test-suite", "make test-acceptance-full-set config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE} stack_prefix=${params.STACK_PREFIX}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../manage-environments/aws/${params.AOC_AEM_STACK_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}-${AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}-${AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/create-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AOC_DEPLOYMENT_DESCRIPTOR_URL', value: params.AOC_DEPLOYMENT_DESCRIPTOR_URL), + string(name: 'AOC_EXPORT_DESCRIPTOR_URL', value: params.AOC_EXPORT_DESCRIPTOR_URL), + string(name: 'AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL', value: params.AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL), + string(name: 'AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL', value: params.AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL), + string(name: 'SOURCE_AUTHOR_SNAPSHOT_ID', value: params.SOURCE_AUTHOR_SNAPSHOT_ID), + string(name: 'SOURCE_PUBLISH_SNAPSHOT_ID', value: params.SOURCE_PUBLISH_SNAPSHOT_ID), + string(name: 'SOURCE_SNAPSHOT_STACK_PREFIX', value: params.SOURCE_SNAPSHOT_STACK_PREFIX) + ] } } stage('Run Recovery tests') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-test-suite", "make test-recovery-full-set config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE} stack_prefix=${params.STACK_PREFIX}") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Delete AEM OpenCloud Full-Set environment') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make delete-full-set config_path=${env.AOC_FULLSET_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER} stack_prefix=${params.STACK_PREFIX}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/test-recovery/${params.AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'AEM_ARCHITECTURE', value: 'full-set') + ] } } - stage('Delete AEM OpenCloud Stack Manager environment') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make delete-stack-manager config_path=${env.AOC_STACK_MANAGER_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER} stack_prefix=${params.STACK_MANAGER_STACK_PREFIX}") - } - post { - always { - JenkinsStagePostStep this - } - } - } - } + } post { always { + build job: "../../../manage-environments/aws/${params.AOC_AEM_STACK_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}-${AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}-${AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/delete-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX) + ] + build job: "../../../manage-environments/aws/${params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/delete-stack-manager/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'AOC_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER', value: params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER), + string(name: 'STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] JenkinsPipelinePostStep this } success { diff --git a/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/full-set-security b/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/full-set-security new file mode 100644 index 00000000..e293aba1 --- /dev/null +++ b/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/full-set-security @@ -0,0 +1,154 @@ +@Library('aem-opencloud-manager') _ +def configString = libraryResource 'aem_opencloud/config.json' +def config = readJSON text: configString +def getDate() { + Date date = new Date() + return date.format('yyyyMMdd') as String +} +def genId() { + return UUID.randomUUID().toString().split('-')[-1] +} +def date = getDate() +def id = genId() +pipeline { + agent { + docker { + image params.JENKINS_AGENT_DOCKER_IMAGE + args params.JENKINS_AGENT_DOCKER_ARGS + } + } + environment { + TMPDIR = "/tmp/shinesolutions/aem-opencloud-manager" + } + parameters { + string(name: 'AOC_VERSION_AEM_AWS_STACK_BUILDER', defaultValue: config.library.aem_aws_stack_builder, description: 'Version of aem-aws-stack-builder repo to archive') + string(name: 'AOC_VERSION_AEM_STACK_MANAGER_MESSENGER', defaultValue: config.library.aem_stack_manager_messenger, description: 'Version of aem-stack-manager-messenger repo') + string(name: 'AOC_VERSION_AEM_TEST_SUITE', defaultValue: config.library.aem_test_suite, description: 'Version of aem-test-suite repo to archive') + string(name: 'SOURCE_AUTHOR_SNAPSHOT_ID', defaultValue: '', description: 'Source Snapshot ID from the Author repository') + string(name: 'SOURCE_PUBLISH_SNAPSHOT_ID', defaultValue: '', description: 'Source Snapshot ID from the Publish repository') + string(name: 'SOURCE_SNAPSHOT_STACK_PREFIX', defaultValue: '', description: 'Source Stack Prefix to get source Snapshot IDs from.') + string(name: 'STACK_MANAGER_STACK_PREFIX', defaultValue: 'aoc-sm-' + id, description: 'Stack Manager Stack Prefix to create for the test.') + string(name: 'STACK_PREFIX', defaultValue: 'aoc-fs-' + id, description: 'AEM Stack Stack Prefix to create for the test.') + } + stages { + stage('Initialise Jenkins pipeline') { + steps { + script { + if (params.ENABLE_SLACK_NOTIFICATIONS == true) { + slackSend (color: '#FFFF00', message: "START: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})") + } + } + JenkinsInit(this, params.AOC_CUSTOM_MANAGER_STEPS_ARTIFACT_URL, env.TMPDIR) + JenkinsPipelinePreStep this + } + } + stage('Create AEM Stack Manager environment') { + steps { + build job: "../../../manage-environments/aws/${params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/create-stack-manager/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'AOC_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER', value: params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER), + string(name: 'STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX) + ] + } + } + stage('Create AEM Full-Set environment') { + steps { + build job: "../../../manage-environments/aws/${params.AOC_AEM_STACK_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}-${AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}-${AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/create-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AOC_DEPLOYMENT_DESCRIPTOR_URL', value: params.AOC_DEPLOYMENT_DESCRIPTOR_URL), + string(name: 'AOC_EXPORT_DESCRIPTOR_URL', value: params.AOC_EXPORT_DESCRIPTOR_URL), + string(name: 'AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL', value: params.AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL), + string(name: 'AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL', value: params.AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL), + string(name: 'SOURCE_AUTHOR_SNAPSHOT_ID', value: params.SOURCE_AUTHOR_SNAPSHOT_ID), + string(name: 'SOURCE_PUBLISH_SNAPSHOT_ID', value: params.SOURCE_PUBLISH_SNAPSHOT_ID), + string(name: 'SOURCE_SNAPSHOT_STACK_PREFIX', value: params.SOURCE_SNAPSHOT_STACK_PREFIX) + ] + } + } + stage('Switch DNS ') { + steps { + build job: "../../../manage-environments/aws/${params.AOC_AEM_STACK_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}-${AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}-${AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/switch-dns-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'PUBLISH_DISPATCHER_HOSTED_ZONE', value: params.PUBLISH_DISPATCHER_HOSTED_ZONE), + string(name: 'PUBLISH_DISPATCHER_RECORD_SET', value: params.PUBLISH_DISPATCHER_RECORD_SET), + string(name: 'AUTHOR_DISPATCHER_HOSTED_ZONE', value: params.AUTHOR_DISPATCHER_HOSTED_ZONE), + string(name: 'AUTHOR_DISPATCHER_RECORD_SET', value: params.AUTHOR_DISPATCHER_RECORD_SET) + ] + } + } + stage('Run AEM Security test') { + failFast true + parallel { + stage('AEM Author Security test') { + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/test-aem-security/${params.AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'AEM_SECURITY_TEST_PLAN', value: 'author'), + string(name: 'AEM_HOST', value: "${params.AUTHOR_DISPATCHER_RECORD_SET}.${params.AUTHOR_DISPATCHER_HOSTED_ZONE}") + ] + } + } + // stage('AEM Publish Security test') { + // steps { + // build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/test-aem-security/${params.AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/", + // parameters: [ + // booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + // string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + // string(name: 'AEM_SECURITY_TEST_PLAN', value: 'publish'), + // string(name: 'AEM_SECURITY_TEST_PLAN', value: 'author') + // ] + // } + // } + stage('AEM Publish-Dispatcher Security test') { + steps { + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/test-aem-security/${params.AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'AEM_SECURITY_TEST_PLAN', value: 'publish-dispatcher'), + string(name: 'AEM_HOST', value: "${params.PUBLISH_DISPATCHER_RECORD_SET}.${params.PUBLISH_DISPATCHER_HOSTED_ZONE}") + ] + } + } + } + } + } + post { + always { + build job: "../../../manage-environments/aws/${params.AOC_AEM_STACK_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}-${AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}-${AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/delete-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX) + ] + build job: "../../../manage-environments/aws/${params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/delete-stack-manager/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'AOC_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER', value: params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER), + string(name: 'STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] + JenkinsPipelinePostStep this + } + success { + script { + if (params.ENABLE_SLACK_NOTIFICATIONS == true) { + slackSend (color: '#00FF00', message: "SUCCESS: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})") + } + } + } + failure { + script { + if (params.ENABLE_SLACK_NOTIFICATIONS == true) { + slackSend (color: '#FF0000', message: "FAILURE: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})") + } + } + } + } +} diff --git a/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/promote-author-standby-full-set b/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/promote-author-standby-full-set index 28b2a93b..27c81f9d 100644 --- a/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/promote-author-standby-full-set +++ b/provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/promote-author-standby-full-set @@ -1,6 +1,15 @@ @Library('aem-opencloud-manager') _ def configString = libraryResource 'aem_opencloud/config.json' def config = readJSON text: configString +def getDate() { + Date date = new Date() + return date.format('yyyyMMdd') as String +} +def genId() { + return UUID.randomUUID().toString().split('-')[-1] +} +def date = getDate() +def id = genId() pipeline { agent { docker { @@ -10,11 +19,6 @@ pipeline { } environment { TMPDIR = "/tmp/shinesolutions/aem-opencloud-manager" - AOC_CONFIG_DIR = "${env.TMPDIR}/aem-opencloud-config" - AOC_FULLSET_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER = "${env.AOC_CONFIG_DIR}/aem-aws-stack-builder/${params.AOC_AEM_STACK_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/" - AOC_STACK_MANAGER_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER = "${env.AOC_CONFIG_DIR}/aem-aws-stack-builder/${params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/" - AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER = "${env.AOC_CONFIG_DIR}/aem-stack-manager-messenger/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/" - AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE = "${env.AOC_CONFIG_DIR}/aem-test-suite/${params.AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/" } parameters { string(name: 'AOC_VERSION_AEM_AWS_STACK_BUILDER', defaultValue: config.library.aem_aws_stack_builder, description: 'Version of aem-aws-stack-builder repo to archive') @@ -23,10 +27,11 @@ pipeline { string(name: 'SOURCE_AUTHOR_SNAPSHOT_ID', defaultValue: '', description: 'Source Snapshot ID from the Author repository') string(name: 'SOURCE_PUBLISH_SNAPSHOT_ID', defaultValue: '', description: 'Source Snapshot ID from the Publish repository') string(name: 'SOURCE_SNAPSHOT_STACK_PREFIX', defaultValue: '', description: 'Source Stack Prefix to get source Snapshot IDs from.') + string(name: 'STACK_MANAGER_STACK_PREFIX', defaultValue: 'aoc-sm-' + id, description: 'Stack Manager Stack Prefix to create for the test.') + string(name: 'STACK_PREFIX', defaultValue: 'aoc-fs-' + id, description: 'AEM Stack Stack Prefix to create for the test.') } - stages { - stage('Initialise pipeline') { + stage('Initialise Jenkins pipeline') { steps { script { if (params.ENABLE_SLACK_NOTIFICATIONS == true) { @@ -37,157 +42,55 @@ pipeline { JenkinsPipelinePreStep this } } - stage('Prepare AEM Stack Manager libraries') { - steps { - JenkinsStagePreStep this - AocPrepareLibrary(this, "aem-aws-stack-builder", params.AOC_VERSION_AEM_AWS_STACK_BUILDER, params.AWS_LIBRARY_S3_BUCKET, params.AWS_LIBRARY_S3_PATH, env.TMPDIR) - AocPrepareConfig(this, params.AOC_CONFIG_ARTIFACT_URL, env.TMPDIR) - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Resolve AEM Stack Manager dependencies') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make deps") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Prepare AEM Stack Manager configuration') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make config config_path=${env.AOC_STACK_MANAGER_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER}") - } - post { - always { - JenkinsStagePostStep this - } - } - } stage('Create AEM Stack Manager environment') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make create-stack-manager config_path=${env.AOC_STACK_MANAGER_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER} stack_prefix=${params.STACK_MANAGER_STACK_PREFIX}") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Prepare AEM Full-Set libraries') { - steps { - JenkinsStagePreStep this - sh "rm -rf ${env.TMPDIR}" - AocPrepareLibrary(this, "aem-aws-stack-builder", params.AOC_VERSION_AEM_AWS_STACK_BUILDER, params.AWS_LIBRARY_S3_BUCKET, params.AWS_LIBRARY_S3_PATH, env.TMPDIR) - AocPrepareLibrary(this, "aem-stack-manager-messenger", params.AOC_VERSION_AEM_STACK_MANAGER_MESSENGER, params.AWS_LIBRARY_S3_BUCKET, params.AWS_LIBRARY_S3_PATH, env.TMPDIR) - AocPrepareLibrary(this, "aem-test-suite", params.AOC_VERSION_AEM_TEST_SUITE, params.AWS_LIBRARY_S3_BUCKET, params.AWS_LIBRARY_S3_PATH, env.TMPDIR) - AocPrepareConfig(this, params.AOC_CONFIG_ARTIFACT_URL, env.TMPDIR) - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Resolve AEM Full-Set dependencies') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make deps") - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make deps") - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make stage") - ExecCommand(this, env.TMPDIR, "aem-test-suite", "make deps") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Prepare AEM Full-Set configuration') { - steps { - JenkinsStagePreStep this - GenerateOfflineSnapshotConfig(this, params.SOURCE_AUTHOR_SNAPSHOT_ID, params.SOURCE_PUBLISH_SNAPSHOT_ID, params.SOURCE_SNAPSHOT_STACK_PREFIX, env.AOC_FULLSET_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER) - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make config config_path=${env.AOC_FULLSET_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER}") - ExecCommand(this, env.TMPDIR, "aem-test-suite", "make config-aem-aws config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../manage-environments/aws/${params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/create-stack-manager/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX) + ] } } stage('Create AEM Full-Set environment') { steps { - JenkinsStagePreStep this - AocPrepareParamArtifact(this, params.AOC_DEPLOYMENT_DESCRIPTOR_URL, env.TMPDIR + '/aem-aws-stack-builder/stage/', 'deploy-artifacts-descriptor.json') - AocPrepareParamArtifact(this, params.AOC_EXPORT_DESCRIPTOR_URL, env.TMPDIR + '/aem-aws-stack-builder/stage/', 'export-backups-descriptor.json') - AocPrepareParamArtifact(this, params.AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL, env.TMPDIR + '/aem-aws-stack-builder/stage/', 'content-healthcheck-descriptor.json') - AocPrepareParamArtifact(this, params.AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL, env.TMPDIR + '/aem-aws-stack-builder/stage/', 'aem-custom-stack-provisioner.tar.gz') - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make create-full-set config_path=${env.AOC_FULLSET_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER} stack_prefix=${params.STACK_PREFIX}") - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make check-readiness-full-set stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Run acceptance tests') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-test-suite", "make test-acceptance-full-set config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_TEST_SUITE} stack_prefix=${params.STACK_PREFIX}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../manage-environments/aws/${params.AOC_AEM_STACK_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}-${AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}-${AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/create-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + string(name: 'AOC_DEPLOYMENT_DESCRIPTOR_URL', value: params.AOC_DEPLOYMENT_DESCRIPTOR_URL), + string(name: 'AOC_EXPORT_DESCRIPTOR_URL', value: params.AOC_EXPORT_DESCRIPTOR_URL), + string(name: 'AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL', value: params.AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL), + string(name: 'AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL', value: params.AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL), + string(name: 'SOURCE_AUTHOR_SNAPSHOT_ID', value: params.SOURCE_AUTHOR_SNAPSHOT_ID), + string(name: 'SOURCE_PUBLISH_SNAPSHOT_ID', value: params.SOURCE_PUBLISH_SNAPSHOT_ID), + string(name: 'SOURCE_SNAPSHOT_STACK_PREFIX', value: params.SOURCE_SNAPSHOT_STACK_PREFIX) + ] } } stage('Promote Author Standby to Author primary') { steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-stack-manager-messenger", "make promote-author stack_prefix=${params.STACK_MANAGER_STACK_PREFIX} target_aem_stack_prefix=${params.STACK_PREFIX} config_path=${env.AOC_CONFIG_PROFILE_DIR_AEM_STACK_MANAGER_MESSENGER}") - } - post { - always { - - JenkinsStagePostStep this - } - } - } - stage('Delete AEM OpenCloud Full-Set environment') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make delete-full-set config_path=${env.AOC_FULLSET_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER} stack_prefix=${params.STACK_PREFIX}") - } - post { - always { - JenkinsStagePostStep this - } - } - } - stage('Delete AEM OpenCloud Stack Manager environment') { - steps { - JenkinsStagePreStep this - ExecCommand(this, env.TMPDIR, "aem-aws-stack-builder", "make delete-stack-manager config_path=${env.AOC_STACK_MANAGER_CONFIG_PROFILE_DIR_AEM_AWS_STACK_BUILDER} stack_prefix=${params.STACK_MANAGER_STACK_PREFIX}") - } - post { - always { - JenkinsStagePostStep this - } + build job: "../../../operational-tasks/${params.AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}/promote-author/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX), + string(name: 'STACK_MANAGER_STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX), + ] } } } post { always { + build job: "../../../manage-environments/aws/${params.AOC_AEM_STACK_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}-${AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER}-${AOC_CONFIG_PROFILE_AEM_TEST_SUITE}/delete-full-set/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_PREFIX) + ] + build job: "../../../manage-environments/aws/${params.AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER}/delete-stack-manager/", + parameters: [ + booleanParam(name: 'ENABLE_SLACK_NOTIFICATIONS', value: params.ENABLE_SLACK_NOTIFICATIONS), + string(name: 'STACK_PREFIX', value: params.STACK_MANAGER_STACK_PREFIX) + ] JenkinsPipelinePostStep this } success { diff --git a/templates/ansible/jenkins/config/jobs-testing-blue-green.xml.j2 b/templates/ansible/jenkins/config/jobs-testing-blue-green.xml.j2 index 71f58351..68dff774 100644 --- a/templates/ansible/jenkins/config/jobs-testing-blue-green.xml.j2 +++ b/templates/ansible/jenkins/config/jobs-testing-blue-green.xml.j2 @@ -12,24 +12,6 @@ {{ aem_opencloud.enable_slack_notifications }} true - - STACK_PREFIX_BLUE - AEM OpenCloud AEM stack prefix. - FSBlue - true - - - STACK_PREFIX_GREEN - AEM OpenCloud AEM stack prefix. - FSGreen - true - - - STACK_MANAGER_STACK_PREFIX - AEM OpenCloud Stack Manager stack prefix. - - true - AOC_DEPLOYMENT_DESCRIPTOR_URL URL where deployment descriptor file is located. diff --git a/templates/ansible/jenkins/config/jobs-testing-consolidated-security.xml.j2 b/templates/ansible/jenkins/config/jobs-testing-consolidated-security.xml.j2 new file mode 100644 index 00000000..8222651a --- /dev/null +++ b/templates/ansible/jenkins/config/jobs-testing-consolidated-security.xml.j2 @@ -0,0 +1,136 @@ + + + + AEM OpenCloud Jenkins job provisioned with AEM OpenCloud Manager. + false + + + + + ENABLE_SLACK_NOTIFICATIONS + If activated SLACK notifications will be send out. + {{ aem_opencloud.enable_slack_notifications }} + true + + + AUTHOR_DISPATCHER_HOSTED_ZONE + DNS hosted zone name,which is connected to Author Dispatcher + {{ aws.dns_records.author_dispatcher.author_dispatcher_hosted_zone_name }} + true + + + AUTHOR_DISPATCHER_RECORD_SET + DNS record set,which is connected to Author Dispatcher + + true + + + AOC_DEPLOYMENT_DESCRIPTOR_URL + URL where deployment descriptor file is located. + {{ aem_opencloud.descriptors[aem_architecture_type].deployment_descriptor_url }} + true + + + AOC_EXPORT_DESCRIPTOR_URL + URL where export descriptor file is located. + {{ aem_opencloud.descriptors[aem_architecture_type].export_descriptor_url }} + true + + + AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL + URL where content health check descriptor file is located. + {{ aem_opencloud.descriptors[aem_architecture_type].content_healthcheck_descriptor_url }} + true + + + AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL + URL where custom stack provisioner artifact is located. + {{ aem_opencloud.custom_stack_provisioner.artifact_url }} + true + + + JENKINS_AGENT_DOCKER_IMAGE + The name of Docker image to be used as Jenkins build pipeline agent. + {{ jenkins.agent.docker_image }} + true + + + JENKINS_AGENT_DOCKER_ARGS + The CLI args for Jenkins to use when running Docker CLI. + {{ jenkins.agent.docker_args }} + true + + + AOC_AEM_STACK_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER + Name of the AEM AWS Stack Builder configuration profile. + {{ item[0].item.path }} + true + + + AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER + Name of the AEM AWS Stack Builder configuration profile. + {{ item[4].item.path }} + true + + + AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER + Name of the AEM Stack Manager Messenger configuration profile. + {{ item[2].item.path }} + true + + + AOC_CONFIG_PROFILE_AEM_TEST_SUITE + Name of the AEM Test Suite configuration profile. + {{ item[3].item.path }} + true + + + AOC_CONFIG_ARTIFACT_URL + URL to the AEM OpenCloud Configuration artifact. + {{ aem_opencloud.config.artifact_url }} + true + + + AOC_CUSTOM_MANAGER_STEPS_ARTIFACT_URL + URL to the AEM OpenCloud Manager custom manager steps artifact. + {{ aem_opencloud.custom_manager_steps.artifact_url }} + true + + + AWS_LIBRARY_S3_BUCKET + S3 bucket where the libraries are stored + {{ aws.library.s3_bucket }} + true + + + AWS_LIBRARY_S3_PATH + S3 path (of the specified S3 bucket) where the libraries are stored + {{ aws.library.s3_path }} + true + + + + + + + 2 + + + {{ aem_opencloud.jenkins_sharedlibs.repo_url }} + + + + + {% if aem_opencloud.jenkins_sharedlibs.repo_branch != 'main' %}refs/tags/{% endif %}{{ aem_opencloud.jenkins_sharedlibs.repo_branch }} + + + false + + + + provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/{{ item[1].item.path }} + true + + + false + diff --git a/templates/ansible/jenkins/config/jobs-testing-platform.xml.j2 b/templates/ansible/jenkins/config/jobs-testing-platform.xml.j2 index 5e144e10..1479b011 100644 --- a/templates/ansible/jenkins/config/jobs-testing-platform.xml.j2 +++ b/templates/ansible/jenkins/config/jobs-testing-platform.xml.j2 @@ -12,18 +12,6 @@ {{ aem_opencloud.enable_slack_notifications }} true - - STACK_PREFIX - AEM OpenCloud AEM stack prefix. - - true - - - STACK_MANAGER_STACK_PREFIX - AEM OpenCloud Stack Manager stack prefix. - - true - AOC_DEPLOYMENT_DESCRIPTOR_URL URL where deployment descriptor file is located. @@ -92,8 +80,8 @@ DEPLOY_PACKAGE_SOURCE - Package source URL + Absoloute path to package source can include filename or not. If not provide without trailing /. true diff --git a/templates/ansible/jenkins/config/jobs-testing-security.xml.j2 b/templates/ansible/jenkins/config/jobs-testing-security.xml.j2 new file mode 100644 index 00000000..3ba7287e --- /dev/null +++ b/templates/ansible/jenkins/config/jobs-testing-security.xml.j2 @@ -0,0 +1,148 @@ + + + + AEM OpenCloud Jenkins job provisioned with AEM OpenCloud Manager. + false + + + + + ENABLE_SLACK_NOTIFICATIONS + If activated SLACK notifications will be send out. + {{ aem_opencloud.enable_slack_notifications }} + true + + + PUBLISH_DISPATCHER_HOSTED_ZONE + DNS hosted zone name,which is connected to Publish Dispatcher + {{ aws.dns_records.publish_dispatcher.publish_dispatcher_hosted_zone_name }} + true + + + PUBLISH_DISPATCHER_RECORD_SET + DNS record set,which is connected to Publish Dispatcher + + true + + + AUTHOR_DISPATCHER_HOSTED_ZONE + DNS hosted zone name,which is connected to Author Dispatcher + {{ aws.dns_records.author_dispatcher.author_dispatcher_hosted_zone_name }} + true + + + AUTHOR_DISPATCHER_RECORD_SET + DNS record set,which is connected to Author Dispatcher + + true + + + AOC_DEPLOYMENT_DESCRIPTOR_URL + URL where deployment descriptor file is located. + {{ aem_opencloud.descriptors[aem_architecture_type].deployment_descriptor_url }} + true + + + AOC_EXPORT_DESCRIPTOR_URL + URL where export descriptor file is located. + {{ aem_opencloud.descriptors[aem_architecture_type].export_descriptor_url }} + true + + + AOC_CONTENT_HEALTHCHECK_DESCRIPTOR_URL + URL where content health check descriptor file is located. + {{ aem_opencloud.descriptors[aem_architecture_type].content_healthcheck_descriptor_url }} + true + + + AOC_CUSTOM_STACK_PROVISIONER_ARTIFACT_URL + URL where custom stack provisioner artifact is located. + {{ aem_opencloud.custom_stack_provisioner.artifact_url }} + true + + + JENKINS_AGENT_DOCKER_IMAGE + The name of Docker image to be used as Jenkins build pipeline agent. + {{ jenkins.agent.docker_image }} + true + + + JENKINS_AGENT_DOCKER_ARGS + The CLI args for Jenkins to use when running Docker CLI. + {{ jenkins.agent.docker_args }} + true + + + AOC_AEM_STACK_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER + Name of the AEM AWS Stack Builder configuration profile. + {{ item[0].item.path }} + true + + + AOC_STACK_MANAGER_CONFIG_PROFILE_AEM_AWS_STACK_BUILDER + Name of the AEM AWS Stack Builder configuration profile. + {{ item[4].item.path }} + true + + + AOC_CONFIG_PROFILE_AEM_STACK_MANAGER_MESSENGER + Name of the AEM Stack Manager Messenger configuration profile. + {{ item[2].item.path }} + true + + + AOC_CONFIG_PROFILE_AEM_TEST_SUITE + Name of the AEM Test Suite configuration profile. + {{ item[3].item.path }} + true + + + AOC_CONFIG_ARTIFACT_URL + URL to the AEM OpenCloud Configuration artifact. + {{ aem_opencloud.config.artifact_url }} + true + + + AOC_CUSTOM_MANAGER_STEPS_ARTIFACT_URL + URL to the AEM OpenCloud Manager custom manager steps artifact. + {{ aem_opencloud.custom_manager_steps.artifact_url }} + true + + + AWS_LIBRARY_S3_BUCKET + S3 bucket where the libraries are stored + {{ aws.library.s3_bucket }} + true + + + AWS_LIBRARY_S3_PATH + S3 path (of the specified S3 bucket) where the libraries are stored + {{ aws.library.s3_path }} + true + + + + + + + 2 + + + {{ aem_opencloud.jenkins_sharedlibs.repo_url }} + + + + + {% if aem_opencloud.jenkins_sharedlibs.repo_branch != 'main' %}refs/tags/{% endif %}{{ aem_opencloud.jenkins_sharedlibs.repo_branch }} + + + false + + + + provisioners/jenkins/jenkinsfiles/aem-opencloud/testing/aws/{{ item[1].item.path }} + true + + + false + diff --git a/templates/ansible/jenkins/config/jobs-testing.xml.j2 b/templates/ansible/jenkins/config/jobs-testing.xml.j2 index 1820f90e..279cd773 100644 --- a/templates/ansible/jenkins/config/jobs-testing.xml.j2 +++ b/templates/ansible/jenkins/config/jobs-testing.xml.j2 @@ -12,18 +12,6 @@ {{ aem_opencloud.enable_slack_notifications }} true - - STACK_PREFIX - AEM OpenCloud AEM stack prefix. - - true - - - STACK_MANAGER_STACK_PREFIX - AEM OpenCloud Stack Manager stack prefix. - - true - AOC_DEPLOYMENT_DESCRIPTOR_URL URL where deployment descriptor file is located.