[
https://ovirt-jira.atlassian.net/browse/OVIRT-2254?page=com.atlassian.jir...
]
Barak Korren updated OVIRT-2254:
--------------------------------
Description: "Create a set of jobs and groovy functions that will enable one
Jenkins master to borrow slaves from another Jenkins master.\r\n\r\nh3. Acceptance
criteria\r\n# We define a borrower and a borrowing Jenkins instances. Ans support the use
case where both are the same instance\r\n# Borrowing is done by setting up a JNLP
connection from the slave of the borrower instance to to borrowing instance.\r\n# On the
borrower instance:\r\n## We have a \"borrow\" job that:\r\n##* Takes slave
requirement details, allocates a matching slaves and make it connect via JNLP to the
borrowing instance\r\n##* If all matching slaves are already borrowed by other instances,
try to call the garbage collector jobs (see below) on borrowing instances to free the
slaves.\r\n## We have a \"return\" job that is called by a borrowing instance to
return a slave\r\n# On the borrowing instance\r\n## STDCI tries to borrow slaves from a
predefined instance if not matching slaves are available locally\r\n## Once borrowed -
slaves stay attached to the borrowing instance so they can be reused by other STDCI
jobs.\r\n## We have a \"garbage collector\" job that is triggered periodically
or by the borrower instance. It looks at borrowed slaves, and frees ones that were not
used recently.\r\n\r\n" (was: Create a set of jobs and groovy functions that will
enable one Jenkins master to borrow slaves from another Jenkins master.
h3. Acceptance criteria
# Create a job that allows another Jenkins instance to borrow a slave from the instance
the job runs on. The job will:
#* Take the following parameters:
#** The IP and JNLP port of the Jenkins that is borrowing the slave
#** The JNLP secret to register to the Jenkins that is borrowing the slave
#** A YAML/JSON structure with node requirements that includes:
#*** A *kind* field set to "{{stdci_node_req}}"
#*** An *apiVersion* field set to "{{1}}".
#*** The project *name*.
#*** The project *clone_ur*, *branch* and *refspec*.
#*** The STDCI thread *stage*, *substage*, *distro* and *arch*.
#*** The STDCI *runtime_requirements*.
#* Attempt to find a slave meeting the specified requirements
#* If slave found:
#** Set it to be used only with matching label expressions
#** Label it with "borrowed"
#** Start the JNLP client on the slave to make it connect to the borrowing Jenkins
#** Archive an artifact containing the name on the slave.
#** Finish successfully
#* If slave not found - finish with an error.
# Create a groovy function to be used from STDCI to borrow a slave. The function will:
#* Allocate a JNLP node record for the new slave witha random temporary name starting
with "borrowed_" to get a JNLP secret.
#* Set a random label to the node record
#* Launch the borrow slave job on a remote Jenkins instance that can be configured in JJB
YAML by using the "Parametrized Remote Trigger" plugin
#* If the job is successful:
#** Rename the node record to the name of the slave we get from the artifact created by
the borrow slave job with the 'borrowed_' prefix added.
#** Return the random label allocated to it
# Create a job that makes a jenkins instance release slaves it borrowed )
Create slave borrowing flow
---------------------------
Key: OVIRT-2254
URL:
https://ovirt-jira.atlassian.net/browse/OVIRT-2254
Project: oVirt - virtualization made easy
Issue Type: New Feature
Components: Jenkins Master, Jenkins Slaves
Reporter: Barak Korren
Assignee: infra
Create a set of jobs and groovy functions that will enable one Jenkins master to borrow
slaves from another Jenkins master.
h3. Acceptance criteria
# We define a borrower and a borrowing Jenkins instances. Ans support the use case where
both are the same instance
# Borrowing is done by setting up a JNLP connection from the slave of the borrower
instance to to borrowing instance.
# On the borrower instance:
## We have a "borrow" job that:
##* Takes slave requirement details, allocates a matching slaves and make it connect via
JNLP to the borrowing instance
##* If all matching slaves are already borrowed by other instances, try to call the
garbage collector jobs (see below) on borrowing instances to free the slaves.
## We have a "return" job that is called by a borrowing instance to return a
slave
# On the borrowing instance
## STDCI tries to borrow slaves from a predefined instance if not matching slaves are
available locally
## Once borrowed - slaves stay attached to the borrowing instance so they can be reused
by other STDCI jobs.
## We have a "garbage collector" job that is triggered periodically or by the
borrower instance. It looks at borrowed slaves, and frees ones that were not used
recently.
--
This message was sent by Atlassian Jira
(v1001.0.0-SNAPSHOT#100087)