Skip to main content

Custom Remote Deploy Pipeline

It is possible to define an own custom pipeline template that is able to deploy your service project to a another remote cluster (even where IBM Industry Solutions Workbench consists of the following components is not installed). It is required that the cluster where IBM Industry Solutions Workbench consists of the following components is installed has a valid connection to the remote cluster. You can define one custom pipeline template per namespace (deployment target) per remote cluster. To be able to run and deploy service projects in the remote cluster the used namespace needs to be prepared and configured manually, see Setup deployment targets manually

warning

TechPreview Feature: Please note that this feature is a techpreview. That means the feature may not be fully supported, functionally complete and may introduce breaking changes with the next version.

First you need to create a new pipeline template for a remote deployment to another cluster, see also Custom pipelines.

For example:

apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
annotations:
k5-display-name: Remote Deploy Pipeline to Cluster XYZ
k5-supported-stacks: java
name: k5-template-java-deploy-remote
namespace: isw-namespace
labels:
k5-pipeline-template: 'true'
k5-pipeline-type: custom
spec:
params:
- description: Defines the repository url
name: repo-url
type: string
- description: Defines the revision of the git repository
name: revision
type: string
- default: JAVA
description: Defines the stack
name: stack
type: string
- default: 'false'
description: Defines if unit tests should be executed
name: unittestfeature
type: string
- default: 'false'
description: Defines whether it needs to be a unique pre-release
name: prereleaseuniqueness
type: string
- default: 'false'
description: Defines where uniqueness needs to be enforced
name: enforceuniqueness
type: string
- default: 'false'
description: Defines if the artifacts should be published
name: publish
type: string
- description: Defines the solution acronym
name: solutionacronym
type: string
- default: 'false'
description: Defines whether a unique semVer check is executed
name: uniquesemvercheck
type: string
- default: k5project-remote-login-secret
description: Defines the secret name used for the oc login to a remote cluster
name: oc-remote-login-secret
type: string
- default: |
environment:
host: k5-deployment-target.apps.openshift.xyz.cloud
description: Defines the values.yaml that is used for the helm deployment
name: deployment-values-yaml
type: string
- default: k5-deployment-target
description: Defines in which deployment target (k5project) the service should be deployed in your remote cluster
name: remote-k5project
type: string
tasks:
- name: k5-git-clone
params:
- name: repo-url
value: $(params.repo-url)
- name: revision
value: $(params.revision)
taskRef:
kind: Task
name: k5-git-clone
workspaces:
- name: output
workspace: source
- name: basic-auth
workspace: basic-auth
- name: k5-validate
params:
- name: solutionacronym
value: $(params.solutionacronym)
- name: stack
value: $(params.stack)
- name: prereleaseuniqueness
value: $(params.prereleaseuniqueness)
- name: uniquesemvercheck
value: $(params.uniquesemvercheck)
- name: enforceuniqueness
value: $(params.enforceuniqueness)
runAfter:
- k5-git-clone
taskRef:
kind: Task
name: k5-validate
workspaces:
- name: source
workspace: source
- name: k5-generate-code-java
params:
- name: solutionacronym
value: $(params.solutionacronym)
- name: stack
value: $(params.stack)
runAfter:
- k5-validate
taskRef:
kind: Task
name: k5-generate-code-java
workspaces:
- name: source
workspace: source
- name: k5-build-application-java
params:
- name: solutionacronym
value: $(params.solutionacronym)
- name: stack
value: $(params.stack)
- name: unittestfeature
value: $(params.unittestfeature)
runAfter:
- k5-generate-code-java
taskRef:
kind: Task
name: k5-build-application-java
workspaces:
- name: source
workspace: source
- name: k5-build-publish-image-java
params:
- name: solutionacronym
value: $(params.solutionacronym)
- name: stack
value: $(params.stack)
runAfter:
- k5-build-application-java
taskRef:
kind: Task
name: k5-build-publish-image-java
workspaces:
- name: source
workspace: source
- name: k5-build-publish-chart-java
params:
- name: solutionacronym
value: $(params.solutionacronym)
- name: publish
value: $(params.publish)
- name: stack
value: $(params.stack)
runAfter:
- k5-build-publish-image-java
taskRef:
kind: Task
name: k5-build-publish-chart-java
workspaces:
- name: source
workspace: source
- name: k5-deploy-remote
params:
- name: solutionacronym
value: $(params.solutionacronym)
- name: remote-k5project
value: $(params.remote-k5project)
- name: deployment-values-yaml
value: $(params.deployment-values-yaml)
- name: oc-remote-login-secret
value: $(params.oc-remote-login-secret)
runAfter:
- k5-build-publish-chart-java
taskRef:
kind: Task
name: k5-deploy-remote
workspaces:
- name: source
workspace: source
workspaces:
- name: source
- name: basic-auth
ℹ️note

Especially check and adjust the default values of the following 3 pipeline parameters (params):

  • deployment-values-yaml: Defines the values.yaml that is used for the helm deployment
  • oc-remote-login-secret: Defines the secret name used for the oc login to a remote cluster
  • remote-k5project: Defines in which deployment target (k5project) the service should be deployed in your remote cluster

Then create the needed secret for the openshift login into the remote cluster, e.g.:

kind: Secret
apiVersion: v1
metadata:
name: k5project-remote-login-secret
namespace: isw-namespace
data:
token: <token of k5-admin-sa of k5-deployment-target namespace from remote cluster xyz> -> e.g.: https://console-openshift-console.apps.openshift.xyz.cloud/k8s/ns/k5-deployment-target/secrets/k5-admin-sa-token-br6lx
url: https://api.openshift.xyz.cloud:6443
type: Opaque

Now you will be able to create and open a Java SpringBoot Project and create a new custom pipeline of type Remote Deploy Pipeline to Cluster XYZ

Deployment Pipeline for IBM Power Server (ppc64le)

Additionally, the already described Custom Remote Deploy Pipeline can be configured in a way to build a ppc64le architecture image (instead of amd64 architecture) and helm chart for your Java SpringBoot Stack 2.0 service projects and deploy them to a remote cluster (runtime) on an IBM Power Server.

warning

TechPreview Feature: Please note that this feature is a techpreview and only available for Java SpringBoot Stack 2.0 service projects. That means the feature may not be fully supported, functionally complete and may introduce breaking changes with the next version.

To configure you Custom Remote Deploy Pipeline to be able to build and deploy to a IBM Power Server (ppc64le architecture) you need to add the following pipeline parameter (spec.params) to your Custom Remote Deploy Pipeline template.

apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
annotations:
k5-display-name: Remote Deploy Pipeline to IBM Power Cluster XYZ
k5-supported-stacks: java
name: k5-template-java-deploy-remote-ppc64le
namespace: isw-namespace
labels:
k5-pipeline-template: 'true'
k5-pipeline-type: custom
spec:
params:
- description: Defines the repository url
name: repo-url
type: string
- description: Defines the revision of the git repository
name: revision
type: string
- default: JAVA
description: Defines the stack
name: stack
type: string
- default: 'false'
description: Defines if unit tests should be executed
name: unittestfeature
type: string
- default: 'false'
description: Defines whether it needs to be a unique pre-release
name: prereleaseuniqueness
type: string
- default: 'false'
description: Defines where uniqueness needs to be enforced
name: enforceuniqueness
type: string
- default: 'false'
description: Defines if the artifacts should be published
name: publish
type: string
- description: Defines the solution acronym
name: solutionacronym
type: string
- default: 'false'
description: Defines whether a unique semVer check is executed
name: uniquesemvercheck
type: string
- default: k5project-remote-login-secret
description: Defines the secret name used for the oc login to a remote cluster
name: oc-remote-login-secret
type: string
- default: |
environment:
host: k5-deployment-target.apps.openshift.xyz.cloud
description: Defines the values.yaml that is used for the helm deployment
name: deployment-values-yaml
type: string
- default: k5-deployment-target
description: Defines in which deployment target (k5project) the service should be deployed in your remote cluster
name: remote-k5project
type: string
- default: ppc64le
description: Defines the platform/architecture for the built container image
name: platform
type: string
tasks:
- name: k5-git-clone
params:
- name: repo-url
value: $(params.repo-url)
- name: revision
value: $(params.revision)
taskRef:
kind: Task
name: k5-git-clone
workspaces:
- name: output
workspace: source
- name: basic-auth
workspace: basic-auth
- name: k5-validate
params:
- name: solutionacronym
value: $(params.solutionacronym)
- name: stack
value: $(params.stack)
- name: prereleaseuniqueness
value: $(params.prereleaseuniqueness)
- name: uniquesemvercheck
value: $(params.uniquesemvercheck)
- name: enforceuniqueness
value: $(params.enforceuniqueness)
runAfter:
- k5-git-clone
taskRef:
kind: Task
name: k5-validate
workspaces:
- name: source
workspace: source
- name: k5-generate-code-java
params:
- name: solutionacronym
value: $(params.solutionacronym)
- name: stack
value: $(params.stack)
runAfter:
- k5-validate
taskRef:
kind: Task
name: k5-generate-code-java
workspaces:
- name: source
workspace: source
- name: k5-build-application-java
params:
- name: solutionacronym
value: $(params.solutionacronym)
- name: stack
value: $(params.stack)
- name: unittestfeature
value: $(params.unittestfeature)
runAfter:
- k5-generate-code-java
taskRef:
kind: Task
name: k5-build-application-java
workspaces:
- name: source
workspace: source
- name: k5-build-publish-image-java-ppc64le
params:
- name: solutionacronym
value: $(params.solutionacronym)
- name: stack
value: $(params.stack)
- name: platform
value: $(params.platform)
runAfter:
- k5-build-application-java
taskRef:
kind: Task
name: k5-build-publish-image-java-ppc64le
workspaces:
- name: source
workspace: source
- name: k5-build-publish-chart-java
params:
- name: solutionacronym
value: $(params.solutionacronym)
- name: publish
value: $(params.publish)
- name: stack
value: $(params.stack)
- name: platform
value: $(params.platform)
runAfter:
- k5-build-publish-image-java
taskRef:
kind: Task
name: k5-build-publish-chart-java
workspaces:
- name: source
workspace: source
- name: k5-deploy-remote
params:
- name: solutionacronym
value: $(params.solutionacronym)
- name: remote-k5project
value: $(params.remote-k5project)
- name: deployment-values-yaml
value: $(params.deployment-values-yaml)
- name: oc-remote-login-secret
value: $(params.oc-remote-login-secret)
runAfter:
- k5-build-publish-chart-java
taskRef:
kind: Task
name: k5-deploy-remote
workspaces:
- name: source
workspace: source
workspaces:
- name: source
- name: basic-auth

Now you will be able to create and open a Java SpringBoot Project and create a new custom pipeline of type Remote Deploy Pipeline to IBM Power Cluster XYZ

Build With Specific Node

In case you need to build a container image that uses binary execution command like ex: RUN chmod -R a+rx,a-w /folder for a different architecture than amd64 that is used by IBM Industry Solutions Workbench consists of the following components then you can use a specific node which supports the target architecture to build your container image by defining nodeSelector or affinity within podTemplate for a given TaskRuns or PipelineRuns. The easiest way to create a TaskRuns is to open and copy one of the existing TaskRuns for k5-build-publish-image-java task and add (spec.podTemplate) to it.

apiVersion: tekton.dev/v1
kind: TaskRun
metadata:
...
spec:
params:
...
serviceAccountName: ...
taskRef:
kind: Task
name: k5-build-publish-image-java-ppc64le
podTemplate:
nodeSelector: labelForRequiredNode
....
status:
....