-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathJenkinsfile
382 lines (370 loc) · 19.4 KB
/
Jenkinsfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
pipeline {
agent {
label 'llrgrhgtrig.in2p3.fr'
}
environment {
LABEL_TEST='test'
LABEL_REF='ref'
CONFIG_SUBSET = 'default_multi_subset'
}
options {
skipDefaultCheckout()
}
stages {
stage('Set environment variables'){
steps{
sh '''
set +x
echo '==> Set environment variables'
exec >> log_Jenkins
if [ -f "log_Jenkins" ]; then
echo "Remove the last created log_Jenkins."
rm log_Jenkins
else
echo "log_Jenkins does not exist."
fi
echo '==> Set environment variables'
'''
script{
String s = env.JOB_NAME
String[] elements = s.split("/")
String job_name = elements[-2]
println(job_name);
switch(job_name){
case 'HGC TPG CMSSW Validation':
env.EMAIL_TO=env.HGCTPG_EMAIL_TO_MAIN
env.BASE_REMOTE=env.HGCTPG_BASE_REMOTE_MAIN
env.REMOTE_HGCTPGVAL=env.BASE_REMOTE
env.DATA_DIR=env.HGCTPG_DATA_DIR_MAIN
env.BRANCH_HGCTPGVAL=env.HGCTPG_BRANCH_VAL_MAIN
env.WEBPAGES_VAL=env.HGCTPG_WEBPAGES_VAL_CMSSW_PROD
env.JOB_FLAG=0
break
case 'HGC TPG Automatic Validation - TEST':
env.EMAIL_TO=env.HGCTPG_EMAIL_TO_EB
env.BASE_REMOTE=env.HGCTPG_BASE_REMOTE_TEST
env.REMOTE_HGCTPGVAL=env.BASE_REMOTE
env.DATA_DIR=env.HGCTPG_DATA_DIR_TEST
env.BRANCH_HGCTPGVAL=env.HGCTPG_BRANCH_VAL_TEST
env.WEBPAGES_VAL=env.HGCTPG_WEBPAGES_VAL_CMSSW_TEST
env.JOB_FLAG=0
break
case 'HGC TPG Automatic Validation - TEST ebecheva':
env.EMAIL_TO=env.HGCTPG_EMAIL_TO_EB
env.BASE_REMOTE=env.HGCTPG_BASE_REMOTE_EB
env.REMOTE_HGCTPGVAL=env.BASE_REMOTE
env.DATA_DIR=env.HGCTPG_DATA_DIR_EB
env.BRANCH_HGCTPGVAL=env.HGCTPG_BRANCH_VAL_EB
env.WEBPAGES_VAL=env.HGCTPG_WEBPAGES_VAL_CMSSW_TEST_EB
env.JOB_FLAG=0
break
case 'HGC TPG Automatic Validation - TEST jbsauvan':
env.EMAIL_TO=env.HGCTPG_EMAIL_TO_JB
env.BASE_REMOTE=env.HGCTPG_BASE_REMOTE_JB
env.REMOTE_HGCTPGVAL=env.BASE_REMOTE
env.DATA_DIR=env.HGCTPG_DATA_DIR_JB
env.BRANCH_HGCTPGVAL=env.HGCTPG_BRANCH_VAL_JB
env.WEBPAGES_VAL=env.HGCTPG_WEBPAGES_VAL_CMSSW_TEST_JB
env.JOB_FLAG=0
break
case 'HGC TPG Validation Validation':
env.EMAIL_TO=env.HGCTPG_EMAIL_TO_MAIN
env.BASE_REMOTE=env.HGCTPG_BASE_REMOTE_MAIN
env.DATA_DIR=env.HGCTPG_DATA_DIR_VALTEST
env.WEBPAGES_VAL=env.HGCTPG_WEBPAGES_VAL_CODE_TEST
env.JOB_FLAG=1
break
case 'HGC TPG Dev Validation - ebecheva':
env.EMAIL_TO=env.HGCTPG_EMAIL_TO_EB
env.BASE_REMOTE=env.HGCTPG_BASE_REMOTE_EB
env.DATA_DIR=env.HGCTPG_DATA_DIR_EB
env.WEBPAGES_VAL=env.HGCTPG_WEBPAGES_VAL_CMSSW_TEST_EB
env.JOB_FLAG=1
break
default:
println("The job name is unknown");
break
}
if (env.JOB_FLAG=='1'){
env.BRANCH_HGCTPGVAL=env.CHANGE_BRANCH
env.CHANGE_TARGET_HGCTPGVAL=env.CHANGE_TARGET
if (env.CHANGE_FORK){
env.REMOTE_HGCTPGVAL = env.CHANGE_FORK
}
else {
env.REMOTE_HGCTPGVAL = env.BASE_REMOTE
}
}
println(env.REMOTE_HGCTPGVAL)
println(env.BRANCH_HGCTPGVAL)
println(env.BASE_REMOTE)
println(env.DATA_DIR)
println(env.CHANGE_TARGET)
println(env.CHANGE_BRANCH)
println(env.CHANGE_URL)
println(env.CHANGE_FORK)
}
}
}
stage('Initialize'){
stages{
stage('Clean the working environment'){
steps{
sh '''
set +x
echo '==> Clean the working environment. ============================'
exec >> log_Jenkins
echo '==> Clean the working environment. ============================'
if [ -d "/data/jenkins/workspace/${DATA_DIR}/PR$CHANGE_ID" ]
then
rm -rf /data/jenkins/workspace/${DATA_DIR}/PR$CHANGE_ID
fi
echo ' '
'''
}
}
stage('Install automatic validation package HGCTPGValidation') {
steps {
sh '''
set +x
echo '==> Install automatic validation package HGCTPGValidation. ============================'
exec >> log_Jenkins
echo '==> Install automatic validation package HGCTPGValidation. ============================'
uname -a
whoami
pwd
ls -l
if [ -d "./HGCTPGValidation" ]
then
rm -rf HGCTPGValidation
fi
git clone -b ${BRANCH_HGCTPGVAL} https://github.com/${REMOTE_HGCTPGVAL}/HGCTPGValidation HGCTPGValidation
source HGCTPGValidation/env_install.sh
pip install attrs
if [ -d "./test_dir" ]
then
echo "Directory test_dir exists."
rm -rf test_dir
fi
mkdir test_dir
ls -lrt ..
echo ' '
'''
}
}
stage('Set CMSSW environment variables'){
steps{
script{
sh '''
set +x
echo 'echo ==> Set CMSSW environment variables. ============================'
exec >> log_Jenkins
echo 'echo ==> Set CMSSW environment variables. ============================'
'''
if ( env.JOB_FLAG == '0' ){
env.REF_RELEASE = sh(returnStdout: true, script: 'set +x exec >> log_Jenkins; source ./HGCTPGValidation/scripts/extractReleaseName.sh ${CHANGE_TARGET}').trim()
env.SCRAM_ARCH = sh(returnStdout: true, script: 'set +x exec >> log_Jenkins; source ./HGCTPGValidation/scripts/getScramArch.sh ${REF_RELEASE}').trim()
if (env.CHANGE_FORK){
env.REMOTE = env.CHANGE_FORK
}
else {
env.REMOTE = env.BASE_REMOTE
}
println(env.REF_RELEASE)
println(env.SCRAM_ARCH)
println(env.REMOTE)
}
else {
env.REF_BRANCH = sh(returnStdout: true, script: 'set +x exec >> log_Jenkins; module use /opt/exp_soft/vo.llr.in2p3.fr/modulefiles_el7/; module purge; module load python/3.9.9; python ./HGCTPGValidation/scripts/get_cmsswRefBranch.py').trim()
env.REF_RELEASE = sh(returnStdout: true, script: 'set +x exec >> log_Jenkins; source ./HGCTPGValidation/scripts/extractReleaseName.sh ${REF_BRANCH}').trim()
env.SCRAM_ARCH = sh(returnStdout: true, script: 'set +x exec >> log_Jenkins; source ./HGCTPGValidation/scripts/getScramArch.sh ${REF_RELEASE}').trim()
env.BASE_REMOTE = sh(returnStdout: true, script: 'set +x exec >> log_Jenkins; module use /opt/exp_soft/vo.llr.in2p3.fr/modulefiles_el7/; module purge; module load python/3.9.9; python ./HGCTPGValidation/scripts/get_remoteParam.py').trim()
env.CHANGE_BRANCH = env.REF_BRANCH
env.CHANGE_TARGET = env.REF_BRANCH
env.REMOTE = env.BASE_REMOTE
println(env.REF_BRANCH)
println(env.REF_RELEASE)
println(env.SCRAM_ARCH)
println(env.BASE_REMOTE)
println(env.REMOTE)
}
}
sh '''
set +x
exec >> log_Jenkins
echo ' '
'''
}
}
}
}
stage('Build CMSSW Test release'){
stages{
stage('Install'){
steps {
sh '''
set +x
echo '==> Build CMSSW Test ========================='
echo '===> InstallCMSSW Test Step'
exec >> log_Jenkins
echo '==> Build CMSSW Test ========================='
echo '===> InstallCMSSW Test Step'
pwd
cd test_dir
../HGCTPGValidation/scripts/installCMSSW.sh $SCRAM_ARCH $REF_RELEASE $REMOTE $BASE_REMOTE $CHANGE_BRANCH $CHANGE_TARGET ${LABEL_TEST}
echo ' '
'''
}
}
stage('Quality Checks'){
steps{
sh '''
set +x
echo '===> Quality checks'
exec >> log_Jenkins
echo '===> Quality checks'
source /cvmfs/cms.cern.ch/cmsset_default.sh
cd test_dir/${REF_RELEASE}_HGCalTPGValidation_${LABEL_TEST}/src
scram build code-checks
scram build code-format
GIT_STATUS=`git status --porcelain`
if [ ! -z "$GIT_STATUS" ]; then
echo "Code-checks or code-format failed."
exit 1;
fi
echo ' '
'''
}
}
stage('Produce'){
steps {
sh '''
set +x
echo '===> Produce test data.'
exec >> log_Jenkins
echo '===> Produce test data.'
pwd
cd test_dir/${REF_RELEASE}_HGCalTPGValidation_${LABEL_TEST}/src
module use /opt/exp_soft/vo.llr.in2p3.fr/modulefiles_el7/
module purge
module load python/3.9.9
python --version
echo ' CONFIG_SUBSET = ' ${CONFIG_SUBSET}
echo 'LABEL_TEST = ' ${LABEL_TEST}
echo 'SCRAM_ARCH = ' ${SCRAM_ARCH}
python ../../../HGCTPGValidation/scripts/produceData_multiconfiguration.py --subsetconfig ${CONFIG_SUBSET} --label ${LABEL_TEST}
echo ' '
'''
}
}
}
}
stage('Build CMSSW Ref release'){
stages{
stage('Install'){
steps {
sh '''
set +x
echo '==> Build CMSSW Reference ======================='
echo '===> InstallCMSSW Ref'
exec >> log_Jenkins
echo '==> Build CMSSW Reference ======================='
echo '===> InstallCMSSW Ref'
pwd
cd test_dir
../HGCTPGValidation/scripts/installCMSSW.sh $SCRAM_ARCH $REF_RELEASE $BASE_REMOTE $BASE_REMOTE $CHANGE_TARGET $CHANGE_TARGET ${LABEL_REF}
echo ' '
'''
}
}
stage('Produce'){
steps {
sh '''
set +x
echo '===> Produce reference data.'
exec >> log_Jenkins
echo '===> Produce reference data.'
pwd
cd test_dir/${REF_RELEASE}_HGCalTPGValidation_${LABEL_REF}/src
module use /opt/exp_soft/vo.llr.in2p3.fr/modulefiles_el7/
module purge
module load python/3.9.9
python --version
echo ' CONFIG_SUBSET = ' ${CONFIG_SUBSET}
python ../../../HGCTPGValidation/scripts/produceData_multiconfiguration.py --subsetconfig ${CONFIG_SUBSET} --label ${LABEL_REF}
echo ' '
'''
}
}
}
}
stage('Display') {
steps {
sh '''
set +x
echo '==> Display ======================='
exec >> log_Jenkins
echo '==> Display ======================='
cd test_dir
source ../HGCTPGValidation/env_install.sh
echo $PWD
python ../HGCTPGValidation/scripts/displayHistos.py --subsetconfig ${CONFIG_SUBSET} --refdir ${REF_RELEASE}_HGCalTPGValidation_${LABEL_REF}/src --testdir ${REF_RELEASE}_HGCalTPGValidation_${LABEL_TEST}/src --datadir ${DATA_DIR} --prnumber $CHANGE_ID --prtitle "$CHANGE_TITLE (from $CHANGE_AUTHOR, $CHANGE_URL)"
echo ' '
'''
}
}
}
post {
always {
script{
if ( env.JOB_FLAG=='1' ) {
env.CHANGE_BRANCH = env.BRANCH_HGCTPGVAL
env.CHANGE_TARGET = env.CHANGE_TARGET_HGCTPGVAL
println( "Validation of the validation: Set the original name of CHANGE_BRANCH => " + env.CHANGE_BRANCH )
}
def message = ""
if (currentBuild.result == 'SUCCESS') {
message = "The validation checks have passed." + "<br>" + "The comparison histograms are available [here](${env.WEBPAGES_VAL}list_config.php?pr=/PR$CHANGE_ID)"
} else if (currentBuild.result == 'FAILURE') {
message = "Some of the validation checks have failed." + "<br>" + "More details can be found [here](${env.CHANGE_URL}/checks)"
}
withEnv(["MESSAGE=${message}","url=${env.CHANGE_URL}"]) {
// Generate a token, the command "set +x" is mandatory
sh'set +x exec >> log_Jenkins; module use /opt/exp_soft/vo.llr.in2p3.fr/modulefiles_el7/; module purge; module load python/3.9.9; python /data/jenkins/workspace/create_token_hgc-tpg.py > /tmp/github_token'
sh '''
# This command is mandatory
set +x
# Compose the url to be used for printing the message in the GitHub PR thread
# In the string "url" replace "pull" with "issues" and add at the end "comments"
url_comments1="${url/pull/issues}/comments"
# In the string "url_comments1" replace "github.com" with "api.github.com/repos"
url_comments2="${url_comments1/github.com/api.github.com/repos}"
GITHUB_ACCESS_TOKEN=$(cat /tmp/github_token)
if [[ -z "${GITHUB_ACCESS_TOKEN}" ]]; then
echo 'The github access token has not been generated.'
else
curl -X POST -H "Authorization: Bearer $GITHUB_ACCESS_TOKEN " \
-H "Accept: application/vnd.github+json" \
-d "{\\"body\\": \\"$MESSAGE\\" }" \
$url_comments2
fi
rm -f /tmp/github_token
'''
}
}
archiveArtifacts artifacts: 'log_Jenkins', fingerprint: true
}
success {
echo 'The job finished successfully.'
mail to: "${EMAIL_TO}",
subject: "Jenkins job succeded: ${currentBuild.fullDisplayName}",
body: "The job finished successfully. \n\n Pull request: ${env.BRANCH_NAME} build number: #${env.BUILD_NUMBER} \n\n Title: ${env.CHANGE_TITLE} \n\n Author of the PR: ${env.CHANGE_AUTHOR} \n\n Target branch: ${env.CHANGE_TARGET} \n\n Feature branch: ${env.CHANGE_BRANCH} \n\n Check console output at ${env.BUILD_URL} \n\n and ${env.CHANGE_URL} to view the results. \n\n The validation histograms are available at ${env.WEBPAGES_VAL}list_config.php?pr=/PR$CHANGE_ID \n\n"
}
failure {
echo 'Job failed'
mail to: "${EMAIL_TO}",
subject: "Jenkins job failed: ${currentBuild.fullDisplayName}",
body: "The compilation or the build steps failed. \n\n Pull request: ${env.BRANCH_NAME} build number: #${env.BUILD_NUMBER} \n\n Title: ${env.CHANGE_TITLE} \n\n Author of the PR: ${env.CHANGE_AUTHOR} \n\n Target branch: ${env.CHANGE_TARGET} \n\n Feature branch: ${env.CHANGE_BRANCH} \n\n Check console output at ${env.BUILD_URL} \n\n and ${env.CHANGE_URL} to view the results. \n\n The validation histograms are available at ${env.WEBPAGES_VAL} \n\n"
}
}
}