distros-test-framework/scripts/Jenkinsfile

128 lines
5.5 KiB
Groovy

#!groovy
node {
def job_name = "${JOB_NAME}"
if (job_name.contains('/')) {
job_names = job_name.split('/')
job_name = job_names[job_names.size() - 1]
}
def testContainer = "${job_name}${env.BUILD_NUMBER}_test"
def imageName = "acceptance-tests-${job_name}${env.BUILD_NUMBER}"
def envFile = ".env"
def qaseEnvFile = ".qase.env"
def branch = "main"
if (env.BRANCH && env.BRANCH != "null") {
branch = env.BRANCH
}
def repo = scm.userRemoteConfigs
if (env.REPO && env.REPO != "null") {
repo = [[url: env.REPO]]
}
def timeout = "60m"
if (env.TIMEOUT && env.TIMEOUT != "null") {
timeout = env.TIMEOUT
}
def module = ""
if (env.MODULE && env.MODULE != "null") {
module = env.MODULE
}
wrap([$class: 'AnsiColorBuildWrapper', 'colorMapName': 'XTerm', 'defaultFg': 2, 'defaultBg': 1]) {
withFolderProperties {
def paramsMap = params.findAll { it.value?.trim() }.collectEntries { [(it.key): it.value] }
withCredentials([
string(credentialsId: 'AWS_ACCESS_KEY_ID', variable: 'AWS_ACCESS_KEY_ID'),
string(credentialsId: 'AWS_SECRET_ACCESS_KEY', variable: 'AWS_SECRET_ACCESS_KEY'),
string(credentialsId: 'AWS_SSH_PEM_KEY', variable: 'AWS_SSH_PEM_KEY'),
string(credentialsId: 'ADMIN_PASSWORD', variable: 'ADMIN_PASSWORD'),
string(credentialsId: 'RKE2_RHEL_PASSWORD', variable: 'RKE2_RHEL_PASSWORD'),
string(credentialsId: 'QASE_AUTOMATION_TOKEN', variable: 'QASE_AUTOMATION_TOKEN')
]) {
withEnv(paramsMap.collect { k, v -> "$k=$v" }) {
stage('Checkout') {
deleteDir()
checkout([
$class: 'GitSCM',
branches: [[name: "*/${branch}"]],
extensions: scm.extensions + [[$class: 'CleanCheckout']],
userRemoteConfigs: repo
])
}
stage('Create QASE Environment Variables') {
script {
def qase = 'REPORT_TO_QASE=' + env.REPORT_TO_QASE + '\n' +
'QASE_PROJECT_ID=' + env.QASE_PROJECT_ID + '\n' +
'QASE_RUN_ID=' + env.QASE_RUN_ID + '\n' +
'QASE_TEST_CASE_ID=' + env.QASE_TEST_CASE_ID + '\n' +
'QASE_AUTOMATION_TOKEN=' + env.QASE_AUTOMATION_TOKEN + '\n'
writeFile file: qaseEnvFile, text: qase
}
}
dir('./') {
try {
stage('Configure and Build') {
if (env.AWS_SSH_PEM_KEY && env.AWS_SSH_KEY_NAME) {
dir('./config/.ssh') {
def decoded = new String(AWS_SSH_PEM_KEY.decodeBase64())
writeFile file: 'aws_key.pem', text: decoded
}
}
dir('./config') {
//update info in .env file
def data = "ENV_PRODUCT=${env.PRODUCT_NAME}\nENV_TFVARS=${env.PRODUCT_NAME}.tfvars\n" +
"KUBE_CONFIG=${env.KUBE_CONFIG}\nBASTION_IP=${env.BASTION_IP}\nLOG_LEVEL=${env.LOG_LEVEL}\nINSTALL_VERSION=${env.INSTALL_VERSION}\n" +
"ENV_MODULE=${module}\nINSTALL_CHANNEL=${env.INSTALL_CHANNEL}\n"
//adding data to .env file
writeFile(file: '.env', text: data)
//update tfvars file
def version_param_name = "${env.PRODUCT_NAME}_version"
def channel_param_name = "${env.PRODUCT_NAME}_channel"
def filename = "${env.PRODUCT_NAME}.tfvars"
def configContents = env.TFVARS
writeFile file: filename, text: configContents +
"\n${version_param_name} = \"${INSTALL_VERSION}\"" +
"\n${channel_param_name} = \"${INSTALL_CHANNEL}\"" +
"\ninstall_mode = \"${INSTALL_MODE}\"" +
'\npassword = \"' + RKE2_RHEL_PASSWORD + '\"' +
'\nkey_name = \"' + AWS_SSH_KEY_NAME + '\"' +
'\naccess_key = \"/go/src/github.com/rancher/distros-test-framework/config/.ssh/aws_key.pem\"' +
'\nresource_name = \"' + HOSTNAME_PREFIX + '\"' +
"\nproduct = \"${env.PRODUCT_NAME}\""
def testdata = readFile(file: filename)
println('\n\nTFVARS TEST DATA')
println(testdata)
}
stage('Docker Build') {
sh './scripts/configure.sh'
sh './scripts/build.sh'
}
}
stage('Run TestCombination') {
sh """
docker run --name ${testContainer} -t \
--env-file ${envFile} \
--env-file ./config/.env \
--env-file ${qaseEnvFile} \
-e TEST_ARGS='${env.TEST_ARGS}' \
${imageName} sh -c "env && chmod 400 /go/src/github.com/rancher/distros-test-framework/config/.ssh/aws_key.pem && \
cd ./entrypoint && go test -timeout=${timeout} -v ./${env.TEST_DIRECTORY}/... ${env.TEST_ARGS.replace('\"', '\\\"')}"
"""
}
} finally {
stage('Cleanup') {
sh "docker stop ${testContainer} || true"
sh "docker rm -v ${testContainer} || true"
sh "docker rmi -f ${imageName} || true"
} // stage
} // finally
} // dir
} // withEnv
} // withCredentials
} // withFolderProperties
} // wrap
} // node