tet123/jenkins-jobs/pipelines/system_pipeline.groovy

242 lines
11 KiB
Groovy
Raw Normal View History

pipeline {
agent {
label 'NodeXL'
}
stages {
stage('Checkout - Debezium') {
steps {
checkout([
$class : 'GitSCM',
branches : [[name: "${DBZ_GIT_BRANCH}"]],
userRemoteConfigs: [[url: "${DBZ_GIT_REPOSITORY}"]],
extensions : [[$class : 'RelativeTargetDirectory',
relativeTargetDir: 'debezium']],
])
}
}
stage('Checkout - Debezium DB2 connector') {
when {
expression { !params.PRODUCT_BUILD }
}
steps {
checkout([
$class : 'GitSCM',
branches : [[name: "${DBZ_GIT_BRANCH_DB2}"]],
userRemoteConfigs: [[url: "${DBZ_GIT_REPOSITORY_DB2}"]],
extensions : [[$class : 'RelativeTargetDirectory',
relativeTargetDir: 'debezium-connector-db2']],
])
}
}
stage('Configure') {
steps {
script {
if (!params.PRODUCT_BUILD && params.STRIMZI_PREPARE_BUILD_NUMBER) {
error("Using productised strimzi archive in upstream build")
}
env.OCP_ENV_FILE = "${WORKSPACE}/debezium-${BUILD_NUMBER}.ocp.env"
env.MVN_PROFILE_PROD = params.PRODUCT_BUILD ? "-Pproduct" : ""
env.PREPARE_STRIMZI_OPERATOR = params.STRIMZI_PREPARE_BUILD_NUMBER ? "-Dprepare.strimzi=false" : ""
env.OCP_PROJECT_DEBEZIUM = "debezium-${currentBuild.number}"
// Use strimzi build mechanism unless pre-built KC image is provided
env.TEST_CONNECT_STRZ_BUILD = params.IMAGE_CONNECT_STRZ ? false : true
// Configure images if provided
env.MVN_IMAGE_CONNECT_STRZ = params.IMAGE_CONNECT_STRZ ? "-Dimage.kc=${params.IMAGE_CONNECT_STRZ}" : ""
env.MVN_IMAGE_CONNECT_RHEL = params.IMAGE_CONNECT_RHEL ? "-Ddocker.image.kc=${params.IMAGE_CONNECT_RHEL}" : ""
env.MVN_IMAGE_DBZ_AS = params.IMAGE_DBZ_AS ? "-Dimage.as=${params.IMAGE_DBZ_AS}" : ""
// Test tag configuration
env.TEST_TAG_EXPRESSION = params.TEST_TAGS
if (!params.TEST_APICURIO_REGISTRY) {
env.TEST_TAG_EXPRESSION = [env.TEST_TAG_EXPRESSION, "!avro"].findAll().join(" & ")
}
// Version configuration
env.MVN_VERSION_KAFKA = params.TEST_VERSION_KAFKA ? "-Dversion.kafka=${params.TEST_VERSION_KAFKA}" : ""
env.MVN_VERSION_AS_DEBEZIUM = params.AS_VERSION_DEBEZIUM ? "-Das.debezium.version=${params.AS_VERSION_DEBEZIUM}" : ""
env.MVN_VERSION_AS_APICURIO = params.AS_VERSION_APICURIO ? "-Das.apicurio.version=${params.AS_VERSION_APICURIO}" : ""
}
}
}
stage('Checkout Downstream AMQ Streams') {
when {
expression { params.PRODUCT_BUILD && params.STRIMZI_PREPARE_BUILD_NUMBER }
}
steps {
copyArtifacts projectName: 'ocp-downstream-strimzi-prepare-job',
filter: 'amq-streams-install-examples.zip',
selector: specific(params.STRIMZI_PREPARE_BUILD_NUMBER)
unzip zipFile: 'amq-streams-install-examples.zip', dir: 'strimzi'
}
}
stage('Prepare Downstream AMQ Streams') {
when {
expression { params.PRODUCT_BUILD && params.STRIMZI_PREPARE_BUILD_NUMBER }
}
steps {
script {
env.STRZ_RESOURCES = "${env.WORKSPACE}/strimzi/install/cluster-operator"
}
withCredentials([
usernamePassword(credentialsId: "${OCP_CREDENTIALS}", usernameVariable: 'OCP_USERNAME', passwordVariable: 'OCP_PASSWORD'),
usernamePassword(credentialsId: "${QUAY_CREDENTIALS}", usernameVariable: 'QUAY_USERNAME', passwordVariable: 'QUAY_PASSWORD'),
]) {
sh '''
set -x
cd "${WORKSPACE}/debezium"
oc login ${OCP_URL} -u "${OCP_USERNAME}" --password="${OCP_PASSWORD}" --insecure-skip-tls-verify=true >/dev/null
./jenkins-jobs/scripts/ocp-projects.sh --create -t "${BUILD_NUMBER}" --envfile "${OCP_ENV_FILE}"
source "${OCP_ENV_FILE}"
sed -i "s/namespace: .*/namespace: ${OCP_PROJECT_DEBEZIUM}/" ${WORKSPACE}/strimzi/install/cluster-operator/*RoleBinding*.yaml
oc delete -f ${STRZ_RESOURCES} -n ${OCP_PROJECT_DEBEZIUM} --ignore-not-found
oc create -f ${STRZ_RESOURCES} -n ${OCP_PROJECT_DEBEZIUM}
'''
}
}
}
stage('Build') {
steps {
withCredentials([
usernamePassword(credentialsId: "${OCP_CREDENTIALS}", usernameVariable: 'OCP_USERNAME', passwordVariable: 'OCP_PASSWORD'),
usernamePassword(credentialsId: "${QUAY_CREDENTIALS}", usernameVariable: 'QUAY_USERNAME', passwordVariable: 'QUAY_PASSWORD'),
]) {
sh '''
set -x
docker login -u=${QUAY_USERNAME} -p=${QUAY_PASSWORD} quay.io
oc login ${OCP_URL} -u "${OCP_USERNAME}" --password="${OCP_PASSWORD}" --insecure-skip-tls-verify=true >/dev/null
'''
sh '''
set -x
cd ${WORKSPACE}/debezium
ORACLE_ARTIFACT_VERSION=$(mvn -q -DforceStdout help:evaluate -Dexpression=version.oracle.driver)
ORACLE_ARTIFACT_DIR="${HOME}/oracle-libs/${ORACLE_ARTIFACT_VERSION}.0"
cd ${ORACLE_ARTIFACT_DIR}
mvn install:install-file -DgroupId=com.oracle.instantclient -DartifactId=ojdbc8 -Dversion=${ORACLE_ARTIFACT_VERSION} -Dpackaging=jar -Dfile=ojdbc8.jar
mvn install:install-file -DgroupId=com.oracle.instantclient -DartifactId=xstreams -Dversion=${ORACLE_ARTIFACT_VERSION} -Dpackaging=jar -Dfile=xstreams.jar
'''
}
sh '''
set -x
cd "${WORKSPACE}/debezium"
mvn clean install -DskipTests -DskipITs
'''
}
}
stage('Build -- Upstream') {
when {
expression { !params.PRODUCT_BUILD }
}
steps {
// Build DB2 Connector
sh '''
set -x
cd ${WORKSPACE}/debezium-connector-db2
mvn clean install -DskipTests -DskipITs -Passembly
'''
// Build Oracle connector
sh '''
set -x
cd ${WORKSPACE}/debezium
mvn install -Passembly,oracle-all -DskipTests -DskipITs
'''
}
}
stage('Enable debug') {
when {
expression { params.DEBUG_MODE }
}
steps {
script {
env.MAVEN_OPTS = "-DforkCount=0 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=*:5005"
}
}
}
stage('Test') {
steps {
withCredentials([
usernamePassword(credentialsId: "${OCP_CREDENTIALS}", usernameVariable: 'OCP_USERNAME', passwordVariable: 'OCP_PASSWORD'),
file(credentialsId: "${params.PULL_SECRET}", variable: 'SECRET_PATH'),
]) {
sh '''
set -x
cd ${WORKSPACE}/debezium
mvn install -pl debezium-testing/debezium-testing-system -PsystemITs,oracleITs \\
${MVN_PROFILE_PROD} \\
${PREPARE_STRIMZI_OPERATOR} \\
-Docp.project.debezium="${OCP_PROJECT_DEBEZIUM}" \\
-Docp.username="${OCP_USERNAME}" \\
-Docp.password="${OCP_PASSWORD}" \\
-Docp.url="${OCP_URL}" \\
-Docp.pull.secret.paths="${SECRET_PATH}" \\
-Dstrimzi.kc.build=${TEST_CONNECT_STRZ_BUILD} \\
-Dtest.wait.scale="${TEST_WAIT_SCALE}" \\
${MVN_IMAGE_CONNECT_STRZ} \\
${MVN_IMAGE_CONNECT_RHEL} \\
${MVN_IMAGE_DBZ_AS} \\
${MVN_VERSION_KAFKA} \\
${MVN_VERSION_AS_DEBEZIUM} \\
${MVN_VERSION_AS_APICURIO} \\
-Dstrimzi.operator.channel=${STRIMZI_OPERATOR_CHANNEL} \\
-Dapicurio.operator.channel=${APICURIO_OPERATOR_CHANNEL} \\
-Dgroups="${TEST_TAG_EXPRESSION}"
'''
}
}
}
}
post {
always {
archiveArtifacts '**/target/failsafe-reports/*.xml'
junit '**/target/failsafe-reports/*.xml'
mail to: params.MAIL_TO, subject: "Debezium OpenShift test run #${env.BUILD_NUMBER} finished with ${currentBuild.currentResult}", body: """
OpenShift interoperability test run ${env.BUILD_URL} finished with result: ${currentBuild.currentResult}
"""
withCredentials([
usernamePassword(credentialsId: "rh-integration-quay-creds", usernameVariable: 'QUAY_USERNAME', passwordVariable: 'QUAY_PASSWORD'),
string(credentialsId: "report-portal-token", variable: 'RP_TOKEN'),
]) {
sh '''
if [ "$PRODUCT_BUILD" == true ] ; then
export ATTRIBUTES="downstream"
else
export ATTRIBUTES="upstream"
fi
RESULTS_FOLDER=final-results
RESULTS_PATH=$RESULTS_FOLDER/results
mkdir -p $RESULTS_PATH
cp debezium/debezium-testing/debezium-testing-system/target/failsafe-reports/*.xml $RESULTS_PATH
rm -rf $RESULTS_PATH/failsafe-summary.xml
docker login quay.io -u "$QUAY_USERNAME" -p "$QUAY_PASSWORD"
./debezium/jenkins-jobs/scripts/report.sh --connector false --env-file env-file.env --results-folder $RESULTS_FOLDER --attributes $ATTRIBUTES
'''
}
}
}
}