tet123/jenkins-jobs/pipelines/ocp_system_pipeline.groovy
Martin Medek 2add1f4c20 DBZ-3832 refactor, added test parameter to skip namespace and strimzi preparation
DBZ-3832 refactor

DBZ-3832 Removing redundant jenkins jobs

DBZ-3832 Refactor, moved operator deployment to standalone fixtures

DBZ-3832 Removed isRunningFromOcp hooks from kafka/kafkaConnect deployment, removed operator and namaespace preparation from system_pipeline

DBZ-3832 Modified OCP system tests to not create namespaces and operators

DBZ-3832 Moved namespace cleanup to NamespaceCleanupListener to be executed after all test classes, refactor

DBZ-3832 added strimzi, apicurio operators creation to testsuite.
Added maven property to set strimzi/apic subscription channel
Added namespace and clusterRoleBinding preparation into testsuite
2023-02-08 11:47:57 +01:00

185 lines
8.3 KiB
Groovy

pipeline {
agent {
label 'Slave'
}
environment {
DEBEZIUM_LOCATION = "${WORKSPACE}/debezium"
OCP_PROJECT_NAME = "debezium-ocp-${BUILD_NUMBER}"
OCP_PROJECT_DEBEZIUM_TESTSUITE = "${OCP_PROJECT_NAME}-testsuite"
}
stages {
stage('Clean up ws') {
steps {
cleanWs()
}
}
stage('Checkout - Debezium') {
steps {
checkout([
$class : 'GitSCM',
branches : [[name: "${DBZ_GIT_BRANCH}"]],
userRemoteConfigs: [[url: "${DBZ_GIT_REPOSITORY}"]],
extensions : [[$class : 'RelativeTargetDirectory',
relativeTargetDir: 'debezium']],
])
}
}
stage('Configure namespaces') {
steps {
withCredentials([
usernamePassword(credentialsId: "${OCP_CREDENTIALS}", usernameVariable: 'OCP_USERNAME', passwordVariable: 'OCP_PASSWORD'),
file(credentialsId: "${params.PULL_SECRET}", variable: 'SECRET_PATH'),
]) {
sh '''
oc login -u "${OCP_USERNAME}" -p "${OCP_PASSWORD}" --insecure-skip-tls-verify=true "${OCP_URL}"
# create testsuite project and secret
oc new-project "${OCP_PROJECT_DEBEZIUM_TESTSUITE}"
oc adm policy add-cluster-role-to-user cluster-admin "system:serviceaccount:${OCP_PROJECT_DEBEZIUM_TESTSUITE}:default"
oc apply -f "${SECRET_PATH}"
'''
}
}
}
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"
env.OCP_ENV_FILE = "${WORKSPACE}/debezium-${BUILD_NUMBER}.ocp.env"
}
withCredentials([
usernamePassword(credentialsId: "${OCP_CREDENTIALS}", usernameVariable: 'OCP_USERNAME', passwordVariable: 'OCP_PASSWORD'),
]) {
sh '''
set -x
cd "${DEBEZIUM_LOCATION}"
oc login ${OCP_URL} -u "${OCP_USERNAME}" --password="${OCP_PASSWORD}" --insecure-skip-tls-verify=true >/dev/null
./jenkins-jobs/scripts/ocp-projects.sh --create --project "${OCP_PROJECT_NAME}" --envfile "${OCP_ENV_FILE}"
source "${OCP_ENV_FILE}"
sed -i "s/namespace: .*/namespace: ${OCP_PROJECT_NAME}/" ${WORKSPACE}/strimzi/install/cluster-operator/*RoleBinding*.yaml
oc delete -f ${STRZ_RESOURCES} -n ${OCP_PROJECT_NAME} --ignore-not-found
oc create -f ${STRZ_RESOURCES} -n ${OCP_PROJECT_NAME}
'''
}
}
}
stage('Run testsuite') {
steps {
withCredentials([
usernamePassword(credentialsId: "${OCP_CREDENTIALS}", usernameVariable: 'OCP_USERNAME', passwordVariable: 'OCP_PASSWORD'),
file(credentialsId: "${params.PULL_SECRET}", variable: 'SECRET_PATH'),
]) {
script{
env.PREPARE_STRIMZI = params.STRIMZI_PREPARE_BUILD_NUMBER ? "false" : "true"
env.TEST_TAG_EXPRESSION = params.TEST_TAGS
if (!params.TEST_APICURIO_REGISTRY) {
env.TEST_TAG_EXPRESSION = [env.TEST_TAG_EXPRESSION, "!avro"].findAll().join(" & ")
}
env.TEST_TAG_EXPRESSION = [env.TEST_TAG_EXPRESSION, "!docker"].findAll().join(" & ")
}
sh '''
cd ${DEBEZIUM_LOCATION}
POD_DESCRIPTION="testsuite.yml"
PULL_SECRET_NAME=$(cat ${SECRET_PATH} | grep name | awk '{print $2;}')
LOG_LOCATION_IN_POD=/root/testsuite/testsuite_log
jenkins-jobs/docker/debezium-testing-system/deployment-template.sh --filename "${POD_DESCRIPTION}" \
--pull-secret-name "${PULL_SECRET_NAME}" \
--docker-tag "${DOCKER_TAG}" \
--project-name "${OCP_PROJECT_NAME}" \
--product-build "${PRODUCT_BUILD}" \
--strimzi-kc-build ${STRIMZI_KC_BUILD} \
--apicurio-version "${APICURIO_VERSION}" \
--kafka-version "${KAFKA_VERSION}" \
--groups-arg "${TEST_TAG_EXPRESSION}" \
--dbz-connect-image "${DBZ_CONNECT_IMAGE}" \
--artifact-server-image "${ARTIFACT_SERVER_IMAGE}" \
--dbz-git-repository "${DBZ_GIT_REPOSITORY}" \
--dbz-git-branch "${DBZ_GIT_BRANCH}" \
--testsuite-log "${LOG_LOCATION_IN_POD}" \
--strimzi-channel "${STRZ_CHANNEL}" \
--apicurio-channel "${APIC_CHANNEL}" \
--prepare-strimzi "${PREPARE_STRIMZI}"
oc project "${OCP_PROJECT_DEBEZIUM_TESTSUITE}"
oc create -f "${POD_DESCRIPTION}"
pod_name=$(oc get pods | tail -1 | awk '{print $1;}')
{
oc wait --timeout=10h --for=condition=Ready pod/${pod_name}
# copy log and test results
mkdir ${WORKSPACE}/testsuite_artifacts
oc rsync ${pod_name}:${LOG_LOCATION_IN_POD} ${WORKSPACE}/testsuite_artifacts
oc rsync ${pod_name}:/root/testsuite/artifacts.zip ${WORKSPACE}/testsuite_artifacts || oc delete pod ${pod_name}
oc delete pod ${pod_name}
} &
# wait for container to start and print logs
for i in {1..100}; do
sleep 2
oc logs -f ${pod_name} && break
done
'''
}
}
}
}
post {
always {
sh '''
cd ${DEBEZIUM_LOCATION}
./jenkins-jobs/scripts/ocp-projects.sh --delete --testsuite --project ${OCP_PROJECT_NAME}
'''
archiveArtifacts "**/testsuite_artifacts/*"
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 ocp"
else
export ATTRIBUTES="upstream ocp"
fi
cd ${WORKSPACE}/testsuite_artifacts
mkdir results
unzip artifacts.zip -d results
RESULTS_FOLDER="."
rm -rf ${RESULTS_FOLDER}/failsafe-summary.xml
docker login quay.io -u "$QUAY_USERNAME" -p "$QUAY_PASSWORD"
${DEBEZIUM_LOCATION}/jenkins-jobs/scripts/report.sh --connector false --env-file env-file.env --results-folder ${RESULTS_FOLDER} --attributes "${ATTRIBUTES}"
'''
}
}
}
}