diff --git a/.test-infra/jenkins/common_job_properties.groovy b/.test-infra/jenkins/common_job_properties.groovy index c9e48fd815c14..08c883d8d6cbc 100644 --- a/.test-infra/jenkins/common_job_properties.groovy +++ b/.test-infra/jenkins/common_job_properties.groovy @@ -77,11 +77,28 @@ class common_job_properties { daysToKeep(14) } + context.parameters { + // This is a recommended setup if you want to run the job manually. The + // ${gitrepo} parameter needs to be provided, and defaults to the main repo. + stringParam( + 'gitrepo', + scmUrl, + 'Git repository to build.') + + // This is a recommended setup if you want to run the job manually. The + // ${sha1} parameter needs to be provided, and defaults to the main branch. + stringParam( + 'sha1', + defaultBranch, + 'Commit id or refname (eg: origin/pr/9/head) you want to build.') + } + + // Source code management. context.scm { git { remote { - url(scmUrl) + url('${gitrepo}') refspec('+refs/heads/*:refs/remotes/origin/* ' + '+refs/pull/${ghprbPullId}/*:refs/remotes/origin/pr/${ghprbPullId}/*') } @@ -92,15 +109,6 @@ class common_job_properties { } } - context.parameters { - // This is a recommended setup if you want to run the job manually. The - // ${sha1} parameter needs to be provided, and defaults to the main branch. - stringParam( - 'sha1', - defaultBranch, - 'Commit id or refname (eg: origin/pr/9/head) you want to build.') - } - context.wrappers { // Abort the build if it's stuck for more minutes than specified. timeout { diff --git a/.test-infra/jenkins/job_pulsar_precommit_integrationtests.groovy b/.test-infra/jenkins/job_pulsar_precommit_integrationtests.groovy new file mode 100644 index 0000000000000..7a084185bee02 --- /dev/null +++ b/.test-infra/jenkins/job_pulsar_precommit_integrationtests.groovy @@ -0,0 +1,67 @@ +/** + * 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. + */ +import common_job_properties + +// This is the Java precommit which runs a maven install, and the current set of precommit tests. +freeStyleJob('pulsar_precommit_integrationtests') { + description('precommit integration test verification for pull requests of Apache Pulsar.') + + // Set common parameters. + common_job_properties.setTopLevelMainJobProperties(delegate) + + // Sets that this is a PreCommit job. + common_job_properties.setPreCommit(delegate, 'Integration Tests') + + steps { + shell('tests/scripts/pre-integ-tests.sh') + + // Build everything + maven { + // Set Maven parameters. + common_job_properties.setMavenConfig(delegate) + + goals('-B clean install -Pdocker') + properties(skipTests: true, interactiveMode: false) + } + + maven { + // Set Maven parameters. + common_job_properties.setMavenConfig(delegate) + rootPOM('tests/pom.xml') + goals('-B test -DintegrationTests') + } + + shell('tests/scripts/post-integ-tests.sh') + } + + publishers { + archiveArtifacts { + allowEmpty(true) + pattern('**/target/container-logs/**') + // archiveJunit doesn't capture everything, so copy these files + pattern('**/surefire-reports/TEST-*.xml') + pattern('**/surefire-reports/*.txt') + // pre and post scripts should output to .debug-info files if needed + pattern('*.debug-info') + } + archiveJunit('**/surefire-reports/TEST-*.xml') { + allowEmptyResults(true) + } + } +} diff --git a/tests/scripts/post-integ-tests.sh b/tests/scripts/post-integ-tests.sh new file mode 100755 index 0000000000000..8af7ab8b91441 --- /dev/null +++ b/tests/scripts/post-integ-tests.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +# +# 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. +# + +set -ex +kill $(cat docker-log.pid) || true diff --git a/tests/scripts/pre-integ-tests.sh b/tests/scripts/pre-integ-tests.sh new file mode 100755 index 0000000000000..e5dec320d2334 --- /dev/null +++ b/tests/scripts/pre-integ-tests.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +# +# 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. +# + +set -ex +id +ulimit -a +pwd +df -h +ps -eo euser,pid,ppid,pgid,start,pcpu,pmem,cmd +docker network prune -f --filter name=pulsarnet_* +docker system events > docker.debug-info & echo $! > docker-log.pid +