| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you under the Apache License, Version 2.0 (the |
| // "License"); you may not use this file except in compliance |
| // with the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, |
| // software distributed under the License is distributed on an |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| // KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations |
| // under the License. |
| |
| def getGithubCreds() { |
| return [usernamePassword(credentialsId: 'apache-hadoop-at-github.com', |
| passwordVariable: 'GITHUB_TOKEN', |
| usernameVariable: 'GITHUB_USER')] |
| } |
| |
| // Publish JUnit results only if there are XML files under surefire-reports |
| def publishJUnitResults() { |
| def findCmdExitCode = sh script: "find ${SOURCEDIR} -wholename */target/surefire-reports/*.xml | egrep .", returnStatus: true |
| boolean surefireReportsExist = findCmdExitCode == 0 |
| if (surefireReportsExist) { |
| echo "XML files found under surefire-reports, running junit" |
| // The path should be relative to WORKSPACE for the junit. |
| SRC = "${SOURCEDIR}/**/target/surefire-reports/*.xml".replace("$WORKSPACE/","") |
| try { |
| junit "${SRC}" |
| } catch(e) { |
| echo 'junit processing: ' + e.toString() |
| } |
| } else { |
| echo "No XML files found under surefire-reports, skipping junit" |
| } |
| } |
| |
| pipeline { |
| agent { |
| label 'Windows' |
| } |
| |
| options { |
| buildDiscarder(logRotator(numToKeepStr: '15')) |
| timeout (time: 72, unit: 'HOURS') |
| timestamps() |
| checkoutToSubdirectory('src') |
| } |
| |
| environment { |
| YETUS='yetus' |
| // Branch or tag name. Yetus release tags are 'rel/X.Y.Z' |
| YETUS_VERSION='rel/0.14.0' |
| } |
| |
| parameters { |
| string(name: 'JIRA_ISSUE_KEY', |
| defaultValue: '', |
| description: 'The JIRA issue that has a patch needing pre-commit testing. Example: HADOOP-1234') |
| } |
| |
| stages { |
| stage ('Install Yetus') { |
| steps { |
| dir("${WORKSPACE}/${YETUS}") { |
| checkout([ |
| $class: 'GitSCM', |
| branches: [[name: "${env.YETUS_VERSION}"]], |
| userRemoteConfigs: [[ url: 'https://github.com/apache/yetus.git']]] |
| ) |
| } |
| } |
| } |
| |
| stage ('Windows 10') { |
| environment { |
| SOURCEDIR = "${WORKSPACE}/src" |
| PATCHDIR = "${WORKSPACE}/out" |
| DOCKERFILE = "${SOURCEDIR}/dev-support/docker/Dockerfile_windows_10" |
| DOCKER_BUILDKIT = 0 |
| IS_OPTIONAL = 0 |
| IS_NIGHTLY_BUILD = 0 |
| IS_WINDOWS = 1 |
| } |
| |
| steps { |
| withCredentials(getGithubCreds()) { |
| bat 'if not exist %WORKSPACE%\\out mkdir %WORKSPACE%\\out' |
| bat 'if not exist F:\\maven\\repository mkdir F:\\maven\\repository' |
| bat '''docker build --label org.apache.yetus=""^ |
| --label org.apache.yetus.testpatch.project=hadoop^ |
| --tag hadoop-windows-10-builder^ |
| -f %DOCKERFILE% %SOURCEDIR%\\dev-support\\docker''' |
| bat '''docker run --rm -v %WORKSPACE%\\out:C:\\out^ |
| -v %WORKSPACE%\\src:C:\\src^ |
| -v %WORKSPACE%\\yetus:C:\\yetus^ |
| -v F:\\maven\\repository:C:\\Users\\%BUILD_USER%\\.m2^ |
| -e BUILD_URL=%BUILD_URL% -e BRANCH_NAME=%BRANCH_NAME%^ |
| -e JOB_NAME=%JOB_NAME% -e JENKINS_URL=%JENKINS_URL%^ |
| -e CHANGE_URL=%CHANGE_URL% -e WORKSPACE=/c -e YETUS=yetus^ |
| -e BUILD_NUMBER=%BUILD_NUMBER% -e EXECUTOR_NUMBER=%EXECUTOR_NUMBER%^ |
| -e BUILD_ID=%BUILD_ID% -e GIT_COMMIT=%GIT_COMMIT%^ |
| -e NODE_NAME=%NODE_NAME% -e GIT_URL=%GIT_URL%^ |
| -e BUILD_TAG=%BUILD_TAG% -e GIT_BRANCH=%GIT_BRANCH%^ |
| -e PATCH_OR_ISSUE=%CHANGE_URL% -e JIRA_ISSUE_KEY=%JIRA_ISSUE_KEY%^ |
| -e IS_OPTIONAL=0 -e SOURCEDIR=/c/hadoop -e PATCHDIR=/c/out^ |
| -e GITHUB_TOKEN=%GITHUB_TOKEN% -e GITHUB_USER=%GITHUB_USER%^ |
| -e IS_NIGHTLY_BUILD=%IS_NIGHTLY_BUILD% -e IS_WINDOWS=%IS_WINDOWS%^ |
| -e BASH_EXECUTABLE=/c/Git/bin/bash.exe^ |
| -e VCPKG_INSTALLED_PACKAGES=/c/vcpkg/installed/x64-windows^ |
| -e CMAKE_TOOLCHAIN_FILE=/c/vcpkg/scripts/buildsystems/vcpkg.cmake^ |
| hadoop-windows-10-builder "/c" "xcopy" "/s" "/e" "/h" "/y" "/i" "/q" "C:\\src" "C:\\hadoop"^ |
| "&&" "C:\\Git\\bin\\bash.exe" "-c" \'"/c/src/dev-support/jenkins.sh" "run_ci"\' |
| ''' |
| } |
| } |
| |
| post { |
| always { |
| script { |
| bat '''docker run --rm --user ContainerAdministrator^ |
| -v %WORKSPACE%\\out:C:\\out^ |
| hadoop-windows-10-builder "/c" "icacls" "C:\\out" "/c" "/t" "/q" "/grant" "Users:F" |
| ''' |
| bat '''docker run --rm --user ContainerAdministrator^ |
| -v F:\\maven\\repository:C:\\Users\\%BUILD_USER%\\.m2^ |
| hadoop-windows-10-builder "/c" "icacls" "C:\\Users\\%BUILD_USER%\\.m2" "/c" "/t" "/q" "/grant" "Users:F" |
| ''' |
| |
| // Publish status if it was missed (YETUS-1059) |
| withCredentials( |
| [usernamePassword(credentialsId: '683f5dcf-5552-4b28-9fb1-6a6b77cf53dd', |
| passwordVariable: 'GITHUB_TOKEN', |
| usernameVariable: 'GITHUB_USER')]) { |
| bat '''docker run --rm -v %WORKSPACE%\\out:C:\\out^ |
| -v %WORKSPACE%\\src:C:\\src^ |
| -v %WORKSPACE%\\yetus:C:\\yetus^ |
| -v F:\\maven\\repository:C:\\Users\\%BUILD_USER%\\.m2^ |
| -e BUILD_URL=%BUILD_URL% -e BRANCH_NAME=%BRANCH_NAME%^ |
| -e JOB_NAME=%JOB_NAME% -e JENKINS_URL=%JENKINS_URL%^ |
| -e CHANGE_URL=%CHANGE_URL% -e WORKSPACE=/c -e YETUS=yetus^ |
| -e BUILD_NUMBER=%BUILD_NUMBER% -e EXECUTOR_NUMBER=%EXECUTOR_NUMBER%^ |
| -e BUILD_ID=%BUILD_ID% -e GIT_COMMIT=%GIT_COMMIT%^ |
| -e NODE_NAME=%NODE_NAME% -e GIT_URL=%GIT_URL%^ |
| -e BUILD_TAG=%BUILD_TAG% -e GIT_BRANCH=%GIT_BRANCH%^ |
| -e PATCH_OR_ISSUE=%CHANGE_URL% -e JIRA_ISSUE_KEY=%JIRA_ISSUE_KEY%^ |
| -e IS_OPTIONAL=0 -e SOURCEDIR=/c/hadoop -e PATCHDIR=/c/out^ |
| -e GITHUB_TOKEN=%GITHUB_TOKEN% -e GITHUB_USER=%GITHUB_USER%^ |
| -e IS_NIGHTLY_BUILD=%IS_NIGHTLY_BUILD% -e IS_WINDOWS=%IS_WINDOWS%^ |
| -e BASH_EXECUTABLE=/c/Git/bin/bash.exe^ |
| -e VCPKG_INSTALLED_PACKAGES=/c/vcpkg/installed/x64-windows^ |
| -e CMAKE_TOOLCHAIN_FILE=/c/vcpkg/scripts/buildsystems/vcpkg.cmake^ |
| hadoop-windows-10-builder "/c"^ |
| "C:\\Git\\bin\\bash.exe" "-c" \'"/c/src/dev-support/jenkins.sh" "github_status_recovery"\' |
| ''' |
| } |
| |
| archiveArtifacts "out/**" |
| |
| publishJUnitResults() |
| |
| // Publish the HTML report so that it can be looked at |
| // Has to be relative to WORKSPACE. |
| publishHTML (target: [ |
| allowMissing: true, |
| keepAll: true, |
| alwaysLinkToLastBuild: true, |
| // Has to be relative to WORKSPACE |
| reportDir: "out", |
| reportFiles: 'report.html', |
| reportName: 'Yetus Report' |
| ]) |
| } |
| } |
| |
| cleanup() { |
| script { |
| bat ''' |
| C:\\PROGRA~1\\Git\\bin\\bash.exe -c "chmod u+x ${SOURCEDIR}/dev-support/jenkins.sh" |
| C:\\PROGRA~1\\Git\\bin\\bash.exe -c "${SOURCEDIR}/dev-support/jenkins.sh cleanup_ci_proc" |
| ''' |
| } |
| } |
| } |
| } |
| } |
| |
| post { |
| // Jenkins pipeline jobs fill slaves on PRs without this :( |
| cleanup() { |
| script { |
| deleteDir() |
| } |
| } |
| } |
| } |