From 42e796f06795c9761ef32e7568671ace86759455 Mon Sep 17 00:00:00 2001 From: Vitalii Parfonov Date: Fri, 27 Dec 2019 11:09:34 +0200 Subject: [PATCH] Fix scripts for release and nightly builds on ci.centos.org (#15573) * Fix CI release job Signed-off-by: Vitalii Parfonov * Add image tag setting script Signed-off-by: Vitalii Parfonov --- .ci/cico_build_nightly.sh | 2 +- .ci/cico_build_release.sh | 2 + .ci/cico_common.sh | 151 +++++++++++++++++++--------- .ci/set_tag_version_images_linux.sh | 24 +++++ .ci/set_tag_version_images_macos.sh | 24 +++++ 5 files changed, 154 insertions(+), 49 deletions(-) create mode 100755 .ci/set_tag_version_images_linux.sh create mode 100755 .ci/set_tag_version_images_macos.sh diff --git a/.ci/cico_build_nightly.sh b/.ci/cico_build_nightly.sh index 74c52e266b..24db6055df 100644 --- a/.ci/cico_build_nightly.sh +++ b/.ci/cico_build_nightly.sh @@ -18,4 +18,4 @@ load_jenkins_vars load_mvn_settings_gpg_key install_deps build_and_deploy_artifacts -publishImagesOnQuay +publishImagesOnQuay "nightly" diff --git a/.ci/cico_build_release.sh b/.ci/cico_build_release.sh index bb39586dab..8d94470955 100644 --- a/.ci/cico_build_release.sh +++ b/.ci/cico_build_release.sh @@ -17,5 +17,7 @@ load_jenkins_vars load_mvn_settings_gpg_key install_deps +setup_gitconfig releaseProject + diff --git a/.ci/cico_common.sh b/.ci/cico_common.sh index fca8758044..fcc2bf875d 100644 --- a/.ci/cico_common.sh +++ b/.ci/cico_common.sh @@ -11,11 +11,30 @@ # update machine, get required deps in place # this script assumes its being run on CentOS Linux 7/x86_64 + +function die_with() { + echo "$*" >&2 + exit 1 +} + +function getCurrentVersion() { + echo $(scl enable rh-maven33 "mvn help:evaluate -Dexpression=project.version -q -DforceStdout") +} + +function getReleaseVersion() { + echo "$(echo $1 | cut -d'-' -f1)" #cut SNAPSHOT form the version name +} + +function setReleaseVersionInMavenProject(){ + scl enable rh-maven33 "mvn versions:set -DgenerateBackupPoms=false -DnewVersion=$1" +} + load_jenkins_vars() { set +x eval "$(./env-toolkit load -f jenkins-env.json \ CHE_BOT_GITHUB_TOKEN \ CHE_MAVEN_SETTINGS \ + CHE_GITHUB_SSH_KEY \ CHE_OSS_SONATYPE_GPG_KEY \ CHE_OSS_SONATYPE_PASSPHRASE \ QUAY_ECLIPSE_CHE_USERNAME \ @@ -23,13 +42,17 @@ load_jenkins_vars() { } load_mvn_settings_gpg_key() { - set -x - mkdir $HOME/.m2 set +x + mkdir $HOME/.m2 #prepare settings.xml for maven and sonatype (central maven repository) - echo $CHE_MAVEN_SETTINGS | base64 -d > $HOME/.m2/settings.xml + echo ${CHE_MAVEN_SETTINGS} | base64 -d > $HOME/.m2/settings.xml #load GPG key for sign artifacts - echo $CHE_OSS_SONATYPE_GPG_KEY | base64 -d > $HOME/.m2/gpg.key + echo ${CHE_OSS_SONATYPE_GPG_KEY} | base64 -d > $HOME/.m2/gpg.key + #load SSH key for release process + echo ${#CHE_OSS_SONATYPE_GPG_KEY} + echo ${CHE_GITHUB_SSH_KEY} | base64 -d > $HOME/.ssh/id_rsa + chmod 0400 $HOME/.ssh/id_rsa + ssh-keyscan github.com >> ~/.ssh/known_hosts set -x gpg --import $HOME/.m2/gpg.key } @@ -50,38 +73,40 @@ install_deps(){ build_and_deploy_artifacts() { set -x scl enable rh-maven33 'mvn clean install -U -Pintegration' - if [ $? -eq 0 ]; then + if [[ $? -eq 0 ]]; then echo 'Build Success!' echo 'Going to deploy artifacts' scl enable rh-maven33 "mvn clean deploy -DcreateChecksum=true -Dgpg.passphrase=$CHE_OSS_SONATYPE_PASSPHRASE" else - echo 'Build Failed!' - exit 1 + die_with 'Build Failed!' fi } -releaseProject() { - #test 4 - CUR_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) - TAG = $(echo $CUR_VERSION | cut -d'-' -f1) #cut SNAPSHOT form the version name - echo -e "\x1B[92m############### Release: $TAG\x1B[0m" - scl enable rh-maven33 "mvn release:prepare release:perform -B -Dresume=false -Dtag=$TAG -DreleaseVersion=$TAG '-Darguments=-DskipTests=true -Dskip-validate-sources -Dgpg.passphrase=$CHE_OSS_SONATYPE_PASSPHRASE -Darchetype.test.skip=true -Dversion.animal-sniffer.enforcer-rule=1.16'" +gitHttps2ssh(){ + #git remote set-url origin git@github.com:$(git remote get-url origin | sed 's/https:\/\/github.com\///' | sed 's/git@github.com://') + #git version 1.8.3 not support get-url sub-command so hardcode url + git remote set-url origin git@github.com:eclipse/che } -publishImagesOnQuay() { +setup_gitconfig() { + git config --global user.name "Vitalii Parfonov" + git config --global user.email vparfono@redhat.com +} + + +publishImagesOnQuayLatest() { echo "Going to build and push docker images" set -e set -o pipefail + TAG=$1 + git checkout ${TAG} REGISTRY="quay.io" ORGANIZATION="eclipse" - # For pushing to quay.io 'eclipse' organization we need to use different credentials - QUAY_USERNAME=${QUAY_ECLIPSE_CHE_USERNAME} - QUAY_PASSWORD=${QUAY_ECLIPSE_CHE_PASSWORD} - if [ -n "${QUAY_USERNAME}" ] && [ -n "${QUAY_PASSWORD}" ]; then - docker login -u "${QUAY_USERNAME}" -p "${QUAY_PASSWORD}" "${REGISTRY}" + if [[ -n "${QUAY_ECLIPSE_CHE_USERNAME}" ]] && [[ -n "${QUAY_ECLIPSE_CHE_PASSWORD}" ]]; then + docker login -u "${QUAY_ECLIPSE_CHE_USERNAME}" -p "${QUAY_ECLIPSE_CHE_PASSWORD}" "${REGISTRY}" else echo "Could not login, missing credentials for pushing to the '${ORGANIZATION}' organization" return @@ -94,43 +119,43 @@ publishImagesOnQuay() { # KEEP RIGHT ORDER!!! DOCKER_FILES_LOCATIONS=( - dockerfiles/endpoint-watcher - dockerfiles/keycloak - dockerfiles/postgres - dockerfiles/dev - dockerfiles/che - dockerfiles/dashboard-dev - dockerfiles/e2e + dockerfiles/endpoint-watcher + dockerfiles/keycloak + dockerfiles/postgres + dockerfiles/dev + dockerfiles/che + dockerfiles/dashboard-dev + dockerfiles/e2e ) IMAGES_LIST=( - eclipse/che-endpoint-watcher - eclipse/che-keycloak - eclipse/che-postgres - eclipse/che-dev - eclipse/che-server - eclipse/che-dashboard-dev - eclipse/che-e2e + eclipse/che-endpoint-watcher + eclipse/che-keycloak + eclipse/che-postgres + eclipse/che-dev + eclipse/che-server + eclipse/che-dashboard-dev + eclipse/che-e2e ) # BUILD IMAGES for image_dir in ${DOCKER_FILES_LOCATIONS[@]} do - bash $(pwd)/$image_dir/build.sh - if [ $image_dir == "dockerfiles/che" ]; then + bash $(pwd)/${image_dir}/build.sh --tag:${TAG} + if [[ ${image_dir} == "dockerfiles/che" ]]; then #CENTOS SINGLE USER BUILD_ASSEMBLY_DIR=$(echo assembly/assembly-main/target/eclipse-che-*/eclipse-che-*/) - LOCAL_ASSEMBLY_DIR="$image_dir/eclipse-che" - if [ -d "${LOCAL_ASSEMBLY_DIR}" ]; then + LOCAL_ASSEMBLY_DIR="${image_dir}/eclipse-che" + if [[ -d "${LOCAL_ASSEMBLY_DIR}" ]]; then rm -r "${LOCAL_ASSEMBLY_DIR}" fi cp -r "${BUILD_ASSEMBLY_DIR}" "${LOCAL_ASSEMBLY_DIR}" - docker build -t ${ORGANIZATION}/che-server:nightly-centos -f $(pwd)/$image_dir/Dockerfile.centos $(pwd)/$image_dir/ + docker build -t ${ORGANIZATION}/che-server:${TAG}-centos -f $(pwd)/${image_dir}/Dockerfile.centos $(pwd)/${image_dir}/ fi - if [ $? -ne 0 ]; then + if [[ $? -ne 0 ]]; then echo "ERROR:" - echo "build of '$image_dir' image is failed!" + echo "build of '${image_dir}' image is failed!" exit 1 fi done @@ -138,17 +163,47 @@ publishImagesOnQuay() { #PUSH IMAGES for image in ${IMAGES_LIST[@]} do - docker tag "${image}:nightly" "${REGISTRY}/${image}:nightly" - echo y | docker push "${REGISTRY}/${image}:nightly" - if [ $image == "${ORGANIZATION}/che-server" ]; then - docker tag "${image}:nightly" "${REGISTRY}/${image}:nightly-centos" - echo y | docker push "${REGISTRY}/${ORGANIZATION}/che-server:nightly-centos" + docker tag "${image}:${TAG}" "${REGISTRY}/${image}:${TAG}" + echo y | docker push "${REGISTRY}/${image}:${TAG}" + if [[ $2 == "pushLatest" ]]; then + docker tag "${image}:${TAG}" "${REGISTRY}/${image}:latest" + echo y | docker push "${REGISTRY}/${image}:latest" fi - if [ $? -ne 0 ]; then + + if [[ ${image} == "${ORGANIZATION}/che-server" ]]; then + docker tag "${image}:${TAG}" "${REGISTRY}/${image}:${TAG}-centos" + echo y | docker push "${REGISTRY}/${ORGANIZATION}/che-server:${TAG}-centos" + if [[ $2 == "pushLatest" ]]; then + docker tag "${image}:${TAG}" "${REGISTRY}/${image}:latest-centos" + echo y | docker push "${REGISTRY}/${ORGANIZATION}/che-server:latest-centos" + fi + fi + if [[ $? -ne 0 ]]; then echo "ERROR:" - echo "docker push of '$image' image is failed!" + echo "docker push of '${image}' image is failed!" exit 1 fi done - +} + +releaseProject() { + set -x + gitHttps2ssh + git checkout -f release + curVer=$(getCurrentVersion) + tag=$(getReleaseVersion ${curVer}) + echo "Release version ${tag}" + setReleaseVersionInMavenProject ${tag} + git commit -asm "Release version ${tag}" + scl enable rh-maven33 'mvn clean install -U -DskipTests=true -Dskip-validate-sources' + if [[ $? -eq 0 ]]; then + echo 'Build Success!' + echo 'Going to deploy artifacts' + scl enable rh-maven33 "mvn clean deploy -DcreateChecksum=true -DskipTests=true -Dskip-validate-sources -Dgpg.passphrase=$CHE_OSS_SONATYPE_PASSPHRASE" + else + die_with 'Build Failed!' + fi + git tag "${tag}" || die_with "Failed to create tag ${tag}! Release has been deployed, however" + git push --tags || die_with "Failed to push tags. Please do this manually" + publishImagesOnQuayLatest ${tag} "pushLatest" } diff --git a/.ci/set_tag_version_images_linux.sh b/.ci/set_tag_version_images_linux.sh new file mode 100755 index 0000000000..743bcc7c55 --- /dev/null +++ b/.ci/set_tag_version_images_linux.sh @@ -0,0 +1,24 @@ +#!/bin/bash +# Copyright (c) 2017 Red Hat, Inc. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html + +sed -i '' "s/DEFAULT_PLUGIN_REGISTRY_IMAGE_TAG=\"nightly\"/DEFAULT_PLUGIN_REGISTRY_IMAGE_TAG=\"$1\"/g" ../deploy/openshift/deploy_che.sh +sed -i '' "s/DEFAULT_DEVFILE_REGISTRY_IMAGE_TAG=\"nightly\"/DEFAULT_PLUGIN_REGISTRY_IMAGE_TAG=\"$1\"/g" ../deploy/openshift/deploy_che.sh +sed -i '' "s/DEFAULT_CHE_IMAGE_TAG=\"nightly\"/DEFAULT_PLUGIN_REGISTRY_IMAGE_TAG=\"$1\"/g" ../deploy/openshift/deploy_che.sh +sed -i '' "s/DEFAULT_KEYCLOAK_IMAGE_TAG=\"nightly\"/DEFAULT_PLUGIN_REGISTRY_IMAGE_TAG=\"$1\"/g" ../deploy/openshift/deploy_che.sh + +sed -i '' "s/che.factory.default_editor=eclipse\/che-theia\/next/che.factory.default_editor=eclipse\/che-theia\/$1/g" ../assembly/assembly-wsmaster-war/src/main/webapp/WEB-INF/classes/che/che.properties +sed -i '' "s/che.factory.default_plugins=eclipse\/che-machine-exec-plugin\/nightly/che.factory.default_plugins=eclipse\/che-machine-exec-plugin\/$1/g" ../assembly/assembly-wsmaster-war/src/main/webapp/WEB-INF/classes/che/che.properties +sed -i '' "s/che.workspace.devfile.default_editor=eclipse\/che-theia\/next/che.workspace.devfile.default_editor=eclipse\/che-theia\/$1/g" ../assembly/assembly-wsmaster-war/src/main/webapp/WEB-INF/classes/che/che.properties +sed -i '' "s/che.workspace.devfile.default_editor.plugins=eclipse\/che-machine-exec-plugin\/nightly/che.workspace.devfile.default_editor.plugins=eclipse\/che-machine-exec-plugin\/$1/g" ../assembly/assembly-wsmaster-war/src/main/webapp/WEB-INF/classes/che/che.properties + +sed -i '' "s/che-plugin-registry:nightly/che-plugin-registry:$1/g" ../deploy/kubernetes/helm/che/custom-charts/che-plugin-registry/values.yaml +sed -i '' "s/che-devfile-registry:nightly/che-devfile-registry:$1/g" ../deploy/kubernetes/helm/che/custom-charts/che-devfile-registry/values.yaml +sed -i '' "s/che-postgres:nightly/che-postgres:$1/g" ../deploy/kubernetes/helm/che/custom-charts/che-postgres/values.yaml +sed -i '' "s/che-keycloak:nightly/che-keycloak:$1/g" ../deploy/kubernetes/helm/che/custom-charts/che-keycloak/values.yaml +sed -i '' "s/eclipse\/che-server:nightly/eclipse\/che-server:$1/g" ../deploy/kubernetes/helm/che/values.yaml + + diff --git a/.ci/set_tag_version_images_macos.sh b/.ci/set_tag_version_images_macos.sh new file mode 100755 index 0000000000..743bcc7c55 --- /dev/null +++ b/.ci/set_tag_version_images_macos.sh @@ -0,0 +1,24 @@ +#!/bin/bash +# Copyright (c) 2017 Red Hat, Inc. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html + +sed -i '' "s/DEFAULT_PLUGIN_REGISTRY_IMAGE_TAG=\"nightly\"/DEFAULT_PLUGIN_REGISTRY_IMAGE_TAG=\"$1\"/g" ../deploy/openshift/deploy_che.sh +sed -i '' "s/DEFAULT_DEVFILE_REGISTRY_IMAGE_TAG=\"nightly\"/DEFAULT_PLUGIN_REGISTRY_IMAGE_TAG=\"$1\"/g" ../deploy/openshift/deploy_che.sh +sed -i '' "s/DEFAULT_CHE_IMAGE_TAG=\"nightly\"/DEFAULT_PLUGIN_REGISTRY_IMAGE_TAG=\"$1\"/g" ../deploy/openshift/deploy_che.sh +sed -i '' "s/DEFAULT_KEYCLOAK_IMAGE_TAG=\"nightly\"/DEFAULT_PLUGIN_REGISTRY_IMAGE_TAG=\"$1\"/g" ../deploy/openshift/deploy_che.sh + +sed -i '' "s/che.factory.default_editor=eclipse\/che-theia\/next/che.factory.default_editor=eclipse\/che-theia\/$1/g" ../assembly/assembly-wsmaster-war/src/main/webapp/WEB-INF/classes/che/che.properties +sed -i '' "s/che.factory.default_plugins=eclipse\/che-machine-exec-plugin\/nightly/che.factory.default_plugins=eclipse\/che-machine-exec-plugin\/$1/g" ../assembly/assembly-wsmaster-war/src/main/webapp/WEB-INF/classes/che/che.properties +sed -i '' "s/che.workspace.devfile.default_editor=eclipse\/che-theia\/next/che.workspace.devfile.default_editor=eclipse\/che-theia\/$1/g" ../assembly/assembly-wsmaster-war/src/main/webapp/WEB-INF/classes/che/che.properties +sed -i '' "s/che.workspace.devfile.default_editor.plugins=eclipse\/che-machine-exec-plugin\/nightly/che.workspace.devfile.default_editor.plugins=eclipse\/che-machine-exec-plugin\/$1/g" ../assembly/assembly-wsmaster-war/src/main/webapp/WEB-INF/classes/che/che.properties + +sed -i '' "s/che-plugin-registry:nightly/che-plugin-registry:$1/g" ../deploy/kubernetes/helm/che/custom-charts/che-plugin-registry/values.yaml +sed -i '' "s/che-devfile-registry:nightly/che-devfile-registry:$1/g" ../deploy/kubernetes/helm/che/custom-charts/che-devfile-registry/values.yaml +sed -i '' "s/che-postgres:nightly/che-postgres:$1/g" ../deploy/kubernetes/helm/che/custom-charts/che-postgres/values.yaml +sed -i '' "s/che-keycloak:nightly/che-keycloak:$1/g" ../deploy/kubernetes/helm/che/custom-charts/che-keycloak/values.yaml +sed -i '' "s/eclipse\/che-server:nightly/eclipse\/che-server:$1/g" ../deploy/kubernetes/helm/che/values.yaml + +