Pipelines
The table below describes the list of actions that can be performed on "pipelines" using the RCTL CLI Utility.
Resource | Create | Get | Update | Delete |
---|---|---|---|---|
pipeline | YES | YES | YES | YES |
Create Pipeline¶
A declarative approach to lifecycle management of pipelines is strongly recommended backed by the pipeline manifests (YAML files) that are version controlled in your Git repository.
Declarative¶
You can create/update a pipeline in the project in your Organization based on a version controlled pipeline spec that you can store in a Git repository. This enables users to develop automation for reproducible infrastructure.
./rctl create pipeline -f <pipeline-file.yaml> --v3
(or)
./rctl apply -f pipeline-spec.yml
Pipeline Config Spec¶
Here's an illustrative example of the pipeline spec YAML file for various actions
Approval¶
apiVersion: gitops.k8smgmt.io/v3
kind: Pipeline
metadata:
modifiedAt: "2023-11-06T13:58:48.226056Z"
name: approval-type
project: project-a
spec:
active: true
stages:
- config:
approvers:
- userName: demo@rafay.co
timeout: 0s
type: Email
name: demo1
type: Approval
triggers:
- config:
repo:
provider: Github
repository: repo-01
revision: master
name: demo2
type: Webhook
Deploy Workload¶
apiVersion: gitops.k8smgmt.io/v3
kind: Pipeline
metadata:
modifiedAt: "2023-11-06T14:05:36.788293Z"
name: deploy-workload
project: project-a
spec:
stages:
- config:
workload: workload-02
name: demo1
type: DeployWorkload
triggers:
- config:
repo:
provider: Github
repository: repo-01
revision: main
name: demo2
type: Webhook
Deploy Workload Template¶
apiVersion: gitops.k8smgmt.io/v3
kind: Pipeline
metadata:
name: test-pipeline
project: defaultproject
spec:
active: true
sharing:
enabled: false
stages:
- config:
namespace: ns1
placement:
labels:
- key: rafay.dev/clusterName
value: pipeline-k3d-1
workloadTemplate: nginx-helm
projectName: default
workloadName: demo-workload
name: stage1
type: DeployWorkloadTemplate
Infrastructure Provisioner¶
apiVersion: gitops.k8smgmt.io/v3
kind: Pipeline
metadata:
modifiedAt: "2022-07-14T06:55:18.304998Z"
name: demo_pipeline
project: gitops-workloads
spec:
stages:
- config:
action:
action: Plan
refresh: true
version: 0.14.9
agents:
- name: demo-agent
provisioner: manual
type: Terraform
name: t1
next:
- name: apply
type: InfraProvisioner
- config:
action:
action: Apply
refresh: true
agents:
- name: demo-agent
provisioner: manual
type: Terraform
name: apply
type: InfraProvisioner
System Sync¶
apiVersion: gitops.k8smgmt.io/v3
kind: Pipeline
metadata:
name: test-pipe
project: prod-test
spec:
active: true
stages:
- config:
destinationRepo: {}
gitToSystemSync: true
includedResources:
- name: '*'
sourceAsDestination: true
sourceRepo:
path:
name: prod-sanity-check-shared-repo
repository: test-project
revision: main
systemToGitSync: true
name: system-sync-stage
type: SystemSync
triggers:
- config:
repo:
paths:
- name: prod-sanity-check
provider: Github
repository: test-repo
revision: main
name: prod-sanity
type: Webhook
Pipeline Execution with Parallel Stage Support¶
To improve pipeline efficiency and reduce deployment time, support is being introduced for parallel execution of independent 'Deploy Workload' stages. This enhancement allows stages within the same pipeline to run simultaneously when no dependencies exist between them.
To enable parallel execution and define stage dependencies, the following configuration options are introduced in the pipeline specification:
The example below demonstrates how a pipeline can be structured to execute independent stages in parallel. The pipeline is designed to allow multiple approval stages to run simultaneously, with a final stage that aggregates the results of these parallel processes.
-
Sequential Preparation: The stages
initialApproval
,stageSplitter
, andprepareParallelStages
execute sequentially to set up the parallel workflow. -
Parallel Stage Execution: The stages
parallelTaskA
,parallelTaskB
,parallelTaskC
, andparallelTaskD
are independent and execute in parallel. No explicit dependencies are declared between them, allowing for concurrent processing. -
Convergence and Synchronization: Each parallel task transitions to a common stage,
finalAggregation
, which runs only after all parallel stages complete successfully.
❗ Important Note
If any stage in the pipeline fails—whether part of the sequential flow or a parallel branch—the entire pipeline is marked as failed. This ensures a consistent failure model and prevents partial execution from proceeding to downstream stages.
apiVersion: gitops.k8smgmt.io/v3
kind: Pipeline
metadata:
name: parallel-processing-pipeline
project: defaultproject
spec:
stages:
- name: initialApproval
type: Approval
config:
approvers:
- ssoUser: true
userName: demouser@test.com
type: Email
next:
- name: stageSplitter
- name: stageSplitter
type: Approval
config:
approvers:
- ssoUser: true
userName: demouser@test.com
type: Email
next:
- name: prepareParallelStages
- name: prepareParallelStages
type: Approval
config:
approvers:
- ssoUser: true
userName: demouser@test.com
type: Email
next:
- name: parallelTaskA
- name: parallelTaskB
- name: parallelTaskC
- name: parallelTaskD
- name: parallelTaskA
type: Approval
config:
approvers:
- ssoUser: true
userName: demouser@test.com
type: Email
next:
- name: finalAggregation
- name: parallelTaskB
type: Approval
config:
approvers:
- ssoUser: true
userName: demouser@test.com
type: Email
next:
- name: finalAggregation
- name: parallelTaskC
type: Approval
config:
approvers:
- ssoUser: true
userName: demouser@test.com
type: Email
next:
- name: finalAggregation
- name: parallelTaskD
type: Approval
config:
approvers:
- ssoUser: true
userName: demouser@test.com
type: Email
next:
- name: finalAggregation
- name: finalAggregation
type: Approval
config:
approvers:
- ssoUser: true
userName: demouser@test.com
type: Email
List Pipelines¶
Use this command to retrieve the list of pipelines in the configured Project. An illustrative example is shown below where RCTL retrieves the list of pipelines in the project "qa".
./rctl get pipeline -p qa
+---------------+-----------+-------------------------------------------+--------------------------------+------------------------------+
| PIPELINE NAME | STATUS | STAGES | EDGES(SOURCE-TARGET) | CREATE AT |
+---------------+-----------+-------------------------------------------+--------------------------------+------------------------------+
| nginx | Activated | deploy_nginx_workload:DeployWorkloadStage | | Sun Dec 20 23:09:00 UTC 2020 |
+---------------+-----------+-------------------------------------------+--------------------------------+------------------------------+
| multitenant | Activated | approval:ApprovalStage, | approval-tenant-a, | Mon Dec 21 19:43:40 UTC 2020 |
| | | tenant-a:DeployWorkloadStage, | tenant-a-tenant-b, | |
| | | tenant-b:DeployWorkloadStage, | tenant-b-tenant-c | |
| | | tenant-c:DeployWorkloadStage | | |
+---------------+-----------+-------------------------------------------+--------------------------------+------------------------------+
Get The Specific Pipeline Info¶
Use this command to retrieve a specific pipeline's details in the configured project.
./rctl get pipeline <pipeline-name> -p <project-name>
Below is the illustrative example for the pipeline called "nginx"
./rctl get pipeline nginx
+---------------+-----------+-------------------------------------------+----------------------+------------------------------+
| PIPELINE NAME | STATUS | STAGES | EDGES(SOURCE-TARGET) | CREATE AT |
+---------------+-----------+-------------------------------------------+----------------------+------------------------------+
| nginx | Activated | deploy_nginx_workload:DeployWorkloadStage | | Sun Dec 20 23:09:00 UTC 2020 |
+---------------+-----------+-------------------------------------------+----------------------+------------------------------+
Or you can use below command to get more information of the addon in json or yaml format
./rctl get pipeline <pipeline-name> -o json
./rctl get pipeline <pipeline-name> -o yaml
Delete Pipeline¶
You can delete a pipeline in the configured project.
./rctl delete pipeline -f <filename> --v3
Activate/Deactivate Pipeline¶
To activate/deactivate the pipeline using the config file, update the below parameters with true/false and run the apply command
spec:
active: true/false
Also, you can use the below command to activate/deactivate the pipeline without updating the spec config
./rctl activate pipeline <name> --v3
and
./rctl deactivate pipeline <name> --v3
Applying these two commands will automatically update the spec file parameter active: true/false
Start Pipeline¶
To start the pipeline, use the below command
./rctl start pipeline <pipeline_name>
Stop Pipeline¶
To stop the pipeline, use the below command
./rctl stop pipeline <pipeline_name>
Important
Refer here for the deprecated RCTL Commands