Update pipeline documentation to describe user-provided scripts
This commit is contained in:
		| @@ -122,6 +122,10 @@ pipeline jobs. | |||||||
| Concretizes the specs in the active environment, stages them (as described in | Concretizes the specs in the active environment, stages them (as described in | ||||||
| :ref:`staging_algorithm`), and writes the resulting ``.gitlab-ci.yml`` to disk. | :ref:`staging_algorithm`), and writes the resulting ``.gitlab-ci.yml`` to disk. | ||||||
|  |  | ||||||
|  | This sub-command takes two arguments, but the most useful is ``--output-file``, | ||||||
|  | which should be an absolute path (including file name) to the generated | ||||||
|  | pipeline, if the default (``./.gitlab-ci.yml``) is not desired. | ||||||
|  |  | ||||||
| .. _cmd-spack-ci-rebuild: | .. _cmd-spack-ci-rebuild: | ||||||
|  |  | ||||||
| ^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^ | ||||||
| @@ -132,6 +136,10 @@ This sub-command is responsible for ensuring a single spec from the release | |||||||
| environment is up to date on the remote mirror configured in the environment, | environment is up to date on the remote mirror configured in the environment, | ||||||
| and as such, corresponds to a single job in the ``.gitlab-ci.yml`` file. | and as such, corresponds to a single job in the ``.gitlab-ci.yml`` file. | ||||||
|  |  | ||||||
|  | Rather than taking command-line arguments, this sub-command expects information | ||||||
|  | to be communicated via environment variables, which will typically come via the | ||||||
|  | ``.gitlab-ci.yml`` job as ``variables``. | ||||||
|  |  | ||||||
| ------------------------------------ | ------------------------------------ | ||||||
| A pipeline-enabled spack environment | A pipeline-enabled spack environment | ||||||
| ------------------------------------ | ------------------------------------ | ||||||
| @@ -245,7 +253,21 @@ runners known to the gitlab instance.  For Docker executor type runners, the | |||||||
| as well as an ``entrypoint`` to override whatever the default for that image is). | as well as an ``entrypoint`` to override whatever the default for that image is). | ||||||
| For other types of runners the ``variables`` key will be useful to pass any | For other types of runners the ``variables`` key will be useful to pass any | ||||||
| information on to the runner that it needs to do its work (e.g. scheduler | information on to the runner that it needs to do its work (e.g. scheduler | ||||||
| parameters, etc.). | parameters, etc.).  Any ``variables`` provided here will be added, verbatim, to | ||||||
|  | each job, unless the value takes on a special form.  If the value has the form | ||||||
|  | ``$env:<var_value>``, then that variable will be inserted with ``var_value`` | ||||||
|  | first sampled from the environment during job generation.  This can be useful | ||||||
|  | for propagating generation-time variables which normally would not be available | ||||||
|  | child build jobs. | ||||||
|  |  | ||||||
|  | The ``runner-attributes`` section also allows users to supply custom ``script``, | ||||||
|  | ``before_script``, and ``after_script`` sections to be applied to every job | ||||||
|  | scheduled on that runner.  This allows users to do any custom preparation or | ||||||
|  | cleanup tasks that fit their particular workflow, as well as completely | ||||||
|  | customize the rebuilding of a spec if they so choose.  We will never generate | ||||||
|  | a ``before_script`` or ``after_script`` for jobs, but if you do not provide | ||||||
|  | a custom ``script``, we will generate one for you that invokes | ||||||
|  | ``spack ci rebuild``. | ||||||
|  |  | ||||||
| .. _staging_algorithm: | .. _staging_algorithm: | ||||||
|  |  | ||||||
| @@ -368,13 +390,15 @@ Using a custom spack in your pipeline | |||||||
|  |  | ||||||
| If your runners will not have a version of spack ready to invoke, or if for some | If your runners will not have a version of spack ready to invoke, or if for some | ||||||
| other reason you want to use a custom version of spack to run your pipelines, | other reason you want to use a custom version of spack to run your pipelines, | ||||||
| this can be accomplished fairly simply.  First, create CI environment variables | this section provides an example of how you could take advantage of | ||||||
| containing the url and branch/tag you want to clone (calling them, for example, | user-provided pipeline scripts to accomplish this fairly simply.  First, you | ||||||
| ``SPACK_REPO`` and ``SPACK_REF``), use them to clone spack in your pre-ci | could use the GitLab user interface to create CI environment variables | ||||||
| ``before_script``, and finally pass those same values along to the workload | containing the url and branch/tag/SHA you want to clone (calling them, for | ||||||
| generation process via the ``spack-repo`` and ``spack-ref`` cli args.  Here's | example, ``SPACK_REPO`` and ``SPACK_REF``), then use those in a custom shell | ||||||
| the ``generate-pipeline`` job from the top of this document, updated to clone | script invoked both from your pipeline generation job, as well in your rebuild | ||||||
| a custom spack and make sure the generated rebuild jobs will clone it too: | jobs.  Here's the ``generate-pipeline`` job from the top of this document, | ||||||
|  | updated to invoke a custom shell script that will clone and source a custom | ||||||
|  | spack: | ||||||
|  |  | ||||||
| .. code-block:: yaml | .. code-block:: yaml | ||||||
|  |  | ||||||
| @@ -382,12 +406,10 @@ a custom spack and make sure the generated rebuild jobs will clone it too: | |||||||
|      tags: |      tags: | ||||||
|        - <some-other-tag> |        - <some-other-tag> | ||||||
|    before_script: |    before_script: | ||||||
|      - git clone ${SPACK_REPO} --branch ${SPACK_REF} |      - ./cloneSpack.sh | ||||||
|      - . ./spack/share/spack/setup-env.sh |  | ||||||
|    script: |    script: | ||||||
|      - spack env activate . |      - spack env activate . | ||||||
|      - spack ci generate |      - spack ci generate | ||||||
|        --spack-repo ${SPACK_REPO} --spack-ref ${SPACK_REF} |  | ||||||
|        --output-file "${CI_PROJECT_DIR}/jobs_scratch_dir/pipeline.yml" |        --output-file "${CI_PROJECT_DIR}/jobs_scratch_dir/pipeline.yml" | ||||||
|    after_script: |    after_script: | ||||||
|      - rm -rf ./spack |      - rm -rf ./spack | ||||||
| @@ -395,13 +417,47 @@ a custom spack and make sure the generated rebuild jobs will clone it too: | |||||||
|      paths: |      paths: | ||||||
|        - "${CI_PROJECT_DIR}/jobs_scratch_dir/pipeline.yml" |        - "${CI_PROJECT_DIR}/jobs_scratch_dir/pipeline.yml" | ||||||
|  |  | ||||||
|  | And that script could contain: | ||||||
|  |  | ||||||
| If the ``spack ci generate`` command receives those extra command line arguments, | .. code-block:: bash | ||||||
| then it adds similar ``before_script`` and ``after_script`` sections for each of |  | ||||||
| the ``spack ci rebuild`` jobs it generates (cloning and sourcing a custom |    #!/bin/bash | ||||||
| spack in the ``before_script`` and removing it again in the ``after_script``). |  | ||||||
| This gives you control over the version of spack used when the rebuild jobs |    git clone ${SPACK_REPO} | ||||||
| are actually run on the gitlab runner. |    pushd ./spack | ||||||
|  |    git checkout ${SPACK_REF} | ||||||
|  |    popd | ||||||
|  |  | ||||||
|  |    . "./spack/share/spack/setup-env.sh" | ||||||
|  |  | ||||||
|  |    spack --version | ||||||
|  |  | ||||||
|  | Finally, you would also want your generated rebuild jobs to clone that version | ||||||
|  | of spack, so you would update your ``spack.yaml`` from above as follows: | ||||||
|  |  | ||||||
|  | .. code-block:: yaml | ||||||
|  |  | ||||||
|  |    spack: | ||||||
|  |      ... | ||||||
|  |      gitlab-ci: | ||||||
|  |        mappings: | ||||||
|  |          - match: | ||||||
|  |              - os=ubuntu18.04 | ||||||
|  |            runner-attributes: | ||||||
|  |              tags: | ||||||
|  |                - spack-kube | ||||||
|  |              image: spack/ubuntu-bionic | ||||||
|  |              before_script: | ||||||
|  |                - ./cloneSpack.sh | ||||||
|  |              script: | ||||||
|  |                - spack -d ci rebuild | ||||||
|  |              after_script: | ||||||
|  |                - rm -rf ./spack | ||||||
|  |  | ||||||
|  | Now all the generated rebuild jobs will use the same shell script to clone | ||||||
|  | spack before running their actual workload.  Here we have also provided a | ||||||
|  | custom ``script`` because we want to run ``spack ci rebuild`` in debug mode | ||||||
|  | to get more information when builds fail. | ||||||
|  |  | ||||||
| .. _ci_environment_variables: | .. _ci_environment_variables: | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Scott Wittenburg
					Scott Wittenburg