-
-
Notifications
You must be signed in to change notification settings - Fork 101
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
Standardize and document a labelling scheme for Jenkins nodes #93
Comments
ci.sponsor.ibm |
Thanks for bringing order the chaos @smlambert ! I'm +1 to the idea of structured labels.
So your list, updated with those comments for your consideration, becomes: hw.arch.s390x hw.endian.le hw.bits.64 hw.cpu.xx sw.os.rhel.6 sw.tool.gcc.xx (where xx represents version number) ci.role.perf |
I like your suggestions @tellison 👍 You are correct that writing a script that looks for a label named "sw.tool.docker" would not find a machine only labelled as sw.tool.docker.1_7_1 (and bear in mind, we may decide in this discussion that we do not care about version numbers at all for some tools/categories), but in the case where I am writing a script for a job that doesn't care what version, but just wants any machine that has docker installed, it would look for label.contains("sw.tool.docker") or label.startsWith("sw.tool.docker"), rather than label.equals("sw.tool.docker")... I have also had the discussion with others regarding what if I am looking for a machine with memory or version greater than a certain value, and well, yes, as labels are returned as a string, I have to take the string and parse it and assign that memory or version portion to an int to compare it, but its scriptable... For the hw labels like disk, memory etc, there are some tests that are designed to run on machines with a certain number of cores, or on machines with a certain amount of memory, but agreed, that if we decide we want these labels, it should be clear from the name what is meant by them, or best not to have them at all. and as for turning chaos into order, I am mostly hoping for something more intuitive and useful than to refer to a map to know what machines I can use, a map that starts with the sentence, "if you are reading this, then our ... labels and ... nodes are a mystery to you..." eek! |
I'd personally rather ditch the hierarchy, but maybe that's just me. |
Thanks @sxa555, I definitely have a use case for querying for all tools on a given machine, (so return all sw.tools.* per machine, where I may not know the set of tools in the list of labels (especially if some have been newly added via ansible and (eventually) automatically added to Jenkins node via its API), to be able to ask for each specifically. Though to your point wouldn't need the deep hierarchy there, could just have tools.docker, etc. But this hierarchy also serves as guidance for where to add new labels and is generally benign/inoffensive for anyone not writing scripts that use them and possibly addresses some future uses of these categories. "Print me today's map of the Jenkins machine farm" - what hardware is represented in it? what software? etc. |
perhaps https://ci-jck.adoptopenjdk.net/ would be a good test bed to setup a labelling scheme that we could then migrate to our main jenkins? |
So I'm kind of with @sxa555 on this..... all of this My proposed schema is as follows but I am happy to modify/add labels if people are unhappy:
|
schema - "a representation of a plan in the form of an outline or model", "organizes categories of information and the relationships among them" The point of the 'fluff' is to organize labels into categories AND to make it clear how to add more labels as we grow and end up needing more labels. It enforces naming, that will help avoid label name conflicts later (when teams/companies want to merge their new features into this build farm). I have worked on several projects where a schema was not put in place, and they end poorly, with a flat list of less than meaningful words (of a variety of styles, depending on who added them becoming more irregular as time marches on, since there is no obvious guidance or pattern to follow). I am not sure I understand why the resistance to fluff. The fluff does not really cost anyone anything, since on label producer side, you have automated the labelling (therefore do not have to type in long names) and on the label consumer side, pipeline scripts are set up to use the labels, clarity in naming, make it easier to understand why a particular script is looking for a particular label. I am happy to keep the list of labels to a minimum (only adding labels that will be 'consumed' by some script or job), but I think the labels should exemplify the 'plan'. For the flat list |
the build scripts currently all use this schema |
I like the updated list based on @tellison comments, with one addition...technically the arch ppcle does not exist. Arch and endian...no?? I am not fond of the idea of labels that mean the same thing. What is the difference between x64 and x86_64? I'm not saying your use of them is invalid, I'm just interested in why one or the other. Is |
okay so are we happy with a schema based on #93 (comment)? |
Ok, let me clean it up, and document where I think we are at (in a README or Wiki on this repo). I will not remove any currently labelling at present. We can overlay the new schema, and switch testing over, then build scripts, then remove labels. I don't mind going around and doing the clean up of this over the next week or 2. I also amend my initial statement about adding labels that are not used. I think we should add only those labels we actively need to differentiate machines, adding new ones only as needed. |
Working on the doc here (will replace jpg with better image shortly): Note that I still need to go and look at all of the 'consumers' of existing labels, to ensure we start with the minimal set based on usage. This implies that we can and possibly should fix scripts that could be more logically correct (which I will do as I find them). I believe some of the label needs relate to restrictions around where you can build and subsequently run some of the linux builds (due to 'compile on lowest version of gcc available' story). Unclear if the linux flavours labels are used elsewhere either. |
added csz25088.canlab.ibm.com ansible_host=9.23.30.88 adoptium#93
Hi all - did we come to a consensus here? |
On the test side, we have. We have in the sense that I have labelled all of the test machines with the labels I proposed and have been using those labels for a while. This allows us to use the test CI scripts at Adopt and a few other Jenkins servers / open projects that follow the same labelling schema. Because I was not sure of consensus, I have not:
|
@smlambert can you open a PR for a Doc that has the schema that was decided upon. That will be easier to reference than trying to figure out which comment in this issue is the most correct version. I could do it if you wish but I know you were working on a doc already (don't want to step on any toes). |
Sure, will do @AdamBrousseau, thanks for the nudge! |
- Change aix,ppcle,390 - Remove ubuntu version - Update to hierarchical labels based on standardized schema defined in adoptium/infrastructure#93 - Also remove nestmates spec which was added by default (eclipse-openj9#2270) Issue eclipse-openj9#1562 [skip ci] Signed-off-by: Adam Brousseau <adam.brousseau88@gmail.com>
- Conform to label convention outlined in adoptium/infrastructure#93 Signed-off-by: Adam Brousseau <adam.brousseau@ca.ibm.com>
- Conform to label convention outlined in adoptium/infrastructure#93 Signed-off-by: Adam Brousseau <adam.brousseau@ca.ibm.com>
As we add more machines, and write more pipeline scripts for various builds and tests in Jenkins, it is useful to settle on a labelling scheme that will allow us flexibility and improved machine management (even taking advantage of some of the Jenkins APIs for automated labelling).
Benefits to having and documenting a 'scheme':
I suggest the schema 'tree' below, categorizing under 3 top-level roots, hw, sw, and ci (continuous integration catch-all, for all groupings not hw or sw), each with its own sub-categories.
hw.platform.zlinux
xlinux
plinux
windows
aix
zos
osx
hw.arch.s390
ppc
x86
hw.endian.le
hw.bits.64bit
32bit
hw.physical.cpu.xx
disk.xx
memory.xx
sw.os.rhel.6
sw.os.rhel.7
sw.os.ubuntu.14
sw.os.ubuntu.16
sw.os.sles.11
sw.os.sles.12
sw.os.aix.6
sw.os.aix.7
sw.os.osx.10
sw.os.windows.8
sw.os.windows.10
sw.os.zos.1_13 (where dotted version numbers represented by _ )
sw.os.zos.2_1
sw.tool.gcc.xx (where xx represents version number)
sw.tool.docker.xx
sw.tool.hypervisor.kvm, etc
ci.role.perf
ci.role.compile
ci.role.test
ci.role.test.jck
We could just start with the labels that are of direct use to build/test scripts and add as we see the need.
Do people have strong thoughts on the matter? In general, labels are of no consequence to people unless they are writing scripts and/or adding builds to Jenkins, so if you are actively working on builds, please share your thoughts. Thanks.
The text was updated successfully, but these errors were encountered: