Commit f4b5f930 authored by Tomasz Maczukin's avatar Tomasz Maczukin

Leave clear notices about after_script execution context

We frequently see new issues mentioning that something defined
in `before_script` or `script` doesn't work with `after_script`.

Our documentation mentions that first two are concatenated and
executed together, why the third one is executed in a separated
shell context. But it looks like it's not clear enough.

Since this misunderstanding of how scripts are being executed
is repeated frequently, let's make it more clear in docs.
parent 9bf141cf
...@@ -89,6 +89,14 @@ Supported: ...@@ -89,6 +89,14 @@ Supported:
- In `script`, it will work in the following lines of `script`. - In `script`, it will work in the following lines of `script`.
- In `after_script`, it will work in following lines of `after_script`. - In `after_script`, it will work in following lines of `after_script`.
Please notice the specific case of `after_script` scripts, that can:
- Only use variables defined before the script within the same `after_script` section.
- Not use variables defined in `before_script` and `script`.
Both restrictions are caused by the fact, that `after_script` script is executed in a
[separated shell context](https://docs.gitlab.com/ee/ci/yaml/README.html#before_script-and-after_script).
## Persisted variables ## Persisted variables
NOTE: **Note:** NOTE: **Note:**
......
...@@ -215,10 +215,20 @@ This can be an array or a multi-line string. ...@@ -215,10 +215,20 @@ This can be an array or a multi-line string.
`after_script` is used to define the command that will be run after all `after_script` is used to define the command that will be run after all
jobs, including failed ones. This has to be an array or a multi-line string. jobs, including failed ones. This has to be an array or a multi-line string.
The `before_script` and the main `script` are concatenated and run in a single context/container. Script specified in `before_script` is:
The `after_script` is run separately. The current working directory is set back to
default. Depending on the executor, changes done outside of the working tree might - Concatenated with script specified in the main `script`. Job-level `before_script` definition
not be visible, e.g. software installed in the `before_script`. override global-level `before_script` definition when concatenated with `script` definition.
- Executed together with main `script` script as one script in a single shell context.
Script specified in `after_script`:
- Have a current working directory set back to the default.
- Is executed in a shell context separated from `before_script` and `script` scripts.
- Because of separated context, cannot see changes done by scripts defined in `before_script` or `script` scripts:
- in shell - for example, command aliases and variables exported in `script` script,
- outside of the working tree (depending on the Runner executor) - for example, software installed
by a `before_script` or `script` script.
It's possible to overwrite the globally defined `before_script` and `after_script` It's possible to overwrite the globally defined `before_script` and `after_script`
if you set it per-job: if you set it per-job:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment