Fix scripts for release and nightly builds on ci.centos.org (#15573)

* Fix CI release job

Signed-off-by: Vitalii Parfonov <vparfono@redhat.com>

* Add image tag setting script

Signed-off-by: Vitalii Parfonov <vparfono@redhat.com>
7.20.x
Vitalii Parfonov 2019-12-27 11:09:34 +02:00 committed by GitHub
parent e5cfda1c58
commit 42e796f067
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 154 additions and 49 deletions

View File

@ -18,4 +18,4 @@ load_jenkins_vars
load_mvn_settings_gpg_key
install_deps
build_and_deploy_artifacts
publishImagesOnQuay
publishImagesOnQuay "nightly"

View File

@ -17,5 +17,7 @@
load_jenkins_vars
load_mvn_settings_gpg_key
install_deps
setup_gitconfig
releaseProject

View File

@ -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"
}

View File

@ -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

View File

@ -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