diff --git a/ci/pcf-pipelines/pipeline.yml b/ci/pcf-pipelines/pipeline.yml index 1e6482858..45e48e37d 100644 --- a/ci/pcf-pipelines/pipeline.yml +++ b/ci/pcf-pipelines/pipeline.yml @@ -1,3 +1,26 @@ +atc_creds: &atc_creds + ATC_EXTERNAL_URL: {{atc_external_url}} + ATC_BASIC_AUTH_USERNAME: {{fly_basic_auth_username}} + ATC_BASIC_AUTH_PASSWORD: {{fly_basic_auth_password}} + ATC_TEAM_NAME: {{atc_team_name}} + +vsphere_atc_creds: &vsphere_atc_creds + ATC_EXTERNAL_URL: {{atc_external_url}} + ATC_BASIC_AUTH_USERNAME: {{fly_basic_auth_username}} + ATC_BASIC_AUTH_PASSWORD: {{fly_basic_auth_password}} + ATC_TEAM_NAME: vsphere + +notify_slack: ¬ify_slack + put: slack + params: + text: "$BUILD_PIPELINE_NAME/$BUILD_JOB_NAME failed: $ATC_EXTERNAL_URL/builds/$BUILD_ID" + +norm-ci-locks-params: &norm-ci-locks-params + uri: git@github.com:pivotal-cf/norm-ci-locks.git + branch: master + private_key: {{locks_git_ssh_key}} + retry_delay: 1m + groups: - name: all jobs: @@ -1304,26 +1327,3 @@ jobs: on_failure: <<: *notify_slack ####### END VSPHERE OFFLINE - -atc_creds: &atc_creds - ATC_EXTERNAL_URL: {{atc_external_url}} - ATC_BASIC_AUTH_USERNAME: {{fly_basic_auth_username}} - ATC_BASIC_AUTH_PASSWORD: {{fly_basic_auth_password}} - ATC_TEAM_NAME: {{atc_team_name}} - -vsphere_atc_creds: &vsphere_atc_creds - ATC_EXTERNAL_URL: {{atc_external_url}} - ATC_BASIC_AUTH_USERNAME: {{fly_basic_auth_username}} - ATC_BASIC_AUTH_PASSWORD: {{fly_basic_auth_password}} - ATC_TEAM_NAME: vsphere - -notify_slack: ¬ify_slack - put: slack - params: - text: "$BUILD_PIPELINE_NAME/$BUILD_JOB_NAME failed: $ATC_EXTERNAL_URL/builds/$BUILD_ID" - -norm-ci-locks-params: &norm-ci-locks-params - uri: git@github.com:pivotal-cf/norm-ci-locks.git - branch: master - private_key: {{locks_git_ssh_key}} - retry_delay: 1m diff --git a/tasks/promote-buildpack/task.sh b/tasks/promote-buildpack/task.sh index dc343d789..538c36941 100755 --- a/tasks/promote-buildpack/task.sh +++ b/tasks/promote-buildpack/task.sh @@ -19,20 +19,23 @@ set -eu cf api $CF_API_URI --skip-ssl-validation cf auth $CF_USERNAME $CF_PASSWORD -echo Enabling buildpack ${SOURCE_BUILDPACK_NAME}... -cf update-buildpack $SOURCE_BUILDPACK_NAME --enable - -set +e -old_buildpack=$(cf buildpacks | grep "${TARGET_BUILDPACK_NAME}\s") -set -e -if [ -n "$old_buildpack" ]; then - index=$(echo $old_buildpack | cut -d' ' -f2) - name=$(echo $old_buildpack | cut -d' ' -f1) - - cf delete-buildpack -f $TARGET_BUILDPACK_NAME - - echo Updating buildpack ${SOURCE_BUILDPACK_NAME} index... - cf update-buildpack $SOURCE_BUILDPACK_NAME -i $index -fi - -cf rename-buildpack $SOURCE_BUILDPACK_NAME $TARGET_BUILDPACK_NAME +for STACK_NAME in $STACKS; +do + echo Enabling buildpack ${SOURCE_BUILDPACK_NAME} ${STACK_NAME}... + cf update-buildpack $SOURCE_BUILDPACK_NAME -s $STACK_NAME --enable + + set +e + old_buildpack=$(cf buildpacks | grep "${TARGET_BUILDPACK_NAME}\s" | grep "${STACK_NAME}") + set -e + if [ -n "$old_buildpack" ]; then + index=$(echo $old_buildpack | cut -d' ' -f2) + name=$(echo $old_buildpack | cut -d' ' -f1) + + cf delete-buildpack -f $TARGET_BUILDPACK_NAME -s $STACK_NAME + + echo Updating buildpack ${SOURCE_BUILDPACK_NAME} ${STACK_NAME} index... + cf update-buildpack $SOURCE_BUILDPACK_NAME -s $STACK_NAME -i $index + fi + + cf rename-buildpack $SOURCE_BUILDPACK_NAME $TARGET_BUILDPACK_NAME -s $STACK_NAME +done \ No newline at end of file diff --git a/tasks/promote-buildpack/task.yml b/tasks/promote-buildpack/task.yml index ada290993..6f98fce15 100644 --- a/tasks/promote-buildpack/task.yml +++ b/tasks/promote-buildpack/task.yml @@ -19,6 +19,7 @@ image_resource: type: docker-image source: repository: pcfnorm/rootfs + tag: 1.0.28 inputs: @@ -30,6 +31,7 @@ params: CF_PASSWORD: SOURCE_BUILDPACK_NAME: TARGET_BUILDPACK_NAME: + STACKS: run: path: pcf-pipelines/tasks/promote-buildpack/task.sh diff --git a/tasks/stage-buildpack/task.sh b/tasks/stage-buildpack/task.sh index 93d02212b..0db130614 100755 --- a/tasks/stage-buildpack/task.sh +++ b/tasks/stage-buildpack/task.sh @@ -19,14 +19,18 @@ set -eu cf api $CF_API_URI --skip-ssl-validation cf auth $CF_USERNAME $CF_PASSWORD -set +e -existing_buildpack=$(cf buildpacks | grep "${BUILDPACK_NAME}\s") -set -e -if [ -z "${existing_buildpack}" ]; then - COUNT=$(cf buildpacks | grep --regexp=".zip" --count) - NEW_POSITION=$(expr $COUNT + 1) - cf create-buildpack $BUILDPACK_NAME buildpack/*.zip $NEW_POSITION --enable -else - index=$(echo $existing_buildpack | cut -d' ' -f2) - cf update-buildpack $BUILDPACK_NAME -p buildpack/*.zip -i $index --enable -fi + +for STACK_NAME in $STACKS; +do + set +e + existing_buildpack=$(cf buildpacks | grep "${BUILDPACK_NAME}\s" | grep "${STACK_NAME}") + set -e + if [ -z "${existing_buildpack}" ]; then + COUNT=$(cf buildpacks | grep --regexp=".zip" --count) + NEW_POSITION=$(expr $COUNT + 1) + cf create-buildpack $BUILDPACK_NAME buildpack/*-$STACK_NAME-*.zip $NEW_POSITION --enable + else + index=$(echo $existing_buildpack | cut -d' ' -f2) + cf update-buildpack $BUILDPACK_NAME -p buildpack/*-$STACK_NAME-*.zip -s $STACK_NAME -i $index --enable + fi +done \ No newline at end of file diff --git a/tasks/stage-buildpack/task.yml b/tasks/stage-buildpack/task.yml index 285d1786a..b4c32b4aa 100644 --- a/tasks/stage-buildpack/task.yml +++ b/tasks/stage-buildpack/task.yml @@ -19,6 +19,7 @@ image_resource: type: docker-image source: repository: pcfnorm/rootfs + tag: 1.0.28 inputs: @@ -30,6 +31,7 @@ params: CF_USERNAME: CF_PASSWORD: BUILDPACK_NAME: + STACKS: run: path: pcf-pipelines/tasks/stage-buildpack/task.sh diff --git a/tasks/upgrade-buildpack/task.sh b/tasks/upgrade-buildpack/task.sh new file mode 100755 index 000000000..5c729f611 --- /dev/null +++ b/tasks/upgrade-buildpack/task.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +set -eu + +# Copyright 2017-Present Pivotal Software, Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +cf api $CF_API_URI --skip-ssl-validation +cf auth $CF_USERNAME $CF_PASSWORD + +for STACK_NAME in $STACKS; +do + echo Upgrading ${TARGET_BUILDPACK_NAME} ${STACK_NAME}... + cf update-buildpack $TARGET_BUILDPACK_NAME -s $STACK_NAME -p buildpack/*.zip --enable +done \ No newline at end of file diff --git a/tasks/upgrade-buildpack/task.yml b/tasks/upgrade-buildpack/task.yml new file mode 100644 index 000000000..1a226f21e --- /dev/null +++ b/tasks/upgrade-buildpack/task.yml @@ -0,0 +1,37 @@ +# Copyright 2017-Present Pivotal Software, Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +--- +platform: linux + +image_resource: + type: docker-image + source: + repository: pcfnorm/rootfs + tag: 1.0.28 + + +inputs: +- name: buildpack +- name: pcf-pipelines + +params: + CF_API_URI: + CF_USERNAME: + CF_PASSWORD: + TARGET_BUILDPACK_NAME: + STACKS: + +run: + path: pcf-pipelines/tasks/upgrade-buildpack/task.sh diff --git a/upgrade-buildpacks/pipeline.yml b/upgrade-buildpacks/pipeline.yml index 696fc66e5..a8152efd3 100644 --- a/upgrade-buildpacks/pipeline.yml +++ b/upgrade-buildpacks/pipeline.yml @@ -12,6 +12,11 @@ # See the License for the specific language governing permissions and # limitations under the License. +cf_api_params: &cf_api_params + CF_API_URI: {{cf_api_uri}} + CF_USERNAME: {{cf_user}} + CF_PASSWORD: {{cf_password}} + resource_types: - name: pivnet type: docker-image @@ -31,71 +36,71 @@ resources: type: pivnet source: api_token: {{pivnet_token}} - product_slug: buildpacks - product_version: Binary* + product_slug: binary-buildpack + product_version: \d+\.\d+\.\d+ - name: dotnet-core-buildpack type: pivnet source: api_token: {{pivnet_token}} - product_slug: buildpacks - product_version: \.NET* + product_slug: dotnet-core-buildpack + product_version: \d+\.\d+\.\d+ - name: go-buildpack type: pivnet source: api_token: {{pivnet_token}} - product_slug: buildpacks - product_version: ^Go.* + product_slug: go-buildpack + product_version: \d+\.\d+\.\d+ - name: java-buildpack type: pivnet source: api_token: {{pivnet_token}} - product_slug: buildpacks - product_version: Java* + product_slug: java-buildpack + product_version: \d+\.\d+(\.\d+)? - name: nodejs-buildpack type: pivnet source: api_token: {{pivnet_token}} - product_slug: buildpacks - product_version: NodeJS* + product_slug: nodejs-buildpack + product_version: \d+\.\d+\.\d+ - name: php-buildpack type: pivnet source: api_token: {{pivnet_token}} - product_slug: buildpacks - product_version: PHP* + product_slug: php-buildpack + product_version: \d+\.\d+\.\d+ - name: python-buildpack type: pivnet source: api_token: {{pivnet_token}} - product_slug: buildpacks - product_version: Python* + product_slug: python-buildpack + product_version: \d+\.\d+\.\d+ - name: ruby-buildpack type: pivnet source: api_token: {{pivnet_token}} - product_slug: buildpacks - product_version: Ruby* + product_slug: ruby-buildpack + product_version: \d+\.\d+\.\d+ - name: staticfile-buildpack type: pivnet source: api_token: {{pivnet_token}} - product_slug: buildpacks - product_version: Staticfile* + product_slug: staticfile-buildpack + product_version: \d+\.\d+\.\d+ - name: tc-buildpack type: pivnet source: api_token: {{pivnet_token}} - product_slug: buildpacks - product_version: "tc Server*" + product_slug: tc-server-buildpack + product_version: \d+\.\d+(\.\d+)? - name: schedule type: time @@ -148,6 +153,7 @@ jobs: params: <<: *cf_api_params BUILDPACK_NAME: binary_buildpack_latest + STACKS: "cflinuxfs2 cflinuxfs3 windows2012R2 windows2016" - name: promote-binary-buildpack serial_groups: [cc-api] @@ -164,6 +170,7 @@ jobs: <<: *cf_api_params SOURCE_BUILDPACK_NAME: binary_buildpack_latest TARGET_BUILDPACK_NAME: binary_buildpack + STACKS: "cflinuxfs2 cflinuxfs3 windows2012R2 windows2016" - name: stage-dotnet-buildpack serial_groups: [cc-api] @@ -180,6 +187,7 @@ jobs: params: <<: *cf_api_params BUILDPACK_NAME: dotnet_core_buildpack_offline_latest + STACKS: "cflinuxfs2 cflinuxfs3" - name: promote-dotnet-buildpack serial_groups: [cc-api] @@ -196,6 +204,7 @@ jobs: <<: *cf_api_params SOURCE_BUILDPACK_NAME: dotnet_core_buildpack_offline_latest TARGET_BUILDPACK_NAME: dotnet_core_buildpack_offline + STACKS: "cflinuxfs2 cflinuxfs3" - name: stage-go-buildpack serial_groups: [cc-api] @@ -212,6 +221,7 @@ jobs: params: <<: *cf_api_params BUILDPACK_NAME: go_buildpack_latest + STACKS: "cflinuxfs2 cflinuxfs3" - name: promote-go-buildpack serial_groups: [cc-api] @@ -228,41 +238,27 @@ jobs: <<: *cf_api_params SOURCE_BUILDPACK_NAME: go_buildpack_latest TARGET_BUILDPACK_NAME: go_buildpack + STACKS: "cflinuxfs2 cflinuxfs3" -- name: stage-java-buildpack +- name: upgrade-java-buildpack serial_groups: [cc-api] plan: - aggregate: - get: pcf-pipelines - get: buildpack - passed: [regulator] resource: java-buildpack + passed: [regulator] trigger: true params: globs: - "*offline*" - - task: stage - file: pcf-pipelines/tasks/stage-buildpack/task.yml - params: - <<: *cf_api_params - BUILDPACK_NAME: java_buildpack_offline_latest - -- name: promote-java-buildpack - serial_groups: [cc-api] - plan: - - aggregate: - - get: java-buildpack - passed: [stage-java-buildpack] - trigger: true - params: {globs: []} - - get: pcf-pipelines - - task: promote - file: pcf-pipelines/tasks/promote-buildpack/task.yml + - task: upgrade + file: pcf-pipelines/tasks/upgrade-buildpack/task.yml params: <<: *cf_api_params - SOURCE_BUILDPACK_NAME: java_buildpack_offline_latest TARGET_BUILDPACK_NAME: java_buildpack_offline + STACKS: "cflinuxfs2 cflinuxfs3" - name: stage-nodejs-buildpack serial_groups: [cc-api] @@ -279,6 +275,7 @@ jobs: params: <<: *cf_api_params BUILDPACK_NAME: nodejs_buildpack_latest + STACKS: "cflinuxfs2 cflinuxfs3" - name: promote-nodejs-buildpack serial_groups: [cc-api] @@ -295,6 +292,7 @@ jobs: <<: *cf_api_params SOURCE_BUILDPACK_NAME: nodejs_buildpack_latest TARGET_BUILDPACK_NAME: nodejs_buildpack + STACKS: "cflinuxfs2 cflinuxfs3" - name: stage-php-buildpack serial_groups: [cc-api] @@ -311,6 +309,7 @@ jobs: params: <<: *cf_api_params BUILDPACK_NAME: php_buildpack_latest + STACKS: "cflinuxfs2 cflinuxfs3" - name: promote-php-buildpack serial_groups: [cc-api] @@ -327,6 +326,7 @@ jobs: <<: *cf_api_params SOURCE_BUILDPACK_NAME: php_buildpack_latest TARGET_BUILDPACK_NAME: php_buildpack + STACKS: "cflinuxfs2 cflinuxfs3" - name: stage-python-buildpack serial_groups: [cc-api] @@ -343,6 +343,7 @@ jobs: params: <<: *cf_api_params BUILDPACK_NAME: python_buildpack_latest + STACKS: "cflinuxfs2 cflinuxfs3" - name: promote-python-buildpack serial_groups: [cc-api] @@ -359,6 +360,7 @@ jobs: <<: *cf_api_params SOURCE_BUILDPACK_NAME: python_buildpack_latest TARGET_BUILDPACK_NAME: python_buildpack + STACKS: "cflinuxfs2 cflinuxfs3" - name: stage-ruby-buildpack serial_groups: [cc-api] @@ -375,6 +377,7 @@ jobs: params: <<: *cf_api_params BUILDPACK_NAME: ruby_buildpack_latest + STACKS: "cflinuxfs2 cflinuxfs3" - name: promote-ruby-buildpack serial_groups: [cc-api] @@ -391,6 +394,7 @@ jobs: <<: *cf_api_params SOURCE_BUILDPACK_NAME: ruby_buildpack_latest TARGET_BUILDPACK_NAME: ruby_buildpack + STACKS: "cflinuxfs2 cflinuxfs3" - name: stage-staticfile-buildpack serial_groups: [cc-api] @@ -407,6 +411,7 @@ jobs: params: <<: *cf_api_params BUILDPACK_NAME: staticfile_buildpack_latest + STACKS: "cflinuxfs2 cflinuxfs3" - name: promote-staticfile-buildpack serial_groups: [cc-api] @@ -423,44 +428,24 @@ jobs: <<: *cf_api_params SOURCE_BUILDPACK_NAME: staticfile_buildpack_latest TARGET_BUILDPACK_NAME: staticfile_buildpack + STACKS: "cflinuxfs2 cflinuxfs3" -- name: stage-tcserver-buildpack +- name: upgrade-tcserver-buildpack serial_groups: [cc-api] plan: - aggregate: - get: pcf-pipelines - get: buildpack - passed: [regulator] resource: tc-buildpack + passed: [regulator] trigger: true params: globs: - "*offline*" - - task: stage - file: pcf-pipelines/tasks/stage-buildpack/task.yml + - task: upgrade + file: pcf-pipelines/tasks/upgrade-buildpack/task.yml params: <<: *cf_api_params - BUILDPACK_NAME: tc_buildpack_latest - -- name: promote-tcserver-buildpack - serial_groups: [cc-api] - plan: - - aggregate: - - get: tc-buildpack - passed: [stage-tcserver-buildpack] - trigger: true - params: {globs: []} - - get: pcf-pipelines - - - task: promote - file: pcf-pipelines/tasks/promote-buildpack/task.yml - params: - <<: *cf_api_params - SOURCE_BUILDPACK_NAME: tc_buildpack_latest TARGET_BUILDPACK_NAME: tc_buildpack - -cf_api_params: &cf_api_params - CF_API_URI: {{cf_api_uri}} - CF_USERNAME: {{cf_user}} - CF_PASSWORD: {{cf_password}} + STACKS: "cflinuxfs2 cflinuxfs3"