aboutsummaryrefslogtreecommitdiff
path: root/utils/mangle-jobs/README
diff options
context:
space:
mode:
Diffstat (limited to 'utils/mangle-jobs/README')
-rw-r--r--utils/mangle-jobs/README92
1 files changed, 0 insertions, 92 deletions
diff --git a/utils/mangle-jobs/README b/utils/mangle-jobs/README
deleted file mode 100644
index 70f01da..0000000
--- a/utils/mangle-jobs/README
+++ /dev/null
@@ -1,92 +0,0 @@
-Intro
------
-mangle-jobs is a scripting framework to perform mass migration of Jenkins
-job definitions. The motivataion for such script is that, the way
-linaro-android-cloud-buildd is used, all (or large cluster) of jobs
-represent the same type of build process, just parameterized with
-specific settings (Android and toolchain versions, etc.) Thus, many
-changes needed - for example, exporting additional build artifact, or
-enabling some plugin - should be applied to all jobs (or large subset)
-at the same time. Having an automated scripting framework for such
-migrations saves from doing time-consuming and error-prone manual changes
-via Jenkins UI for lot of jobs. The drawback is that migration is performed
-on the XML-encoded content, so some development and XML processing
-familiarity is required. However, due to XPath and LXML library which
-implements its support, migration development is sufficiently easy, and
-there's growing collection of existing migrations scripts, to serve
-as example and templates for new usecases.
-
-mangle-jobs script
-------------------
-mangle-jobs script allows to run a "mangle" (migration) script for all
-jobs present in Jenkins and submit results back to server for permanent
-storage. A mangle script operates on an XML representation of job config,
-and can apply arbitrary Python algorithm to it (including conditionals
-to apply to a subset of jobs). Besides production mode of updating jobs
-in a networked Jenkins server, mangle-jobs also offers extensive dry-run
-and testing capabilities, suitable for mangle script development and
-pre-production testing.
-
-Mangle script development workflow
-----------------------------------
-Basic mangle-jobs workflow is as follows:
-
-1. Figure out what XML changes must be performed. For example, select
-a particular job in Jenkins, make a backup copy of its config, make
-needed changes via Jenkins UI, and diff job config against the backup
-copy.
-
-2. Find existing mangle script performing changes close to ones needed.
-As noted above, there's a good selection of such scripts, and it makes
-little sense to develop a new script from scratch, this is perfect
-example when program-by-example technique helps.
-
-3. Make a copy of template you found and make needed changes.
-
-4. Take the config backup copy you made earlier and run mangle-jobs on it
-in test mode:
-
-$ ./mangle-jobs <your_script.mangle> --file=<config_backup.xml>
-
-You will see a textual diff of old and new config, highlighting the changes
-your script made. Verify that they are as expected, and repeat from step 3
-if needed.
-
-5. You are ready to perform en-masse pre-production test now. You should have
-Jenkins username with appropriate permissions and its password or API key
-(recommended) handy. The API key can found in Jenkins by clicking you username
-in the top right corner, then Configure in menu. Password/API key will be
-prompted on teh console. If you really need that, you can put the credential
-in the file and refer to it with --passwd-file=<passwd_file> to avoid
-interactive prompts.
-
-$ ./mangle-jobs --user=<user> <your_script.mangle>
-
-This will run your script repeatedly for each job store in Jenkins server and
-will show aggregated diff output. Review it carefully to watch for anomalities
-and corner cases. Repeat from step 3 if needed.
-
-6. Once you're absolutely sure that the changes performed by your mangle script
-are correct, run it in the production update mode:
-
-$ ./mangle-jobs --user=<user> <your_script.mangle> --really
-
-Mangle script details
----------------------
-A mangle script is standalone Python module. It should define a function
-mangle(), accepting single parameter - elemnt tree, parsed from XML job
-config with lxml.etree.fromstring(). The function should perform needed
-transformation on the tree (in place).
-
-To get speciifics of command-line arguments and options, run mangle-jobs
-with --help option.
-
-Known issues
-------------
-XML dialects produced by Jenkins and by mangle-jobs tool may not necessarily
-match. This means that while they may match with respect to underlying XML
-syntax (node structure and content), their textual representation may be
-different, leading to spurious differences in test run output. There's
-ongoing effort to make output XML rendition of mangle-jobs correspond to
-the dialect used by Jenkins, but there still may be spurious change noise
-in the output.