HelmPublishAndDeploy

JFrog Pipelines Documentation

ft:sourceType
Paligo

The HelmPublishAndDeploy template creates a pipeline that publishes a Helm Chart to a Helm repository in Artifactory, creates a Build Info, promotes the Build, and then deploys the Helm Chart from the promoted Build resource using the #UUID-88df66c6-fc8d-d93d-d87d-14361312cff0HelmDeploy native step. Version 1.0.0 of this template uses JFrog CLI v1 and version 1.1.0 uses JFrog CLI v2.

HelmPublishAndDeploy YAML

resources:
  - name: {{ .Values.GitRepo.name | default "GitRepoRes" }}
    type: GitRepo
    configuration:
      gitProvider: {{ .Values.GitRepo.gitProvider }}
      path: {{ .Values.GitRepo.path }}
      {{- if or (.Values.GitRepo.branches.include) (.Values.GitRepo.branches.exclude) }}
      branches:
        {{- if .Values.GitRepo.branches.include }}
        include: {{ .Values.GitRepo.branches.include }}
        {{- end }}
        {{- if .Values.GitRepo.branches.exclude }}
        exclude: {{ .Values.GitRepo.branches.exclude }}
        {{- end }}
      {{- end }}
      {{- if or (.Values.GitRepo.files.include) (.Values.GitRepo.files.exclude) }}
      files:
        {{- if .Values.GitRepo.files.include }}
          include: {{ .Values.GitRepo.files.include }}
        {{- end }}
        {{- if .Values.GitRepo.files.exclude }}
          exclude: {{ .Values.GitRepo.files.exclude }}
        {{- end }}
      {{- end }}

  - name: {{ .Values.BuildInfo.name | default "BuildInfoRes" }}
    type: BuildInfo
    configuration:
      sourceArtifactory: {{ .Values.artifactoryIntegration }}

  {{- if .Values.BuildInfoPromoted }}
  - name: {{ .Values.BuildInfoPromoted.name | default "BuildInfoPromotedRes" }}
    type: BuildInfo
    configuration:
      sourceArtifactory: {{ .Values.artifactoryIntegration }}
  {{- end }}

  - name: {{ .Values.HelmChart.name | default "HelmChartRes" }}
    type: HelmChart
    configuration:
      sourceArtifactory: {{ .Values.artifactoryIntegration }}
      repository: {{ .Values.HelmChart.repository }}
      chart:  {{ .Values.HelmChart.chartName }}
      version: {{ .Values.HelmChart.chartVersion }}

pipelines:
  - name: {{ .Values.Pipeline.name | default "HelmDeployPipeline" }}
    configuration:
      jfrogCliVersion: 2
      {{- if or (.Values.BuildInfo.buildName) (.Values.BuildInfo.buildNumber) }}
      environmentVariables:
        readOnly:
          {{- if .Values.BuildInfo.buildName }}
          JFROG_CLI_BUILD_NAME: {{ .Values.BuildInfo.buildName }}
          {{- end }}
          {{- if .Values.BuildInfo.buildNumber }}
          JFROG_CLI_BUILD_NUMBER: {{ .Values.BuildInfo.buildNumber }}
          {{- end }}
      {{- end }}
    steps:
      - name: {{ .Values.HelmPublish.name | default "HelmPublish" }}
        type: HelmPublish
        configuration:
          helmVersion: {{ .Values.HelmChart.helmVersion | default 3 }}
          autoPublishBuildInfo: true
          chartPath: {{ .Values.HelmPublish.chartPath }}
          {{- if .Values.HelmPublish.flags }}
          flags:  {{ .Values.HelmPublish.flags }}
          {{- end }}
          {{- if .Values.HelmPublish.valueFilePaths }}
          valueFilePaths:
            {{- range $.Values.HelmPublish.valueFilePaths }}
            - {{ . }}
            {{- end }}
          {{- end }}
          lint: {{ .Values.HelmPublish.lint | default false }}
          {{- if .Values.HelmPublish.lintFlags }}
          lintFlags: {{ .Values.HelmPublish.lintFlags }}
          {{- end }}
          inputResources:
            - name: {{ .Values.GitRepo.name | default "GitRepoRes" }}
          outputResources:
            - name: {{ .Values.BuildInfo.name | default "BuildInfoRes" }}
            - name: {{ .Values.HelmChart.name | default "HelmChartRes" }}

      {{- if and (.Values.PromoteBuild) (.Values.BuildInfoPromoted) }}
      - name: {{ .Values.PromoteBuild.name | default "PromoteBuild" }}
        type: PromoteBuild
        configuration:
          copy: {{ .Values.PromoteBuild.copy | default false }}
          targetRepository: {{ .Values.PromoteBuild.targetRepository }}
          inputResources:
            - name: {{ .Values.BuildInfo.name | default "BuildInfoRes" }}
              trigger: {{ .Values.PromoteBuild.autoPromotion | default true }}
          outputResources:
            - name: {{ .Values.BuildInfoPromoted.name | default "BuildInfoPromotedRes" }}
      {{- end }}

      - name: {{ .Values.HelmDeploy.name | default "HelmDeploy" }}
        type: HelmDeploy
        configuration:
          {{- if .Values.HelmChart.namespace }}
          environmentVariables:
            HELM_NAMESPACE: {{ .Values.HelmChart.namespace }}
          {{- end }}
          integrations:
            - name: {{ .Values.kubernetesIntegration }}
          inputResources:
            {{- if and (.Values.PromoteBuild) (.Values.BuildInfoPromoted) }}
            - name: {{ .Values.BuildInfoPromoted.name | default "BuildInfoPromotedRes" }}
            {{- else }}
            - name: {{ .Values.BuildInfo.name | default "BuildInfoRes" }}
            {{- end }}
          chartPath: {{ .Values.HelmDeploy.chartPath }}
          chartName: {{ .Values.HelmChart.chartName }}
          chartVersion: {{ .Values.HelmChart.chartVersion }}
          helmVersion: {{ .Values.HelmChart.helmVersion | default 3 }}
          {{- if .Values.HelmDeploy.releaseName }}
          releaseName: {{ .Values.HelmDeploy.releaseName }}
          {{- end }}
          {{- if .Values.HelmChart.namespace }}
          namespace:  {{ .Values.HelmChart.namespace }}
          {{- end }}
          {{- if .Values.HelmDeploy.flags }}
          flags:  {{ .Values.HelmDeploy.flags }}
          {{- end }}
          {{- if .Values.HelmDeploy.valueFilePaths }}
          valueFilePaths:
            {{- range $.Values.HelmDeploy.valueFilePaths }}
            - {{ . }}
            {{- end }}
          {{- end }}
          lint: {{ .Values.HelmDeploy.lint | default false }}
          {{- if .Values.HelmDeploy.lintFlags }}
          lintFlags: {{ .Values.HelmDeploy.lintFlags }}
          {{- end }}
          test: {{ .Values.HelmDeploy.test | default false }}
          {{- if .Values.HelmDeploy.testFlags }}
          testFlags: {{ .Values.HelmDeploy.testFlags }}
          {{- end }}

Example

resources:
  - name: fooGitRepo
    type: GitRepo
    configuration:
      gitProvider: bb_benha
      path: ~benha/simplehelm
      branches:
        include: master
      files:
        include: simplehelm.*
  - name: fooBuild
    type: BuildInfo
    configuration:
      sourceArtifactory: art_v
  - name: fooBuildPromote
    type: BuildInfo
    configuration:
      sourceArtifactory: art_v
  - name: fooHelmChart
    type: HelmChart
    configuration:
      sourceArtifactory: art_v
      repository: simplecharts
      chart: simplehelm
      version: 0.3.0

pipelines: 
- name: fooHelmDeploy
configuration:
  environmentVariables:
    readOnly:
      JFROG_CLI_BUILD_NAME: foo
      JFROG_CLI_BUILD_NUMBER: '${run_number}'
steps:
  - name: HelmPublish
    type: HelmPublish
    configuration:
      helmVersion: 3
      autoPublishBuildInfo: true
      chartPath: ./simplehelm
      lint: false
      inputResources:
        - name: fooGitRepo
      outputResources:
        - name: fooBuild
        - name: fooHelmChart
  - name: fooPromoteBuild
    type: PromoteBuild
    configuration:
      copy: false
      targetRepository: helm-promote
      inputResources:
        - name: fooBuild
          trigger: true
      outputResources:
        - name: fooBuildPromote
  - name: fooHelmDeploy
    type: HelmDeploy
    configuration:
      environmentVariables:
        HELM_NAMESPACE: pipe-master-pool
      integrations:
        - name: k8s
      inputResources:
        - name: fooBuildPromote
      chartPath: .
      chartName: simplehelm
      chartVersion: 0.3.0
      helmVersion: 3
      releaseName: 'simplehelm-${run_id}'
      flags: >-
        --force --wait --timeout 900s --set
        image.repository=trriplejay/simplehelm --set image.tag=latest
      valueFilePaths:
        - values.yaml
      lint: true
      lintFlags: '--strict'
      test: true

values.yml: This is a samplevalues.yml, which can be edited to create your own version of the file.

artifactoryIntegration: artifactory_integration     # Required. Name of the Artifactory integration.
kubernetesIntegration: kubernetes_integration       # Required. Name of the Kubernetes integration.

GitRepo:                                            # Required.
  name: fooGitRepo                                  # Name of the GitRepo resource. Defaults to GitRepoRes.
  gitProvider: github                               # Required. Name of the SCM integration which will be used to fetch the SCM repository.
  path: jfrog/jfrog-pipelines-simple-example        # Required. Path to the SCM repository.
  branches:                                         # Optional.
    exclude: ^master$                               # Regex pattern to exclude branches.
    include: ^{{gitBranch}}$                        # Regex pattern to include branches.
  files:                                            # Optional.
    exclude: ^fileName$                             # Regex pattern to exclude files.
    include: ^fileName$                             # Regex pattern to include files.

BuildInfo:                                          # Required.
  name: fooBuild                                    # Name of the BuildInfo resource. Defaults to BuildInfoRes.
  buildName: foo                                    # Optional. Name of the Artifactory Build that will be created. Defaults to $pipeline_name.
  buildNumber: $run_number                          # Optional. Number of the Artifactory Build that will be created. Defaults to $run_number.

BuildInfoPromoted:                                  # Optional.
  name: fooBuildInfoPromoted                        # Name of the promoted BuildInfo resource. Defaults to BuildInfoPromotedRes.
  autoPromotion: false                              # Optional. When set to false, indicates that Build promotion in the pipeline will be manually triggered. Defaults to true.

HelmChart:                                          # Required.
  name: fooHelmChart                                # Name of the HelmChart resource. Defaults to HelmChartRes.
  chartName: foo                                    # Required. Helm chart name.
  chartVersion: 0.0.1                               # Required. Helm chart version.
  repository: foo                                   # Required. The name of the Helm repository in Artifactory.
  helmVersion: 3                                    # Optional. A number representing the major version of Helm to use. Defaults to 3.
  namespace: foo                                    # Optional. Set the namespace used for the Helm operations. Only supported when used with Helm 3.

Pipeline:                                           # Optional.
  name: foo                                         # Name of the pipeline. Defaults to HelmDeployPipeline.

HelmPublish:                                        # Required.
  name: HelmPublish                                 # Name of the HelmPublish step. Defaults to HelmPublish.
  chartPath: '.'                                    # Required. The path to the Helm chart YAML in the GitRepo resource.
  flags: '--app-version=foo'                        # Optional. Command line options to pass to the helm package command.
  lint: true                                        # Optional. When set to true performs a lint to examine a Helm chart for possible issues.  Defaults to false.
  lintFlags: '--strict'                             # Optional. Flag string to pass to the helm lint command.
  valueFilePaths:                                   # Optional. Specifies values YAML file(s) that will be used in the lint command helm lint command.
    - values.yaml                                   # Optional. An exmaple of how to add a values YAML file.
    - values2.yaml                                  # Optional. An exmaple of how to add an additional values YAML file.

PromoteBuild:                                       # Optional.
  name: fooPromoteBuild                             # Name of the PromoteBuild step. Defaults to PromoteBuild.
  targetRepository: fooPromote                      # Required. The name of the repository in Artifactory to promote the build to.
  copy: false                                       # Optional. When set to true, copies the artifacts to the targetRepository vs moving them to the targetRepository. Defaults to false.

HelmDeploy:                                         # Required.
  name: fooHelmDeploy                               # Name of the HelmDeploy step. Defaults to HelmDeploy.
  chartPath: '.'                                    # Required. The path to the Helm chart YAML in the input BuildInfo resource.
  releaseName: foo                                  # Required. The release name. Equivalent to the --name (-n) option of the  helm install command.
  flags: '--wait --timeout 900s'                    # Optional. Command line options to pass to the helm upgrade command.
  lint: true                                        # Optional. When set to true performs a lint to examine a Helm chart for possible issues. Defaults to false.
  lintFlags: '--strict'                             # Optional. Flag string to pass to the helm lint command.
  valueFilePaths:                                   # Optional. Specifies values YAML file(s) for use with a --values (-f) option of the helm lint command.
    - values.yaml
    - values2.yaml
  test: true                                        # Optional. When set to true performs a test to run the tests for release. Defaults to false.
  testFlags:                                        # Optional. Flag string to pass to the helm test command.