/jx-promote

this plugin promotes applications by creating Pull Requests

Primary LanguageGo

jx-promote

Documentation Go Report Card Releases LICENSE Slack Status

jx promote is a binary plugin to promote applications to one or more Jenkins X environments

Getting Started

Download the jx-promote binary for your operating system and add it to your $PATH.

Commands

See the jx-promote command reference

Promoting via the command line

Just run the jx promote command line and follow the instructions as if it were jx promote.

Rules

jx promote supports a number of different rules for promoting new versions of applications for various kinds of deployment tools.

Helm

The helm rule uses a helm chart's requirements.yaml file to manage dependent applications. This is the default source layout of a Jenkins X Staging or Production repository; there is usually a helm chart in the env folder and jx-promote will create a Pull Request adding or updating the applications version in env/requirements.yaml.

jx promote will detect the env/requirements.yaml file automatically without any explict configuration.

You can explicitly configure the helm rule by specifying the helmRule property on the spec of the .jx/promote.yaml configuration file like this one:

apiVersion: promote.jenkins-x.io/v1alpha1
kind: Promote
spec:
  helmRule:
    path: env

Apps

The apps rule uses a jx-apps.yml file to describe the charts to deploy in your environments git repository.

jx promote will detect the jx-apps.yml file in the root directory automatically without any explicit configuration.

You can explicitly configure the apps rule by creating a .jx/promote.yaml configuration file and specifying the appsRule like in this one

apiVersion: promote.jenkins-x.io/v1alpha1
kind: Promote
spec:
  appsRule:
    path: jx-apps.yml

Helmfile

The helmfile rule uses a helmfile.yaml file from helmfile to configure the helm charts to deploy to your environment.

jx promote will detect the helmfile.yaml file in the root directory automatically without any explicit configuration.

You can explicitly configure the helmfile rule by creating a .jx/promote.yaml configuration file and specifying the helmfile rule like this one:

apiVersion: promote.jenkins-x.io/v1alpha1
kind: Promote
spec:
  helmfileRule:
    path: helmfile.yaml

File

The file rule can modify arbitrary files such as Makefile or shell scripts to include a promotion command using tools like helm or kpt

To enable the file mode you need to create a .jx/promote.yaml configuration file and specifying the file rule.

For example to promote into a Makefile using helm template you could create a file like this one:

apiVersion: promote.jenkins-x.io/v1alpha1
kind: Promote
spec:
  fileRule:
    path: Makefile
    linePrefix: "\t"
    insertAfter:
    - prefix: "helm template"
    - prefix: "fetch:"
    updateTemplate:
      regex: "helm template --namespace {{.Namespace}} --version .* {{.AppName}} .*"
    commandTemplate: "helm template --namespace {{.Namespace}} --version {{.Version}} {{.AppName}} dev/{{.AppName}}"

Or to use kpt to promote you could use this one:

apiVersion: promote.jenkins-x.io/v1alpha1
kind: Promote
spec:
  fileRule:
    path: Makefile
    linePrefix: "\t"
    insertAfter:
    - prefix: "kpt pkg get"
    - prefix: "fetch:"
    updateTemplate:
      prefix: "kpt pkg get {{.GitURL}}"
    commandTemplate: "kpt pkg get {{.GitURL}}/kubernetes@v{{.Version}} $(FETCH_DIR)/namespaces/jx"

if you are using a script to in your environment git repository you could use a configuration like this one:

apiVersion: promote.jenkins-x.io/v1alpha1
kind: Promote
spec:
  fileRule:
    path: myscript.sh
    insertAfter:
    - prefix: "kpt pkg get"
    - prefix: "# fetch resources"
    updateTemplate:
      prefix: "kpt pkg get {{.GitURL}}"
    commandTemplate: "kpt pkg get {{.GitURL}}/kubernetes@v{{.Version}} $(FETCH_DIR)/namespaces/jx"

Rule Configuration

jx promote can automatically detect common configurations as described above or you can explicilty configure the promotion rule in your environment git repository by creating a .jx/promote.yaml configuration file.

For example if you wish to configure the helm rule you may want to use a .jx/promote.yaml file like this one:

apiVersion: promote.jenkins-x.io/v1alpha1
kind: Promote
spec:
  helmRule:
    path: env