Custom Parameters #
Using the {{ param }}
syntax, Pipelines-as-Code let you expand a variable or
the payload body inside a template within your PipelineRun.
By default, there are several variables exposed according to the event. To view all the variables exposed by default, refer to the documentation on Authoring PipelineRuns.
With the custom parameter, you can specify some custom values to be replaced inside the template.
Utilizing the Tekton PipelineRun parameters feature may generally be the preferable approach, and custom params expansion should only be used in specific scenarios where Tekton params cannot be used.
As an example here is a custom variable in the Repository CR spec
:
spec:
params:
- name: company
value: "My Beautiful Company"
The variable name {{ company }}
will be replaced by My Beautiful Company
anywhere inside your PipelineRun
(including the remotely fetched task).
Alternatively, the value can be retrieved from a Kubernetes Secret.
For instance, the following code will retrieve the value for the company
parameter
from a secret named my-secret
and the key companyname
:
spec:
params:
- name: company
secret_ref:
name: my-secret
key: companyname
- If you have a
value
and asecret_ref
defined, thevalue
will be used.- If you don’t have a
value
or asecret_ref
the parameter will not be parsed, it will be shown as{{ param }}
in thePipelineRun
.- If you don’t have a
name
in theparams
the parameter will not parsed.- If you have multiple
params
with the samename
the last one will be used.
CEL filtering on custom parameters #
You can define a param
to only apply the custom parameters expansion when some
conditions has been matched on a filter
:
spec:
params:
- name: company
value: "My Beautiful Company"
filter: pac.event_type == "pull_request"
The pac
prefix contains all the values as set by default in the templates
variables. Refer to the Authoring PipelineRuns documentation
for all the variable exposed by default.
The body of the payload is exposed inside the body
prefix.
For example if you are running a Pull Request on GitHub pac will receive a payload which has this kind of json:
{
"action": "opened",
"number": 79,
// .... more data
}
The filter can then do something like this:
spec:
params:
- name: company
value: "My Beautiful Company"
filter: body.action == "opened" && pac.event_type == "pull_request"
The payload of the event contains much more information that can be used with the CEL filter. To see the specific payload content for your provider, refer to the API documentation
You can have multiple params
with the same name and different filters, the
first param that matches the filter will be picked up. This let you have
different output according to different event, and for example combine a push
and a pull request event.