-
Notifications
You must be signed in to change notification settings - Fork 210
Jenkins Declartive Pipeline for CI with gfs/gefs multibuilds #2246
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
WalterKolczynski-NOAA
merged 472 commits into
NOAA-EMC:develop
from
TerrenceMcGuinness-NOAA:jenkins-pipeline
Feb 8, 2024
Merged
Changes from all commits
Commits
Show all changes
472 commits
Select commit
Hold shift + click to select a range
b62fac7
oops had a misspelling of gfsHOME
TerrenceMcGuinness-NOAA 129c135
put the actual build back in
TerrenceMcGuinness-NOAA 77d20dd
commented out sm and build
TerrenceMcGuinness-NOAA c9c3722
put back in scm and checkout to prime script locations on restart
TerrenceMcGuinness-NOAA cc57449
Merge branch 'NOAA-EMC:develop' into jenkins-pipeline
TerrenceMcGuinness-NOAA 64a37db
made two shared values between stages global in attempts to make pipe…
TerrenceMcGuinness-NOAA 2e69d59
Merge branch 'jenkins-pipeline' of github.com:TerrenceMcGuinness-NOAA…
TerrenceMcGuinness-NOAA a7ac197
Update ci_utils.sh
TerrenceMcGuinness-NOAA 154dd05
working on state added BUILD semaphore file in sorc dir
TerrenceMcGuinness-NOAA 8262741
reversed logic for BUILT file semaphore
TerrenceMcGuinness-NOAA 5a0c52a
added chmod x to sub scripts
TerrenceMcGuinness-NOAA bf8896b
needed to set HOMEgfs in run stub
TerrenceMcGuinness-NOAA 7e60d23
needed to set HOMEgfs in run stub and looking at pullRequest.labels.c…
TerrenceMcGuinness-NOAA 12e3126
typoed pslot in run check stub script
TerrenceMcGuinness-NOAA 8f8e892
hard coded node name
TerrenceMcGuinness-NOAA 94f8417
hard coded node names typo capped
TerrenceMcGuinness-NOAA 0489383
returnStdout on cat BUIT semaphore didnt save
TerrenceMcGuinness-NOAA 68d245b
added node properties
TerrenceMcGuinness-NOAA 0834c3f
restored configurable node
TerrenceMcGuinness-NOAA d76e1f1
moved parameters into options block
TerrenceMcGuinness-NOAA 5471c46
added just parameters section
TerrenceMcGuinness-NOAA 8d7d4b2
moved parameters into options
TerrenceMcGuinness-NOAA abb7470
parameters can not be in options
TerrenceMcGuinness-NOAA c46fdd6
removed class in parameters
TerrenceMcGuinness-NOAA 52bd973
added class in bracketrs
TerrenceMcGuinness-NOAA 6d0eb3a
removed double bracket
TerrenceMcGuinness-NOAA b6f7212
not sure how to hadd class
TerrenceMcGuinness-NOAA a94f2ce
still can not get syntax for parameters
TerrenceMcGuinness-NOAA 9ccf7bc
still not finding class
TerrenceMcGuinness-NOAA f4edcce
just removed class line
TerrenceMcGuinness-NOAA bd4d49c
moved properties into stage
TerrenceMcGuinness-NOAA 45a8a4d
moved properties into script in Run Seection
TerrenceMcGuinness-NOAA 5d29ceb
had machine instead of MACIHNE in node name
TerrenceMcGuinness-NOAA 734d4fc
added properties for epic nodes
TerrenceMcGuinness-NOAA 39529e5
needed to remove RUNTESTS dir on rebuild
TerrenceMcGuinness-NOAA 9d5ab04
added exit 1 to run stub
TerrenceMcGuinness-NOAA 4da660f
removed returnstatus flag on run stub
TerrenceMcGuinness-NOAA 9206156
Updated properties to my controler
TerrenceMcGuinness-NOAA 8715f57
Can not get parameteres to sork again
TerrenceMcGuinness-NOAA 859d7cb
added defaut slave as running one
TerrenceMcGuinness-NOAA 450bcab
added prop in create
TerrenceMcGuinness-NOAA fbbe569
added prop in create still brokek
TerrenceMcGuinness-NOAA a2226e2
still broken
TerrenceMcGuinness-NOAA 48a34d0
moved prop under get machine script
TerrenceMcGuinness-NOAA 2b7e941
made machine global
TerrenceMcGuinness-NOAA 38ad4b4
Label issue
TerrenceMcGuinness-NOAA 9e5dacf
removed Configuiration class
TerrenceMcGuinness-NOAA 2ef5a62
added stub logic
TerrenceMcGuinness-NOAA a2cef59
remove exit 0 on create exper wrapper because once worked
TerrenceMcGuinness-NOAA 8879946
two orion fake local adds
TerrenceMcGuinness-NOAA bf18bc8
added my spak python 3
TerrenceMcGuinness-NOAA 26a3512
got =~ backwards
TerrenceMcGuinness-NOAA 77af83d
explitly remove existing experment before re-running create
TerrenceMcGuinness-NOAA b6ffee9
hard coded HOMEgfs for testing
TerrenceMcGuinness-NOAA 7c7fbbe
testing on node hera not orion
TerrenceMcGuinness-NOAA 0638b6d
dump remove label constraint for now
TerrenceMcGuinness-NOAA 6fc3581
RUNTESTS was wrong and yes works
TerrenceMcGuinness-NOAA 35943ad
Merge branch 'NOAA-EMC:develop' into jenkins-pipeline
TerrenceMcGuinness-NOAA 4e807cc
removed hardcoded machine label on nodes
TerrenceMcGuinness-NOAA b66b9bc
restore away from local build cludges
TerrenceMcGuinness-NOAA 29d790c
some linting
TerrenceMcGuinness-NOAA 1b47f78
some eols
TerrenceMcGuinness-NOAA a30a555
wrong MACHINE in node label
TerrenceMcGuinness-NOAA ad1c71f
removed y pipe and added rm case in pipeline
TerrenceMcGuinness-NOAA 65cc185
removed DefaultSlave in parameters
TerrenceMcGuinness-NOAA 30dea74
added rm COMROOT line in pipeline
TerrenceMcGuinness-NOAA 8657be5
try var in param
TerrenceMcGuinness-NOAA 995b437
trying to add more choices
TerrenceMcGuinness-NOAA c2a9c86
add back real build run
TerrenceMcGuinness-NOAA 49a7f71
revert
TerrenceMcGuinness-NOAA bfb1ef4
ready to start testing stub pipeline with system build
TerrenceMcGuinness-NOAA a2e8f07
wrap a stages around build matrix stage
TerrenceMcGuinness-NOAA d1e2359
wrap matrix around build stage
TerrenceMcGuinness-NOAA 54baf54
needed axis not two axes
TerrenceMcGuinness-NOAA 04288ce
put matrix wrap in buid stage
TerrenceMcGuinness-NOAA b8b8070
still trying to get matrix hierachey to work
TerrenceMcGuinness-NOAA dcf7a87
system literal literal
TerrenceMcGuinness-NOAA 686be11
ws needed body
TerrenceMcGuinness-NOAA 81380a8
remove workspaces
TerrenceMcGuinness-NOAA e0a420f
WORKSPACE git just outside of build matrix in node
TerrenceMcGuinness-NOAA d9303a2
Added TESTDIR
TerrenceMcGuinness-NOAA 9b28ba3
deleted old script line
TerrenceMcGuinness-NOAA a6e0839
dir step needed bodey
TerrenceMcGuinness-NOAA 6687bd5
created dedicated stage for getting global workspace for the PR
TerrenceMcGuinness-NOAA 118d43d
made HOMEgfs local in matrix and removed from global
TerrenceMcGuinness-NOAA e601257
global HOME TESTDIR
TerrenceMcGuinness-NOAA c422f61
added local HOMEgfs and global HOME in Run Experiments
TerrenceMcGuinness-NOAA 86f2c90
updated TESTDIR to global HOME
TerrenceMcGuinness-NOAA 45601f5
remved stubs to run on Orion
TerrenceMcGuinness-NOAA 3146a39
need updated buid all args for gefs
TerrenceMcGuinness-NOAA 343020c
use old build all args for both systems
TerrenceMcGuinness-NOAA 508e354
removed stubs add all nodes with restart selector and put back label rm
TerrenceMcGuinness-NOAA 2b684c2
remove Running label without check
TerrenceMcGuinness-NOAA d80907a
Merge branch 'NOAA-EMC:develop' into jenkins-pipeline
TerrenceMcGuinness-NOAA 6775d49
add dir into sorc
TerrenceMcGuinness-NOAA 7856081
moved mkdir on RUNTESTS into top stage in Create Experments
TerrenceMcGuinness-NOAA 75bccbd
added entire stage to mkdir TESTDIR and update labels
TerrenceMcGuinness-NOAA b2b5243
added full path for dir() into sorc
TerrenceMcGuinness-NOAA 5965d86
reduced save to three
TerrenceMcGuinness-NOAA e22dffa
can not figure out why dir() is not working
TerrenceMcGuinness-NOAA b394c3a
added a few more degubs and . for pwd path
TerrenceMcGuinness-NOAA 9b02f36
added an explicit cd into the gfs/sorc dir to run build_all
TerrenceMcGuinness-NOAA c7053d1
fixed quote on echo PWD on script sh command line
TerrenceMcGuinness-NOAA 457b3d7
added explicit git command for updating submoules recursivly, scm was…
TerrenceMcGuinness-NOAA e9fbf93
Merge branch 'NOAA-EMC:develop' into jenkins-pipeline
TerrenceMcGuinness-NOAA 6acc918
added max jobs on build all to 4
TerrenceMcGuinness-NOAA 258e9c7
updated pipline with node on setup RUNDIR and removed system in run e…
TerrenceMcGuinness-NOAA 960e0fe
updated path of HOMEgfs in run check scripts using gfs as default
TerrenceMcGuinness-NOAA 0d09e5c
use HOME to point to RUNDIRS for run-check
TerrenceMcGuinness-NOAA 4eb89e2
add label updates back move archive to post
TerrenceMcGuinness-NOAA 2e159cd
added throttle to build
TerrenceMcGuinness-NOAA e1f054f
remove prop from throttle
TerrenceMcGuinness-NOAA 03b551f
moveed throttle inside options block of stage build
TerrenceMcGuinness-NOAA 2329c4a
updated fixed label check code
TerrenceMcGuinness-NOAA fc7a3a6
ndded script block in post always
TerrenceMcGuinness-NOAA 5c4d4a6
added confgired catigory to throttle
TerrenceMcGuinness-NOAA c0b386f
took out throttle option and added limit j to 2 on both concurrent bu…
TerrenceMcGuinness-NOAA e896a1c
made remove all labels with machine in post alwasy a conventional loop
TerrenceMcGuinness-NOAA ec432da
Update Jenkinsfile
TerrenceMcGuinness-NOAA e9a8e2c
Merge branch 'NOAA-EMC:develop' into jenkins-pipeline
TerrenceMcGuinness-NOAA 1890259
added to matrix builds to make it sequential and added yaml reads
TerrenceMcGuinness-NOAA f3be7f3
had extra values line in first matrix build
TerrenceMcGuinness-NOAA 8a26393
had an extra pasted GFS build
TerrenceMcGuinness-NOAA cbf32bc
added build yaml file in cases yamls
TerrenceMcGuinness-NOAA bed6fa8
variable key had to be imutable
TerrenceMcGuinness-NOAA e4426fc
testing imuable key
TerrenceMcGuinness-NOAA d8bbea9
testing yaml output
TerrenceMcGuinness-NOAA 4a03f87
traverse build args
TerrenceMcGuinness-NOAA 51ab85f
missed } on iter
TerrenceMcGuinness-NOAA f2a018a
use get in yaml
TerrenceMcGuinness-NOAA 59f7aee
try it key
TerrenceMcGuinness-NOAA 2910b53
just system
TerrenceMcGuinness-NOAA cbc9e22
to string
TerrenceMcGuinness-NOAA b373865
to string
TerrenceMcGuinness-NOAA a0fd397
still trying
TerrenceMcGuinness-NOAA 09d6eb8
still foo
TerrenceMcGuinness-NOAA 01e09ba
finally
TerrenceMcGuinness-NOAA bb7ff25
finally then trim
TerrenceMcGuinness-NOAA 0156747
finally then trim and nulls
TerrenceMcGuinness-NOAA e9a6b70
got args to work
TerrenceMcGuinness-NOAA c4dcbe6
put clone back in
TerrenceMcGuinness-NOAA ec6ba94
added back throttled build and removed second build block
TerrenceMcGuinness-NOAA 85522b7
removed extra leftover values line in build matrix
TerrenceMcGuinness-NOAA 1c77e99
removed non yaml lines from cases so snakeyaml could read it
TerrenceMcGuinness-NOAA 773164a
added override in create experment and removed stubed scripts
TerrenceMcGuinness-NOAA 9747d7a
moved scm after semephore test
TerrenceMcGuinness-NOAA 6d439b6
Update Jenkinsfile
TerrenceMcGuinness-NOAA a7ff014
Update Jenkinsfile
TerrenceMcGuinness-NOAA c2e0f82
Update Jenkinsfile
TerrenceMcGuinness-NOAA da9f7cd
added pre checkout in TESTDIR added source of gwsetup and changed fir…
TerrenceMcGuinness-NOAA 3662f07
added git to hera gw setup module load
TerrenceMcGuinness-NOAA 5c2eb59
made shallow checkout a function call
TerrenceMcGuinness-NOAA be7b72e
misplaced bracket in source of gw_setup
TerrenceMcGuinness-NOAA aeaa5cf
cd into TESTDIR for shallow clone
TerrenceMcGuinness-NOAA 8fa7868
moved git load on gwset hera because it is in the stack spac
TerrenceMcGuinness-NOAA 76f13ed
use shallow checkout and git submoudle recussive update directly
TerrenceMcGuinness-NOAA 2685a85
configured scm shallow and using git modules recursive from host
TerrenceMcGuinness-NOAA 0944fd4
still had shallow call and removed it
TerrenceMcGuinness-NOAA a1ba03b
put dir back at attempt to use ws
TerrenceMcGuinness-NOAA de514d9
take out pre checkout and just use submodule update directly
TerrenceMcGuinness-NOAA e866d28
Merge branch 'NOAA-EMC:develop' into jenkins-pipeline
TerrenceMcGuinness-NOAA a80666e
stub build all to just gdas
TerrenceMcGuinness-NOAA 2e43230
added git which and version for debugging
TerrenceMcGuinness-NOAA 5071db1
put buile lines back in build yaml
TerrenceMcGuinness-NOAA 948992c
added a second Jenkins file to test dynamic parallel build stages
TerrenceMcGuinness-NOAA e7790ee
removed Jenkinsfile2 to put it into its own repo
TerrenceMcGuinness-NOAA 29f61f1
adding deleteDir to get scm to checkout again
TerrenceMcGuinness-NOAA 74ff699
adding build stubs
TerrenceMcGuinness-NOAA 2978c6c
adding build stubs again
TerrenceMcGuinness-NOAA af48ce8
forgot to add build.yaml updates
TerrenceMcGuinness-NOAA 348c758
put throttle back and updated build args for gefs
TerrenceMcGuinness-NOAA a0386ed
use rsync to get clones before submodules
TerrenceMcGuinness-NOAA 417688c
update rsync line
TerrenceMcGuinness-NOAA 44b13e3
Merge branch 'NOAA-EMC:develop' into jenkins-pipeline
TerrenceMcGuinness-NOAA 240a262
revert to scm and comment out disable current builds
TerrenceMcGuinness-NOAA a185aa4
Merge branch 'jenkins-pipeline' of github.com:TerrenceMcGuinness-NOAA…
TerrenceMcGuinness-NOAA 3799584
Update Jenkinsfile
TerrenceMcGuinness-NOAA afc6342
added checkoutsubdir
TerrenceMcGuinness-NOAA 8e7e5b3
added checkoutsubdir
TerrenceMcGuinness-NOAA 511ee95
extra bracket
TerrenceMcGuinness-NOAA 3b3ebc0
moved options
TerrenceMcGuinness-NOAA 600cd19
add no scm in exp
TerrenceMcGuinness-NOAA 297a842
devult no scm others
TerrenceMcGuinness-NOAA a4174f5
put throuttle back in
TerrenceMcGuinness-NOAA 74dbb16
try chaning workspace to get scm to checkout on second parallel matri…
TerrenceMcGuinness-NOAA 881697f
added stubs for build all to test the Jenkins scm issue
TerrenceMcGuinness-NOAA b6f0129
removed throttle option for testing scm
TerrenceMcGuinness-NOAA 213f6e4
Update ci/scripts/utils/ci_utils.sh
TerrenceMcGuinness-NOAA 2d7e17b
Update ci/scripts/utils/ci_utils.sh
TerrenceMcGuinness-NOAA 86722b0
Update ci/scripts/utils/ci_utils.sh
TerrenceMcGuinness-NOAA ef1112f
Update ci/scripts/utils/ci_utils.sh
TerrenceMcGuinness-NOAA 0448492
Update modulefiles/module_gwsetup.hera.lua
TerrenceMcGuinness-NOAA 62fe054
took out throuttle and put checkout subdir back
TerrenceMcGuinness-NOAA d305dda
Merge branch 'jenkins-pipeline' of github.com:TerrenceMcGuinness-NOAA…
TerrenceMcGuinness-NOAA 45b87fa
update build args for faster buld tests
TerrenceMcGuinness-NOAA e7ecc8f
took stub to create tests and put the action back
TerrenceMcGuinness-NOAA d2a7b51
Merge branch 'NOAA-EMC:develop' into jenkins-pipeline
TerrenceMcGuinness-NOAA a238eda
put throttle back and took out -j 2
TerrenceMcGuinness-NOAA fc3d5e8
Merge branch 'jenkins-pipeline' of github.com:TerrenceMcGuinness-NOAA…
TerrenceMcGuinness-NOAA 7099e77
put concurrancy back in for the matrixed build stage because the scm …
TerrenceMcGuinness-NOAA 25893ae
moved mkdir out of Setup RUNTESTS because it the agent options was no…
TerrenceMcGuinness-NOAA 5ce3116
added explcit workspaces in create and using gfs as default for running
TerrenceMcGuinness-NOAA 245a5fb
added explcit workspaces in create and using gfs as default for running
TerrenceMcGuinness-NOAA 0bd51ed
took out case and put in if else in cancel_batch_jobs (for now)
TerrenceMcGuinness-NOAA cc6af42
missed bracket at end of cancel_batch_jobs in ci utils
TerrenceMcGuinness-NOAA 5c5e860
add true to return status on run-check because it through that peski …
TerrenceMcGuinness-NOAA 743e842
update all Jenkins script calls to returnStatus true and put full tes…
TerrenceMcGuinness-NOAA 01298bb
adding with credentials
TerrenceMcGuinness-NOAA 0a32c5b
stub create
TerrenceMcGuinness-NOAA 5bf9d34
add short list for exper
TerrenceMcGuinness-NOAA b74d982
added withCredntials in all three post sections
TerrenceMcGuinness-NOAA 04b3ed8
took out create experments stub
TerrenceMcGuinness-NOAA 0f96056
put back in full test list for overnight run
TerrenceMcGuinness-NOAA 9f67ef0
Merge branch 'NOAA-EMC:develop' into jenkins-pipeline
TerrenceMcGuinness-NOAA 271a453
Update Jenkinsfile
TerrenceMcGuinness-NOAA 9bd850b
add agent to post block
343c8df
move post into Run Tests block
a57e4af
stubbed out create expermentens again
967bb6d
took out sub for create and made case short list
0ec0b6f
removed setup block
5914683
just do one test
9b83735
added back buildDiscarder
970e73b
commented out remove label in build
23fad4c
removed redundent checkout in subdir and commentout gitHub access aft…
4b8bec7
added ws with github creditials
db37fe0
misspelled WORKSPACE
682186d
missed a MACIHNE left in
8aa8b02
took timer out of Get Common
ed0562b
updated machine names to Machine in labels missed
d94a873
added commonworkspace in build update labels
5c04148
updated workspace in post to be the same in the matrix that ran the s…
8cf8a2a
remove local varible scope on HOMEgfs in Run experments in hopes it w…
68503b7
Merge branch 'NOAA-EMC:develop' into jenkins-pipeline
TerrenceMcGuinness-NOAA 1964247
updated Machine in a label and in PR comments
8d66bcb
Merge branch 'jenkins-pipeline' of https://github.com/TerrenceMcGuinn…
b2c3c31
only replaced commonworkspace with HOMEgfs workspace in build matrix
12ec362
added info in Running message to use in GitHub PR
eb9e48f
put missing values line back in experments matrix
b0dab47
added u to gfs build and put all tests back in
9bb5c97
added a stubbed version of the Jenkinsfiel for testing
44947e0
put a try around removelabel in all
0f0df62
took pslot out for stubbing
5629890
added back just build to stub
89954dd
removed build non stub and made stub again
1ae8f43
added only buils scripts but disabled otherwise scan poll
3c83d6f
remove nested ws in build
2338e9a
added comments in Jenkinsfile
62ef2a4
added some markdown formatting in GitHub messages
cbc1bbe
updated some markdown formatting in main GitHub PR message
c8c4838
updated format with one more <br>
TerrenceMcGuinness-NOAA File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,188 @@ | ||
| def Machine = 'none' | ||
| def machine = 'none' | ||
| def HOME = 'none' | ||
| def localworkspace = 'none' | ||
| def commonworkspace = 'none' | ||
|
|
||
| pipeline { | ||
| agent { label 'built-in' } | ||
|
|
||
| options { | ||
| skipDefaultCheckout() | ||
| buildDiscarder(logRotator(numToKeepStr: '2')) | ||
| } | ||
|
|
||
| stages { // This initial stage is used to get the Machine name from the GitHub labels on the PR | ||
| // which is used to designate the Nodes in the Jenkins Controler by the agent label | ||
| // Each Jenknis Node is connected to said machine via an JAVA agent via an ssh tunnel | ||
|
|
||
| stage('Get Machine') { | ||
| agent { label 'built-in' } | ||
| steps { | ||
| script { | ||
| localworkspace = env.WORKSPACE | ||
| machine = 'none' | ||
| for (label in pullRequest.labels) { | ||
| echo "Label: ${label}" | ||
| if ((label.matches("CI-Hera-Ready"))) { | ||
| machine = 'hera' | ||
| } else if ((label.matches("CI-Orion-Ready"))) { | ||
| machine = 'orion' | ||
| } else if ((label.matches("CI-Hercules-Ready"))) { | ||
| machine = 'hercules' | ||
| } | ||
| } // createing a second machine varible with first letter capital | ||
| // because the first letter of the machine name is captitalized in the GitHub labels | ||
| Machine = machine[0].toUpperCase() + machine.substring(1) | ||
| } | ||
| } | ||
| } | ||
|
|
||
| stage('Get Common Workspace') { | ||
| agent { label "${machine}-emc" } | ||
| steps { | ||
| script { | ||
| properties([parameters([[$class: 'NodeParameterDefinition', allowedSlaves: ['built-in','Hera-EMC','Orion-EMC'], defaultSlaves: ['built-in'], name: '', nodeEligibility: [$class: 'AllNodeEligibility'], triggerIfResult: 'allCases']])]) | ||
| HOME = "${WORKSPACE}/TESTDIR" | ||
| commonworkspace = "${WORKSPACE}" | ||
| sh( script: "mkdir -p ${HOME}/RUNTESTS", returnStatus: true) | ||
| pullRequest.addLabel("CI-${Machine}-Building") | ||
| if ( pullRequest.labels.any{ value -> value.matches("CI-${Machine}-Ready") } ) { | ||
| pullRequest.removeLabel("CI-${Machine}-Ready") | ||
| } | ||
| } | ||
| } | ||
| } | ||
|
|
||
| stage('Build System') { | ||
| matrix { | ||
| agent { label "${machine}-emc" } | ||
| //options { | ||
| // throttle(['global_matrix_build']) | ||
| //} | ||
| axes { | ||
| axis { | ||
| name "system" | ||
| values "gfs", "gefs" | ||
| } | ||
| } | ||
| stages { | ||
| stage("build system") { | ||
| steps { | ||
| script { | ||
| def HOMEgfs = "${HOME}/${system}" // local HOMEgfs is used to build the system on per system basis under the common workspace HOME | ||
| sh( script: "mkdir -p ${HOMEgfs}", returnStatus: true) | ||
| ws(HOMEgfs) { | ||
| env.MACHINE_ID = machine // MACHINE_ID is used in the build scripts to determine the machine and is added to the shell environment | ||
| if (fileExists("${HOMEgfs}/sorc/BUILT_semaphor")) { // if the system is already built, skip the build in the case of re-runs | ||
| sh( script: "cat ${HOMEgfs}/sorc/BUILT_semaphor", returnStdout: true).trim() // TODO: and user configurable control to manage build semphore | ||
| ws(commonworkspace) { pullRequest.comment("Cloned PR already built (or build skipped) on ${machine} in directory ${HOMEgfs}") } | ||
| } else { | ||
| checkout scm | ||
| sh( script: "source workflow/gw_setup.sh;which git;git --version;git submodule update --init --recursive", returnStatus: true) | ||
| def builds_file = readYaml file: "ci/cases/yamls/build.yaml" | ||
| def build_args_list = builds_file['builds'] | ||
| def build_args = build_args_list[system].join(" ").trim().replaceAll("null", "") | ||
| dir("${HOMEgfs}/sorc") { | ||
| sh( script: "${build_args}", returnStatus: true) | ||
| sh( script: "./link_workflow.sh", returnStatus: true) | ||
| sh( script: "echo ${HOMEgfs} > BUILT_semaphor", returnStatus: true) | ||
| } | ||
| } | ||
| if ( pullRequest.labels.any{ value -> value.matches("CI-${Machine}-Building") } ) { | ||
| pullRequest.removeLabel("CI-${Machine}-Building") | ||
| } | ||
| pullRequest.addLabel("CI-${Machine}-Running") | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
|
|
||
| stage('Run Tests') { | ||
| matrix { | ||
| agent { label "${machine}-emc" } | ||
| axes { | ||
| axis { | ||
| name "Case" | ||
| values "C48_ATM", "C48_S2SWA_gefs", "C48_S2SW", "C96_atm3DVar" // TODO add dynamic list of cases from env vars (needs addtional plugins) | ||
| } | ||
| } | ||
| stages { | ||
| stage('Create Experiment') { | ||
| steps { | ||
| script { | ||
| sh( script: "sed -n '/{.*}/!p' ${HOME}/gfs/ci/cases/pr/${Case}.yaml > ${HOME}/gfs/ci/cases/pr/${Case}.yaml.tmp", returnStatus: true) | ||
| def yaml_case = readYaml file: "${HOME}/gfs/ci/cases/pr/${Case}.yaml.tmp" | ||
| system = yaml_case.experiment.system | ||
| def HOMEgfs = "${HOME}/${system}" // local HOMEgfs is used to populate the XML on per system basis | ||
| env.RUNTESTS = "${HOME}/RUNTESTS" | ||
| sh( script: "${HOMEgfs}/ci/scripts/utils/ci_utils_wrapper.sh create_experiment ${HOMEgfs}/ci/cases/pr/${Case}.yaml", returnStatus: true) | ||
| } | ||
| } | ||
| } | ||
| stage('Run Experiments') { | ||
| steps { | ||
| script { | ||
| HOMEgfs = "${HOME}/gfs" // common HOMEgfs is used to launch the scripts that run the experiments | ||
| ws(HOMEgfs) { | ||
| pslot = sh( script: "${HOMEgfs}/ci/scripts/utils/ci_utils_wrapper.sh get_pslot ${HOME}/RUNTESTS ${Case}", returnStdout: true ).trim() | ||
| pullRequest.comment("**Running experiments: ${Case} on ${Machine}**<br>Built against system **${system}** in directory:<br>`${HOMEgfs}`<br>With the experiment in directory:<br>`${HOME}/RUNTESTS/${pslot}`") | ||
| try { | ||
| sh( script: "${HOMEgfs}/ci/scripts/run-check_ci.sh ${HOME} ${pslot}", returnStatus: true) | ||
| } catch (Exception e) { | ||
| pullRequest.comment("**FAILURE** running experiments: ${Case} on ${Machine}") | ||
| error("Failed to run experiments ${Case} on ${Machine}") | ||
| } | ||
| pullRequest.comment("**SUCCESS** running experiments: ${Case} on ${Machine}") | ||
| } | ||
| } | ||
| } | ||
| post { | ||
| always { | ||
| script { | ||
| ws (HOMEgfs) { | ||
| for (label in pullRequest.labels) { | ||
| if (label.contains("${Machine}")) { | ||
| pullRequest.removeLabel(label) | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| success { | ||
| script { | ||
| ws (HOMEgfs) { | ||
| pullRequest.addLabel("CI-${Machine}-Passed") | ||
| def timestamp = new Date().format("MM dd HH:mm:ss", TimeZone.getTimeZone('America/New_York')) | ||
| pullRequest.comment("**CI SUCCESS** ${Machine} at ${timestamp}\n\nBuilt and ran in directory `${HOME}`") | ||
| } | ||
| } | ||
| } | ||
| failure { | ||
| script { | ||
| ws (HOMEgfs) { | ||
| pullRequest.addLabel("CI-${Machine}-Failed") | ||
| def timestamp = new Date().format("MM dd HH:mm:ss", TimeZone.getTimeZone('America/New_York')) | ||
| pullRequest.comment("**CI FAILED** ${Machine} at ${timestamp}<br>Built and ran in directory `${HOME}`") | ||
| if (fileExists('${HOME}/RUNTESTS/ci.log')) { | ||
| def fileContent = readFile '${HOME}/RUNTESTS/ci.log' | ||
| fileContent.eachLine { line -> | ||
| if( line.contains(".log")) { | ||
| archiveArtifacts artifacts: "${line}", fingerprint: true | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
|
|
||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| builds: | ||
| - gefs: './build_all.sh' | ||
| - gfs: './build_all.sh -gu' |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,24 +1,120 @@ | ||
| #!/bin/env bash | ||
|
|
||
| function cancel_slurm_jobs() { | ||
| function determine_scheduler() { | ||
| if command -v sbatch &> /dev/null; then | ||
| echo "slurm"; | ||
| elif command -v qsub &> /dev/null; then | ||
| echo "torque"; | ||
| else | ||
| echo "unknown" | ||
| fi | ||
| } | ||
|
|
||
| # Usage: cancel_slurm_jobs <substring> | ||
| # Example: cancel_slurm_jobs "C48_ATM_3c4e7f74" | ||
| function cancel_batch_jobs() { | ||
|
|
||
| # Usage: cancel_batch_jobs <substring> | ||
| # Example: cancel_batch_jobs "C48_ATM_3c4e7f74" | ||
| # | ||
| # Cancel all Slurm jobs that have the given substring in their name | ||
| # Cancel all batch jobs that have the given substring in their name | ||
| # So like in the example all jobs with "C48_ATM_3c4e7f74" | ||
| # in their name will be canceled | ||
|
|
||
| local substring=$1 | ||
| local job_ids | ||
| job_ids=$(squeue -u "${USER}" -h -o "%i") | ||
|
|
||
| for job_id in ${job_ids}; do | ||
| job_name=$(sacct -j "${job_id}" --format=JobName%100 | head -3 | tail -1 | sed -r 's/\s+//g') || true | ||
| if [[ "${job_name}" =~ ${substring} ]]; then | ||
| echo "Canceling Slurm Job ${job_name} with: scancel ${job_id}" | ||
| scancel "${job_id}" | ||
| continue | ||
| fi | ||
| done | ||
|
|
||
| scheduler=$(determine_scheduler) | ||
|
|
||
| if [[ "${schduler}" == "torque" ]]; then | ||
| job_ids=$(qstat -u "${USER}" | awk '{print $1}') || true | ||
|
|
||
| for job_id in ${job_ids}; do | ||
| job_name=$(qstat -f "${job_id}" | grep Job_Name | awk '{print $3}') || true | ||
| if [[ "${job_name}" =~ ${substring} ]]; then | ||
| echo "Canceling PBS Job ${job_name} with: qdel ${job_id}" | ||
| qdel "${job_id}" | ||
| continue | ||
| fi | ||
| done | ||
|
|
||
| elif [[ "${scheduler}" == "slurm" ]]; then | ||
|
|
||
| job_ids=$(squeue -u "${USER}" -h -o "%i") | ||
|
|
||
| for job_id in ${job_ids}; do | ||
| job_name=$(sacct -j "${job_id}" --format=JobName%100 | head -3 | tail -1 | sed -r 's/\s+//g') || true | ||
| if [[ "${job_name}" =~ ${substring} ]]; then | ||
| echo "Canceling Slurm Job ${job_name} with: scancel ${job_id}" | ||
| scancel "${job_id}" | ||
| continue | ||
| fi | ||
| done | ||
|
|
||
| else | ||
| echo "FATAL: Unknown/unsupported job scheduler" | ||
| exit 1 | ||
| fi | ||
|
TerrenceMcGuinness-NOAA marked this conversation as resolved.
|
||
| } | ||
|
|
||
|
|
||
| function get_pr_case_list () { | ||
|
|
||
| ############################################################# | ||
| # loop over every yaml file in the PR's ci/cases | ||
| # and create an run directory for each one for this PR loop | ||
| ############################################################# | ||
| for yaml_config in "${HOMEgfs}/ci/cases/pr/"*.yaml; do | ||
| case=$(basename "${yaml_config}" .yaml) || true | ||
| echo "${case}" | ||
| done | ||
| } | ||
|
|
||
| function get_pslot_list () { | ||
|
|
||
| local RUNTESTS="${1}" | ||
|
|
||
| ############################################################# | ||
| # loop over expdir directories in RUNTESTS | ||
| # and create list of the directory names (pslot) with the hash tag | ||
| ############################################################# | ||
| for pslot_dir in "${RUNTESTS}/EXPDIR/"*; do | ||
| pslot=$(basename "${pslot_dir}") || true | ||
| echo "${pslot}" | ||
| done | ||
|
|
||
| } | ||
|
|
||
| function get_pslot () { | ||
|
|
||
| local RUNTESTS="${1}" | ||
| local case="${2}" | ||
|
|
||
| ############################################################# | ||
| # loop over expdir directories in RUNTESTS | ||
| # and return the name of the pslot with its tag that matches the case | ||
| ############################################################# | ||
| for pslot_dir in "${RUNTESTS}/EXPDIR/"*; do | ||
| pslot=$(basename "${pslot_dir}") | ||
| check_case=$(echo "${pslot}" | rev | cut -d"_" -f2- | rev) || true | ||
| if [[ "${check_case}" == "${case}" ]]; then | ||
| echo "${pslot}" | ||
| break | ||
| fi | ||
| done | ||
|
|
||
| } | ||
|
|
||
| function create_experiment () { | ||
|
|
||
| local yaml_config="${1}" | ||
| cd "${HOMEgfs}" || exit 1 | ||
| pr_sha=$(git rev-parse --short HEAD) | ||
| case=$(basename "${yaml_config}" .yaml) || true | ||
| export pslot=${case}_${pr_sha} | ||
|
|
||
| source "${HOMEgfs}/ci/platforms/config.${MACHINE_ID}" | ||
| source "${HOMEgfs}/workflow/gw_setup.sh" | ||
|
|
||
| # system=$(grep "system:" "${yaml_config}" | cut -d":" -f2 | tr -d " ") || true | ||
|
|
||
| "${HOMEgfs}/${system}/workflow/create_experiment.py" --overwrite --yaml "${yaml_config}" | ||
|
|
||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,9 @@ | ||
| #!/usr/bin/env bash | ||
|
|
||
| HOMEgfs="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." >/dev/null 2>&1 && pwd )" | ||
| source "${HOMEgfs}/ush/detect_machine.sh" | ||
|
|
||
| utitilty_function="${1}" | ||
|
|
||
| source "${HOMEgfs}/ci/scripts/utils/ci_utils.sh" | ||
|
|
||
| ${utitilty_function} "${@:2}" | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.