Skip to content

Commit 23f1703

Browse files
authored
[ci] support timeout per stages (#877)
1 parent 127059b commit 23f1703

File tree

1 file changed

+134
-132
lines changed

1 file changed

+134
-132
lines changed

Jenkinsfile

Lines changed: 134 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ pipeline {
2727
PIP_CACHE = "${env.WORKSPACE}/.cache"
2828
}
2929
options {
30-
timeout(time: 1, unit: 'HOURS')
3130
buildDiscarder(logRotator(numToKeepStr: '20', artifactNumToKeepStr: '20', daysToKeepStr: '30'))
3231
timestamps()
3332
ansiColor('xterm')
@@ -47,9 +46,9 @@ pipeline {
4746
}
4847
stages {
4948
stage('Initializing'){
50-
options { skipDefaultCheckout() }
51-
environment {
52-
PATH = "${env.WORKSPACE}/.local/bin:${env.WORKSPACE}/bin:${env.PATH}"
49+
options {
50+
skipDefaultCheckout()
51+
timeout(time: 1, unit: 'HOURS')
5352
}
5453
stages {
5554
/**
@@ -80,6 +79,9 @@ pipeline {
8079
}
8180
}
8281
}
82+
environment {
83+
PATH = "${env.WORKSPACE}/.local/bin:${env.WORKSPACE}/bin:${env.PATH}"
84+
}
8385
steps {
8486
withGithubNotify(context: 'Sanity checks', tab: 'tests') {
8587
deleteDir()
@@ -95,148 +97,148 @@ pipeline {
9597
}
9698
}
9799
}
98-
}
99-
}
100-
/**
101-
Execute unit tests.
102-
*/
103-
stage('Test') {
104-
options { skipDefaultCheckout() }
105-
when {
106-
beforeAgent true
107-
allOf {
108-
expression { return env.ONLY_DOCS == "false" }
109-
expression { return params.tests_ci }
110-
}
111-
}
112-
steps {
113-
withGithubNotify(context: 'Test', tab: 'tests') {
114-
deleteDir()
115-
unstash "source"
116-
dir("${BASE_DIR}"){
117-
script {
118-
// To enable the full test matrix upon GitHub PR comments
119-
def frameworkFile = '.ci/.jenkins_framework.yml'
120-
if (env.GITHUB_COMMENT?.contains('full tests')) {
121-
log(level: 'INFO', text: 'Full test matrix has been enabled.')
122-
frameworkFile = '.ci/.jenkins_framework_full.yml'
123-
}
124-
pythonTasksGen = new PythonParallelTaskGenerator(
125-
xKey: 'PYTHON_VERSION',
126-
yKey: 'FRAMEWORK',
127-
xFile: ".ci/.jenkins_python.yml",
128-
yFile: frameworkFile,
129-
exclusionFile: ".ci/.jenkins_exclude.yml",
130-
tag: "Python",
131-
name: "Python",
132-
steps: this
133-
)
134-
def mapParallelTasks = pythonTasksGen.generateParallelTests()
100+
/**
101+
Execute unit tests.
102+
*/
103+
stage('Test') {
104+
options { skipDefaultCheckout() }
105+
when {
106+
beforeAgent true
107+
allOf {
108+
expression { return env.ONLY_DOCS == "false" }
109+
expression { return params.tests_ci }
110+
}
111+
}
112+
steps {
113+
withGithubNotify(context: 'Test', tab: 'tests') {
114+
deleteDir()
115+
unstash "source"
116+
dir("${BASE_DIR}"){
117+
script {
118+
// To enable the full test matrix upon GitHub PR comments
119+
def frameworkFile = '.ci/.jenkins_framework.yml'
120+
if (env.GITHUB_COMMENT?.contains('full tests')) {
121+
log(level: 'INFO', text: 'Full test matrix has been enabled.')
122+
frameworkFile = '.ci/.jenkins_framework_full.yml'
123+
}
124+
pythonTasksGen = new PythonParallelTaskGenerator(
125+
xKey: 'PYTHON_VERSION',
126+
yKey: 'FRAMEWORK',
127+
xFile: ".ci/.jenkins_python.yml",
128+
yFile: frameworkFile,
129+
exclusionFile: ".ci/.jenkins_exclude.yml",
130+
tag: "Python",
131+
name: "Python",
132+
steps: this
133+
)
134+
def mapParallelTasks = pythonTasksGen.generateParallelTests()
135135

136-
// Let's now enable the windows stages
137-
readYaml(file: '.ci/.jenkins_windows.yml')['windows'].each { v ->
138-
def description = "${v.VERSION}-${v.WEBFRAMEWORK}"
139-
mapParallelTasks["windows-${description}"] = generateStepForWindows(v)
136+
// Let's now enable the windows stages
137+
readYaml(file: '.ci/.jenkins_windows.yml')['windows'].each { v ->
138+
def description = "${v.VERSION}-${v.WEBFRAMEWORK}"
139+
mapParallelTasks["windows-${description}"] = generateStepForWindows(v)
140+
}
141+
parallel(mapParallelTasks)
142+
}
140143
}
141-
parallel(mapParallelTasks)
142144
}
143145
}
144-
}
145-
}
146-
post {
147-
always {
148-
convergeCoverage()
149-
generateResultsReport()
150-
}
151-
}
152-
}
153-
stage('Building packages') {
154-
options { skipDefaultCheckout() }
155-
environment {
156-
PATH = "${env.WORKSPACE}/.local/bin:${env.WORKSPACE}/bin:${env.PATH}"
157-
}
158-
when {
159-
beforeAgent true
160-
allOf {
161-
expression { return env.ONLY_DOCS == "false" }
162-
expression { return params.package_ci }
163-
}
164-
}
165-
steps {
166-
withGithubNotify(context: 'Building packages') {
167-
deleteDir()
168-
unstash 'source'
169-
dir("${BASE_DIR}"){
170-
sh script: 'pip3 install --user cibuildwheel', label: "Installing cibuildwheel"
171-
sh script: 'mkdir wheelhouse', label: "creating wheelhouse"
172-
sh script: 'cibuildwheel --platform linux --output-dir wheelhouse; ls -l wheelhouse'
146+
post {
147+
always {
148+
convergeCoverage()
149+
generateResultsReport()
150+
}
173151
}
174-
stash allowEmpty: true, name: 'packages', includes: "${BASE_DIR}/wheelhouse/*.whl,${BASE_DIR}/dist/*.tar.gz", useDefaultExcludes: false
175152
}
176-
}
177-
}
178-
stage('Integration Tests') {
179-
agent none
180-
when {
181-
beforeAgent true
182-
allOf {
183-
expression { return env.ONLY_DOCS == "false" }
184-
anyOf {
185-
changeRequest()
186-
expression { return !params.Run_As_Master_Branch }
153+
stage('Building packages') {
154+
options { skipDefaultCheckout() }
155+
environment {
156+
PATH = "${env.WORKSPACE}/.local/bin:${env.WORKSPACE}/bin:${env.PATH}"
157+
}
158+
when {
159+
beforeAgent true
160+
allOf {
161+
expression { return env.ONLY_DOCS == "false" }
162+
expression { return params.package_ci }
163+
}
164+
}
165+
steps {
166+
withGithubNotify(context: 'Building packages') {
167+
deleteDir()
168+
unstash 'source'
169+
dir("${BASE_DIR}"){
170+
sh script: 'pip3 install --user cibuildwheel', label: "Installing cibuildwheel"
171+
sh script: 'mkdir wheelhouse', label: "creating wheelhouse"
172+
sh script: 'cibuildwheel --platform linux --output-dir wheelhouse; ls -l wheelhouse'
173+
}
174+
stash allowEmpty: true, name: 'packages', includes: "${BASE_DIR}/wheelhouse/*.whl,${BASE_DIR}/dist/*.tar.gz", useDefaultExcludes: false
175+
}
187176
}
188177
}
189-
}
190-
steps {
191-
build(job: env.ITS_PIPELINE, propagate: false, wait: false,
192-
parameters: [string(name: 'INTEGRATION_TEST', value: 'Python'),
193-
string(name: 'BUILD_OPTS', value: "--with-agent-python-flask --python-agent-package git+https://github.com/${env.CHANGE_FORK?.trim() ?: 'elastic' }/${env.REPO}.git@${env.GIT_BASE_COMMIT} --opbeans-python-agent-branch ${env.GIT_BASE_COMMIT}"),
194-
string(name: 'GITHUB_CHECK_NAME', value: env.GITHUB_CHECK_ITS_NAME),
195-
string(name: 'GITHUB_CHECK_REPO', value: env.REPO),
196-
string(name: 'GITHUB_CHECK_SHA1', value: env.GIT_BASE_COMMIT)])
197-
githubNotify(context: "${env.GITHUB_CHECK_ITS_NAME}", description: "${env.GITHUB_CHECK_ITS_NAME} ...", status: 'PENDING', targetUrl: "${env.JENKINS_URL}search/?q=${env.ITS_PIPELINE.replaceAll('/','+')}")
198-
}
199-
}
200-
stage('Benchmarks') {
201-
agent { label 'metal' }
202-
options { skipDefaultCheckout() }
203-
environment {
204-
AGENT_WORKDIR = "${env.WORKSPACE}/${env.BUILD_NUMBER}/${env.BASE_DIR}"
205-
LANG = 'C.UTF-8'
206-
LC_ALL = "${env.LANG}"
207-
PATH = "${env.WORKSPACE}/.local/bin:${env.WORKSPACE}/bin:${env.PATH}"
208-
}
209-
when {
210-
beforeAgent true
211-
allOf {
212-
anyOf {
213-
branch 'master'
214-
expression { return params.Run_As_Master_Branch }
215-
expression { return env.GITHUB_COMMENT?.contains('benchmark tests') }
178+
stage('Integration Tests') {
179+
agent none
180+
when {
181+
beforeAgent true
182+
allOf {
183+
expression { return env.ONLY_DOCS == "false" }
184+
anyOf {
185+
changeRequest()
186+
expression { return !params.Run_As_Master_Branch }
187+
}
188+
}
189+
}
190+
steps {
191+
build(job: env.ITS_PIPELINE, propagate: false, wait: false,
192+
parameters: [string(name: 'INTEGRATION_TEST', value: 'Python'),
193+
string(name: 'BUILD_OPTS', value: "--with-agent-python-flask --python-agent-package git+https://github.com/${env.CHANGE_FORK?.trim() ?: 'elastic' }/${env.REPO}.git@${env.GIT_BASE_COMMIT} --opbeans-python-agent-branch ${env.GIT_BASE_COMMIT}"),
194+
string(name: 'GITHUB_CHECK_NAME', value: env.GITHUB_CHECK_ITS_NAME),
195+
string(name: 'GITHUB_CHECK_REPO', value: env.REPO),
196+
string(name: 'GITHUB_CHECK_SHA1', value: env.GIT_BASE_COMMIT)])
197+
githubNotify(context: "${env.GITHUB_CHECK_ITS_NAME}", description: "${env.GITHUB_CHECK_ITS_NAME} ...", status: 'PENDING', targetUrl: "${env.JENKINS_URL}search/?q=${env.ITS_PIPELINE.replaceAll('/','+')}")
216198
}
217-
expression { return params.bench_ci }
218199
}
219-
}
220-
steps {
221-
withGithubNotify(context: 'Benchmarks', tab: 'artifacts') {
222-
dir(env.BUILD_NUMBER) {
223-
deleteDir()
224-
unstash 'source'
225-
script {
226-
dir(BASE_DIR){
227-
sendBenchmarks.prepareAndRun(secret: env.BENCHMARK_SECRET, url_var: 'ES_URL',
228-
user_var: 'ES_USER', pass_var: 'ES_PASS') {
229-
sh 'scripts/run-benchmarks.sh "${AGENT_WORKDIR}" "${ES_URL}" "${ES_USER}" "${ES_PASS}"'
200+
stage('Benchmarks') {
201+
agent { label 'metal' }
202+
options { skipDefaultCheckout() }
203+
environment {
204+
AGENT_WORKDIR = "${env.WORKSPACE}/${env.BUILD_NUMBER}/${env.BASE_DIR}"
205+
LANG = 'C.UTF-8'
206+
LC_ALL = "${env.LANG}"
207+
PATH = "${env.WORKSPACE}/.local/bin:${env.WORKSPACE}/bin:${env.PATH}"
208+
}
209+
when {
210+
beforeAgent true
211+
allOf {
212+
anyOf {
213+
branch 'master'
214+
expression { return params.Run_As_Master_Branch }
215+
expression { return env.GITHUB_COMMENT?.contains('benchmark tests') }
216+
}
217+
expression { return params.bench_ci }
218+
}
219+
}
220+
steps {
221+
withGithubNotify(context: 'Benchmarks', tab: 'artifacts') {
222+
dir(env.BUILD_NUMBER) {
223+
deleteDir()
224+
unstash 'source'
225+
script {
226+
dir(BASE_DIR){
227+
sendBenchmarks.prepareAndRun(secret: env.BENCHMARK_SECRET, url_var: 'ES_URL',
228+
user_var: 'ES_USER', pass_var: 'ES_PASS') {
229+
sh 'scripts/run-benchmarks.sh "${AGENT_WORKDIR}" "${ES_URL}" "${ES_USER}" "${ES_PASS}"'
230+
}
231+
}
230232
}
231233
}
232234
}
233235
}
234-
}
235-
}
236-
post {
237-
always {
238-
catchError(message: 'deleteDir failed', buildResult: 'SUCCESS', stageResult: 'UNSTABLE') {
239-
deleteDir()
236+
post {
237+
always {
238+
catchError(message: 'deleteDir failed', buildResult: 'SUCCESS', stageResult: 'UNSTABLE') {
239+
deleteDir()
240+
}
241+
}
240242
}
241243
}
242244
}

0 commit comments

Comments
 (0)