Customizing Red Hat Advanced Developer Suite - software supply chain
Learn how to customize default software templates and build pipeline configurations.
Abstract
Preface Copy linkLink copied to clipboard!
While RHADS - SSC includes ready-to-use pipeline templates, you can fully customize them for your environment. Learn how to add security checks, modify deployment processes, and integrate external tools.
Chapter 1. Customizing sample software templates Copy linkLink copied to clipboard!
Learn how to customize software templates for your on-premise environment. As a cluster administrator, you have full control over modifying metadata and specifications to align with your deployment needs.
Prerequisites
Before customizing the sample software templates, ensure you have the following prerequisites in place:
- You have used the forked repository URL from the tssc-sample-templates during installation.
-
The forked
tssc-sample-templatesrepository is up to date with the upstream repository. -
You have cloned the
tssc-sample-templatesrepository to your local machine.
Procedure
-
Navigate to the cloned
tssc-sample-templatesrepository on your local machine. Open the
propertiesfile with your preferred text editor. For example, run the following command in your terminal to open it with Visual Studio Code:code properties
$ code propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow Customize the
propertiesfile by updating the following key-value pairs according to your environment:Expand Key Description export GITHUB_DEFAULT_HOST
Set this to your on-premise GitHub host fully qualified domain name. That is, the URL without the
HTTPprotocol and without the.gitextension. For examplegithub-github.apps.cluster-ljg9z.sandbox219.opentlc.com. The default value isgithub.com.export GITLAB_DEFAULT_HOST
Set this to your on-premise GitLab host fully qualified domain name. That is, the URL without the
HTTPprotocol and without the.gitextension. For examplegitlab-gitlab.apps.cluster-ljg9z.sandbox219.opentlc.com. The default value isgitlab.com.export DEFAULT_DEPLOYMENT_NAMESPACE_PREFIX
The namespace prefix for deployments within RHADS - SSC. The default value is
tssc-app.NoteUpdate this if you have modified the default
developerHub: namespacePrefixesduring the installation process.export PIPELINE_REPO_URL
The URL of the forked pipeline repository. For example, https://github.com/redhat-appstudio/tssc-sample-pipelines.
export PIPELINE_REPO_BRANCH
The target branch of the forked pipeline repository. For example,
main.export GITHUB_DEFAULT_ORG
The name of the GitHub organization that you want to set as the default.
export QUAY_DEFAULT_ORG
The name of the Quay organization that you want to set as the default.
Adjust the software templates, replacing default host values with your specified inputs by running the following command from the top-level directory of the repository:
./generate.sh
$ ./generate.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow For Jenkins only
If your Jenkins instance is not deployed to an on-premise OpenShift Container Platform (OCP) instance, and your Rekor and TUF services are on different clusters, update the
REKOR_HOSTandTUF_MIRRORenvironment variables. You can configure these variables in the env.sh file within the component repository or set them as environment variables or secrets in Jenkins.This configuration ensures that the external Jenkins server can communicate with the Rekor and TUF services installed with RHADS - SSC. Without this customization, RHADS - SSC might not sign the container images correctly in the Jenkins pipeline.
To update the
REKOR_HOSTandTUF_MIRRORvariables:Open the env.sh file by navigating to the skeleton > ci > gitops-template > jenkins > tssc directory.
The second env.sh file is located at skeleton > ci > source-repo > jenkins > tssc. Update the settings to suit your needs.
In env.sh, review the default values for
REKOR_HOSTandTUF_MIRROR:REKOR_HOST=http://rekor-server.tssc-tas.svc TUF_MIRROR=http://tuf.tssc-tas.svc
REKOR_HOST=http://rekor-server.tssc-tas.svc TUF_MIRROR=http://tuf.tssc-tas.svcCopy to Clipboard Copied! Toggle word wrap Toggle overflow Replace
.svcwith your OCP cluster URL. The.svcdomain refers to the local cluster, and internal services can access other services with.svcin their routes, but an external Jenkins cannot.The correct routes of the Rekor and TUF services are printed as part of the installation process of RHADS - SSC. If these data aren’t available to you, run this command in your CLI and select the Rekor and TUF routes in the output:
oc get routes -n tssc-tas
$ oc get routes -n tssc-tasCopy to Clipboard Copied! Toggle word wrap Toggle overflow An example of a Rekor server URL: http://rekor-server.tssc-tas.apps.rosa.j6ufg-t3htv-ts6.z797.p3.openshiftapps.com.
Note- To configure environment variables or secrets in Jenkins see, Adding secrets to Jenkins for secure integration with external tools.
-
For Red Hat Advanced Cluster Security (RHACS) only: To enable RHACS scans, set the
export DISABLE_ACStofalsein the env.sh file. - Option A: Commit and push the changes to your repository. This automatically updates the template in Red Hat Developer Hub (RHDH).
Option B: Manually import and refresh the templates using the following steps:
- Go to your forked sample template repository on your Git provider.
Get the appropriate URL:
-
For a single template, from the
templatesdirectory, selecttemplate.yaml. Copy its URL from the browser address bar. For example,https://github.com/username/tssc-sample-templates/blob/main/templates/devfile-sample-code-with-quarkus-dance/template.yaml. -
For all templates, select
all.yamland copy its URL from the browser address bar. For example,https://github.com/username/tssc-sample-templates/blob/main/all.yaml.
-
For a single template, from the
- Switch back to the RHDH platform.
- Select Create > Register Existing Component.
- In the Select URL field, paste the appropriate URL that you copied in the previous step.
- Select Analyze and then select Import to update the templates in RHDH.
Verification
- Consider creating an application to explore the impact of your template customization.
Chapter 2. About sample pipelines Copy linkLink copied to clipboard!
Learn how to update the Pipeline as Code (pac) URLs within the sample templates repository and customize the sample pipelines repository to match your workflow. By customizing the pac URLs, you can integrate custom pipelines tailored to your CI/CD requirements.
The sample pipelines repository provides functional templates, which you can customize for your organization’s specific CI/CD workflows. The sample pipelines repository includes several key pipeline templates in the pac directory:
-
gitops-repo: This directory holds the pipeline definitions for validating pull requests within your GitOps repository. It triggers thegitops-pull-requestpipeline, located in thepipelinesdirectory, validating that image updates comply with organizational standards. This setup is crucial for 'promotion' workflows, where an application’s deployment state advances sequentially through environments, such as from development to staging or from staging to production. For more information about pipeline definitions ingitops-repo, refer Gitops Pipelines. -
pipelines: This directory houses the implementations of build and validation pipelines that are referenced by the event handlers in both thegitops-repoandsource-repo. By examining the contents of this directory, you can understand the specific actions performed by the pipelines, including how they contribute to the secure promotion and deployment of applications. -
source-repo: This directory focuses on Dockerfile-based secure supply chain software builds. It includes pipeline definitions for cloning the source, generating and signing artifacts (such as.sigfor image signature,.attfor attestation, and.sbomfor Software Bill of Materials), and pushing these to the user’s image registry. For more information about pipeline definitions insource-repo, refer Shared Git resolver model for shared pipeline and tasks. -
tasks: This directory houses a collection of tasks that can be added or modified, aligning with organizational needs. For example, Advanced Cluster Security (ACS) tasks can be substituted with alternative checks, or entirely new tasks can be integrated into the pipeline to enhance its functionality and compliance.
Chapter 3. Customizing sample pipelines Copy linkLink copied to clipboard!
Update the Pipeline as Code (pac) URLs within the sample templates repository. Then, customize the sample pipelines repository to match your workflow as needed. By customizing pac URLs, you can integrate custom pipelines tailored to your continuous integration and continuous delivery (CI/CD) requirements.
Prerequisites
Before customizing the sample pipelines, you must ensure you have the following prerequisites in place:
You have forked and cloned the following repositories:
- Each forked repository is synchronized with its upstream repository.
Procedure
Access the forked
tssc-sample-pipelinesrepository URL:-
Open the forked
tssc-sample-pipelinesrepository. -
Copy the complete URL from the address bar. For example,
https://github.com/<username>/tssc-sample-pipelines.
-
Open the forked
Update
pacURLs in thetssc-sample-templatesrepository:-
In your terminal, navigate to the local clone of the
tssc-sample-templatesrepository. Update the Tekton definition by running the following command:
./scripts/update-tekton-definition {fork_url} {branch_name}./scripts/update-tekton-definition {fork_url} {branch_name}Copy to Clipboard Copied! Toggle word wrap Toggle overflow Replace
{fork_url}with the copied URL from step 1 and{branch_name}with the desired branch name. For example, to update the Tekton definition, run the following command:.scripts/update-tekton-definition \https://github.com/myusername/tssc-sample-pipelines main
$ .scripts/update-tekton-definition \https://github.com/myusername/tssc-sample-pipelines mainCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
In your terminal, navigate to the local clone of the
Review, commit, and push your changes:
-
Review the updated files within the
tssc-sample-templatesrepository. - Commit the changes with an appropriate message.
- Push the committed changes to the forked repository.
-
Review the updated files within the
Verification
- Consider creating an application to explore the impact of your template and pipeline customizations.
Chapter 4. Customizing GitLab pipelines and rebuilding container images Copy linkLink copied to clipboard!
When customizing pipelines in GitLab, rebuilding the container image is a critical step to ensure your changes are included in the updated workflow.
Pipelines in GitLab rely on a specific container image, such as the GitLab runner image, to run the tasks defined in your CI/CD workflow. The GitLab runner image provides the necessary tools, configuration, and scripts required for your pipeline to run. If you modify tasks in the pipeline, you must update and rebuild the container image to include those changes. This ensures that the pipeline tasks are properly executed when the pipeline is triggered.
Rebuilding the container image involves the following steps:
-
Running
podmanto extract the existing pipeline files. - Customizing the pipeline tasks with your requirements.
- Rebuilding the container image.
- Pushing the updated image to a container registry.
Prerequisites
Before making changes, ensure that:
-
You have
podmaninstalled on your system. - You have login credentials for Quay.io to push the updated image.
- You have forked and cloned the Sample templates repository.
- Your forked repository is up to date and synced with the upstream repository.
Procedure
Create a directory for the build resources. The location of the directory depends on your role:
-
Platform engineer: If you are rebuilding the image to update the default pipeline for your organization, you can create the directory within the location where you forked the
tssc-sample-templatesrepository. For example,rebuild-image. Developers: If you are rebuilding the image for your own use or a specific project, create a directory in a location outside the organization-wide fork of
tssc-sample-templatesto avoid conflicts.mkdir rebuild-image
$ mkdir rebuild-imageCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
Platform engineer: If you are rebuilding the image to update the default pipeline for your organization, you can create the directory within the location where you forked the
Run the following command and copy the container
imageURL:less ../tssc-sample-templates/skeleton/ci/source-repo/gitlabci/.gitlab-ci.yml
$ less ../tssc-sample-templates/skeleton/ci/source-repo/gitlabci/.gitlab-ci.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow image: quay.io/redhat-tssc/task-runner/
image: quay.io/redhat-tssc/task-runner/Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy the existing pipeline content locally by running the following command:
podman run -v $(pwd):/pwd:z <The_url_you_copied_in_step_2> cp -r /work/tssc /pwd
$ podman run -v $(pwd):/pwd:z <The_url_you_copied_in_step_2> cp -r /work/tssc /pwdCopy to Clipboard Copied! Toggle word wrap Toggle overflow This command starts the container by using the
<the_url_you_copied_in_step_2>image. It then copies the pipeline files from/work/tsscinside the container to your working directory ($(pwd)). Additionally, if you are not on a system with SELinux enabled (for example, Fedora, RHEL, or CentOS), remove the:zoption in the command to ensure compatibility.-
Navigate to the
rhtapdirectory and customize the pipelines tasks as required. Create a
Dockerfilein therebuild-imagedirectory and add the following content to include your changes in the container. Additionally, the base imagequay.io/redhat-tssc/task-runner:1.8is built onubi/ubi-minimal, which provides a lightweight Universal Base Image (UBI). If you need to install additional software and dependencies, usemicrodnf. For example, example command:FROM quay.io/redhat-tssc/task-runner:1.8 COPY ./tssc /work/tssc RUN microdnf -y install make
FROM quay.io/redhat-tssc/task-runner:1.8 COPY ./tssc /work/tssc RUN microdnf -y install makeCopy to Clipboard Copied! Toggle word wrap Toggle overflow - FROM
-
Uses the existing
rhtap-runnercontainer as the starting point. - COPY
-
Copies the updated pipeline tasks from the local
rhtapfolder into the /work/tssc directory inside the container. - RUN
-
Demonstrates the use of the
microdnfto install additional software or dependencies.
Build the new container image by running the following command:
podman build -f Dockerfile -t quay.io/<namespace>/<new_image_name>
$ podman build -f Dockerfile -t quay.io/<namespace>/<new_image_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow The
-f Dockerfileoption specifies the Dockerfile to use to build the container image. The-foption allows you to explicitly point to the Dockerfile if it’s not namedDockerfileor is located in a different directory. The-t quay.io/<namespace>/<new_image_name>option assigns a tag (name) to the container image for easy identification.Login to Quay.io by running the following command:
podman login quay.io
$ podman login quay.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow Push the updated image by running the following command:
podman push quay.io/<namespace>/<new_image_name>
$ podman push quay.io/<namespace>/<new_image_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow This uploads the customized container image to Quay.io, making it available for use in GitLab pipelines.
Platform engineer only: Navigate to the
.gitlab-ci.ymlin the tssc-sample-templates > skeleton > ci > source-repo > gitlabci > directory and replace the container image URL with the one you just created. This makes the new container image the default.image: quay.io/<namespace>/<new_image_name>
image: quay.io/<namespace>/<new_image_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow For developers only: To update the container image just for a single repository in GitLab, navigate to the source repository >
.gitlab-ci.yamland replace the container image URL with the one you just created.image: quay.io/<namespace>/<new_image_name>
image: quay.io/<namespace>/<new_image_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Commit and push the changes to apply the updated pipeline configuration.
Chapter 5. Image registry detection in RHDH Copy linkLink copied to clipboard!
Red Hat Developer Hub displays the Image Registry tab on a component page to provide information about container images stored in an artifact registry. Red Hat Advanced Developer Suite (RHADS) automatically detects the registry type by analyzing the URL in the component source code.
If a registry URL contains "quay", "jfrog", or "artifactory", RHADS automatically adds the corresponding annotation to the catalog-info.yaml file in the application’s Git repository. However, if the registry URL does not contain these specific strings, the registry type cannot be detected automatically, and the Image Registry tab does not appear.
In cases where the tab is missing, you can enable it using one of the following methods:
- Manually enable the tab for a specific existing component.
- Modify the registry detection script in your software templates to support automatic detection for all future components.
5.1. Enabling the Image Registry tab for an existing component Copy linkLink copied to clipboard!
If the Image Registry tab is missing for a specific component, you can manually add the required annotations to the component’s metadata. You must repeat this procedure for every affected component.
Procedure
-
In the Git repository containing your component, navigate to skeleton > source-repo and open the
catalog-info.yamlfile. Add the annotation relevant to your registry provider to the
metadatasection:For Quay:
metadata: annotations: 'quay.io/repository-slug': '<ORGANIZATION>/<REPOSITORY>'metadata: annotations: 'quay.io/repository-slug': '<ORGANIZATION>/<REPOSITORY>'Copy to Clipboard Copied! Toggle word wrap Toggle overflow For JFrog Artifactory:
metadata: annotations: 'jfrog-artifactory/image-name': '<IMAGE-NAME>'metadata: annotations: 'jfrog-artifactory/image-name': '<IMAGE-NAME>'Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Commit and push the changes to the repository.
Verification
- Select the component in the RHADS - SSC UI where the Image Registry tab was missing. The tab menu now displays the Image Registry tab.
5.2. Enabling the Image Registry tab for all future components Copy linkLink copied to clipboard!
Red Hat Advanced Developer Suite (RHADS) software templates use patterns to identify Quay or JFrog Artifactory registries. If your registry URL does not match the default patterns, you can update the template detection script to ensure all new components are annotated correctly and display the Image Registry tab automatically.
Prerequisites
- You have forked and cloned the tssc-sample-templates repository.
Procedure
-
In the GitHub repository containing your templates, navigate to skeleton > source-repo and open the
catalog-info.yamlfile. Locate the code block related to registry detection:
{%- if "quay" in values.image %} quay.io/repository-slug: ${{ values.repoSlug }} {%- elif "jfrog" in values.image or "artifactory" in values.image %} jfrog-artifactory/image-name: ${{ values.imageName }}{%- if "quay" in values.image %} quay.io/repository-slug: ${{ values.repoSlug }} {%- elif "jfrog" in values.image or "artifactory" in values.image %} jfrog-artifactory/image-name: ${{ values.imageName }}Copy to Clipboard Copied! Toggle word wrap Toggle overflow Replace "quay", "jfrog", or "artifactory" with the unique part of your registry URL.
For example, if your Artifactory registry is named
my-registry.mycompany.com, your image names might bemy-registry.mycompany.comfollowed by the username and image name. You can addmy-registry.mycompanyto thecatalog-info.yamldetection logic.
Verification
- Create a new component using the updated template. The Image Registry tab is displayed automatically in the Red Hat Developer Hub UI.
Revised on 2026-02-04 23:23:55 UTC