云客户?
免费开始>
在MyJFrog >中升级
云有什么新>





概述

HelmBlueGreenDeploy步骤实现了一个蓝色/绿色策略来部署Docker映像到Kubernetes集群使用Helm图。

通过这个本地步骤部署映像的Helm图可以是:

  • 一个HelmChart资源标识存储在Artifactory存储库中的Helm图HelmPublish
  • 控件标识的源代码存储库中的Helm图GitRepo资源。

在正确配置后,HelmBlueGreenDeploy步骤还执行一个replace_envs方法下指定的所有文件的操作blueValueFilePathsgreenValueFilePaths标记,用它们的值替换这些文件中的所有环境变量。这使该步骤能够从资源中派生信息,例如从对象中派生图像名称和标记图像,并使用它来执行部署。

HelmBlueGreenDeploy步骤使用执掌升级命令执行部署。

页面内容


蓝/绿部署策略

蓝/绿部署是一种发布新软件的策略,它使用两个尽可能相同的生产环境,它们轮流为用户请求提供服务,并执行最后阶段的测试。

HelmBlueGreenDeployStep将这两个环境称为蓝色的而且绿色.这些环境都可以玩闲置生活角色,这取决于用户的请求被转发到哪个环境。当前处理用户请求的环境被认为是Live环境,而另一个被认为是Idle环境。要推出新版本,首先要将其部署到扮演Idle角色的环境中。在那里,我们可以验证新版本,以检查它是否适合用户使用。如果这是真的,那么环境角色可以翻转,以便以前的Idle环境变成Live环境并开始处理用户请求,而以前的Live环境变成Idle环境。这种策略的主要优点之一是回滚新版本就像再次翻转环境角色一样简单。

在Helm的上下文中,蓝色和绿色环境都表示为两个单独的版本,它们共存于同一个名称空间中。的HelmBlueGreenDeploystep通过为每个角色创建专用的公共服务副本,将空闲或活动角色分配给这些版本。通过这样做,我们可以通过将这些服务更新为来自特定环境的服务的副本来轻松地更改发布的角色。管道创建的角色服务可以用于提供额外的入口点组件,如DNS记录、入口规则或服务网格。

为了实现完整的蓝/绿部署策略工作流,管道提供了三个本地步骤:

  • HelmBlueGreenDeploy:从运行时开始,此步骤发现哪个版本正在扮演空闲角色,将图表部署到它,并创建或更新空闲角色服务。
  • elmBlueGreenRoleSwitch:从运行时开始,这个步骤发现哪个版本正在扮演每个角色,并通过创建或更新角色服务来翻转它们。
  • HelmBlueGreenCleanup:从运行时开始,该步骤发现哪个版本正在扮演Idle角色并卸载它。

YAML模式

HelmBlueGreenDeploy本机步骤的YAML模式如下:

HelmBlueGreenDeploy
管道:- name: 步骤:- name: 类型:HelmBlueGreenDeploy配置:#继承所有的标签从bash;//m.si-fil.com/confluence/display/JFROG/Bash helmVersion: <2 b| 3> #可选,默认为3命名空间: blueReleaseName:  blueFlags:  # optional bluevaluefileppaths: # optional - <路径和文件名> greenReleaseName:  greenFlags:  # optional greenvaluefileppaths: # optional - <路径和文件名> roleServices: - liveName:  liveCustomProperties:  # optional idleName:  idleCustomProperties:  # optional blueReferenceName: greenReferenceName:  chartPath: <路径字符串> # optional,可能需要某些输入资源chartName: <路径字符串> # optional,可2022世界杯阿根廷预选赛赛程能需要某些输入资源chartVersion: <路径字符串> # optional,可能需要某些输入资源dryRun:  # optional,仅在dryRun成功时部署lint:  # lints chart before upgrade, default false lintFlags: "——strict " test: #在升级后运行helm测试,默认false testFlags:“——并行”集成:- name:  # required inputResources: - name:  # required,只允许一个输入资源执行:onStart: - echo“准备工作…”onSuccess: - echo“工作做得好!”onFailure: - echo“呃哦,出错了”onComplete: #always - echo“清理一些东西”

标签

的名字

标识步骤的字母数字字符串(允许使用下划线)。

类型

必须HelmBlueGreenDeploy对于这个步骤类型。

配置

指定步骤执行环境的所有配置选择。该步骤继承Bash/PowerShell步骤配置标签,包括这些相关的标签:

标签

使用说明

必需的/可选

集成

必须指定Kubernetes集成

而且

必须指定Artifactory集成ReleaseBundleinputResource的一步。

要求


可能需要

input2022世界杯阿根廷预选赛赛程Resources

必须指定HelmChartGitRepo文件规范BuildInfo,或ReleaseBundle资源,其中包含舵图。

要求


此外,可以定义这些标记来支持该步骤的本机操作:

从Bash派生的标记

所有本机步骤都派生自Bash的一步。这意味着所有步骤共享来自Bash的相同基本标记集,而本机步骤也有自己的附加标记,这些标记支持该步骤的特定功能。所以熟悉这个很重要Bash步骤定义,因为它是所有其他步骤定义的核心。

标签

使用说明

必需的/可选
helmVersion 表示要使用的Helm的主要版本的数字。可以是2或3。默认值为3。 可选
名称空间 部署的目标kubernetes名称空间。 要求
blueReleaseName

蓝色环境的发布名称。类的——name (-n)选项舵安装命令。

要求
blueFlags 部署蓝色发布时包含在Helm命令中的标志字符串。例如:——set key= ' value ' -f myTestValues.yaml 可选
blueValueFilePaths

指定值YAML文件用于——值(- f)选项舵安装命令,部署蓝色版本。

指定文件中引用的所有环境变量将自动替换为匹配的运行时环境变量的值。

可选
greenReleaseName

绿色环境的发布名称。相当于——名称(- n)选项舵安装命令。

要求
greenFlags 部署绿色释放时包含在Helm命令中的标志字符串。例如:——set key= ' value ' -f myTestValues.yaml 可选
greenValueFilePaths

指定值YAML文件用于——值(- f)选项舵安装部署绿色发布时的命令。

指定文件中引用的所有环境变量将自动替换为匹配的运行时环境变量的值。

可选
roleServices

应该由pipeline创建的服务列表,用于将Idle和Live角色分配给发行版。

标签 使用说明 必需的/可选
liveName 指向扮演Live角色的环境的服务的名称。 要求
liveCustomProperties 金桥在从引用服务复制内容之后,在将其应用到kubernetes集群之前,在Live服务上执行表达式。可用于自定义直播服务内容。例如,要分配一个自定义标签,使用以下表达式:“.metadata.labels。My-label = my-value”。 可选
idleName 指向扮演Idle角色的环境的服务的名称。 要求
idleCustomProperties 金桥在从引用服务复制内容之后,在将其应用到kubernetes集群之前,在这个空闲服务上执行表达式。可用于自定义“空闲服务”内容。例如,要分配一个自定义标签,使用以下表达式:".metadata.labels.my-label = my-value"。 可选
blueReferenceName 蓝色发行版部署的服务的名称,将在创建或更新此角色服务时用作引用。当蓝色扮演Live角色时,liveName将是本服务的副本。如果蓝色扮演Idle角色,idleName将是本服务的副本。 要求
greenReferenceName 由绿色发布部署的服务的名称,将在创建或更新此角色服务时用作引用。当绿色扮演Live角色时,liveName将是本服务的副本。如果绿色为Idle角色,idleName将是本服务的副本。
要求
chartPath

通往掌舵的路径图在GitRepo /文件规范/ BuildInfo / ReleaseBundle指定的资源input2022世界杯阿根廷预选赛赛程Resources

当指定了HelmChart资源时不要使用。

可能需要
chartName

掌舵图的名字文件规范/ BuildInfo / ReleaseBundle指定的资源input2022世界杯阿根廷预选赛赛程Resources

当指定了HelmChart/GitRepo资源或当输入资源不是Artifactory Helm存储库时,请不要使用。
可能需要
chartVersion

掌舵图的名字文件规范/ BuildInfo / ReleaseBundle指定的资源input2022世界杯阿根廷预选赛赛程Resources

当指定了HelmChart/GitRepo资源或当输入资源不是Artifactory Helm存储库时,请不要使用。
可能需要
dryRun

真正的,只有在——dry-run install模拟成功时才部署。

默认为

可选
线头

当设置为真正的,执行线头检查图表以找出可能的问题。

默认为

可选
lintFlags 对象要传递的标志字符串执掌线头命令。 可选
测验

当设置为真正的,执行测验为发布运行测试。

默认为

可选
testFlags 对象要传递的标志字符串执掌测试命令。 可选

执行

声明在执行前和执行后阶段执行的shell命令序列集合:

标签

使用说明

必需的/可选
onStart 在本机操作之前执行的命令 可选
调用onSuccess 成功完成后执行的命令 可选
onFailure 在完成失败时执行的命令 可选
onComplete 在任何补全时执行的命令 可选

对象执行的操作onExecute阶段是此步骤类型固有的,不能被覆盖。


例子

下面的示例展示如何配置HelmBlueGreenDeploy步骤。

Helm 3和HelmChart资源输入

使用Helm 3和HelmChart资源输入的HelmBlueGreenDeploy步骤。

HelmBlueGreenDeploy
管线:—name: helmDeployPipeline步骤:—name: helmDeployStep type: HelmBlueGreenDeploy配置:helmVersion: 3 namespace: app-namespace blueReleaseName: app-blue greenReleaseName: app-green roleServices:—blueReferenceName: app-blue-service greenReferenceName: app-green-service idleName: app-idle-service liveName: app-service integrations:—name: kubernetes_integration inputResources:—name: helmChartResour2022世界杯阿根廷预选赛赛程ce

排练

使用Helm 3和HelmChart资源输入值文件的HelmBlueGreenDeploy步骤,并在部署前进行演练。

HelmBlueGreenDeploy
管线:—name: helmDeployPipeline步骤:—name: helmDeployStep type: HelmBlueGreenDeploy配置:helmVersion: 3 namespace: app-namespace blueReleaseName: app-blue bluevaluefileppaths:—values/values1. zipYaml - values/values2。yaml greenReleaseName: app-green greenvaluefileppaths: - values/values1. yaml greenReleaseName: app-green greenvaluefileppaths:Yaml - values/values2。yaml roleServices:—blueReferenceName: app-blue-service greenReferenceName: app-green-service idleName: app-idle-service liveName: app-service dryRun: true integrations:—name: kubernetes_integration inputReso2022世界杯阿根廷预选赛赛程urces:—name: helmChartResource

GitRepo输入

一个带有GitRepo输入的HelmBlueGreenDeploy步骤,而不是HelmChart, lint和测试命令。

HelmBlueGreenDeploy
管线:—name: helmDeployPipeline步骤:—name: helmDeployStep type: HelmBlueGreenDeploy配置:helmVersion: 3 namespace: app-namespace blueReleaseName: app-blue blueFlags: "——set key=value" greenReleaseName: app-green greenFlags: "——set key=value" roleServices: - blueReferenceName: app-blue-service greenReferenceName: app-green-service idleName: app-idle-service liveName: app-service chartPath: "/myChart" lint: true lintFlags: "——strict" test: true testFlags: "——parallel" integration: - name: kubernetes_integration inputR2022世界杯阿根廷预选赛赛程esources: - name: gitRepoResource

文件规范输入

带有FileSpec输入资源的HelmBlueGreenDeploy步骤。在使用FileSpec输入资源时,请使用chartPath属性指定Helm图表文件在FileSpec资源中的位置。如果FileSpec表示Artifactory中包含Helm图表的Generic存储库,则使用以下配置作为参考:

HelmBlueGreenDeploy
管线:—name: helmDeployPipeline步骤:—name: helmDeployStep type: HelmBlueGreenDeploy配置:helmVersion: 3 namespace: app-namespace blueReleaseName: app-blue greenReleaseName: app-green roleServices:—blueReferenceName: app-blue-service greenReferenceName: app-green-service idleName: app-idle-service liveName: app-service chartPath: "。/myChart" lint: true lintFlags: "——strict" test: true testFlags: "——parallel" integration: - name: kubernetes_integration inputR2022世界杯阿根廷预选赛赛程esources: - name: fileSpecResource

如果FileSpec输入资源表示Artifactory中的Helm存储库,您也需要这样做提供chartName而且chartVersion配置属性:

HelmBlueGreenDeploy
管线:—name: helmDeployPipeline步骤:—name: helmDeployStep type: HelmBlueGreenDeploy配置:helmVersion: 3 namespace: app-namespace blueReleaseName: app-blue greenReleaseName: app-green roleServices:—blueReferenceName: app-blue-service greenReferenceName: app-green-service idleName: app-idle-service liveName: app-service chartPath: "。/myChart" chartName: "myChartName" chartVersion: 0.0.1 lint: true lintFlags: "——strict" test: true testFlags: "——parallel" integration: - name: kubernetes_integration inputR2022世界杯阿根廷预选赛赛程esources: - name: fileSpecResource

BuildInfo输入

带有BuildInfo输入资源的HelmBlueGreenDeploy步骤。在使用BuildInfo输入资源时,使用chartPath属性指定Helm图文件在BuildInfo资源中的位置。如果BuildInfo表示Artifactory中包含Helm图表的通用存储库,则使用以下配置作为参考:

HelmBlueGreenDeploy
管线:—name: helmDeployPipeline步骤:—name: helmDeployStep type: HelmBlueGreenDeploy配置:helmVersion: 3 namespace: app-namespace blueReleaseName: app-blue bluevaluefileppaths:—values/values1. zipYaml - values/values2。yaml greenReleaseName: app-green greenvaluefileppaths: - values/values1. yaml greenReleaseName: app-green greenvaluefileppaths:Yaml - values/values2。yaml roleServices:—blueReferenceName: app-blue-service greenReferenceName: app-green-service idleName: app-idle-service liveName: app-service chartPath:”。/myChart" lint: true lintFlags: "--strict" test: true testFlags: "--parallel" integrations: - name: kubernetes_integration inputResources: - name: buildInfoResource

如果BuildInfo输入资源表示Artifactory中的Helm存储库,您也需要这样做提供chartName而且chartVersion配置属性:

HelmBlueGreenDeploy
管线:—name: helmDeployPipeline步骤:—name: helmDeployStep type: HelmBlueGreenDeploy配置:helmVersion: 3 namespace: app-namespace blueReleaseName: app-blue bluevaluefileppaths:—values/values1. zipYaml - values/values2。yaml greenReleaseName: app-green greenvaluefileppaths: - values/values1. yaml greenReleaseName: app-green greenvaluefileppaths:Yaml - values/values2。yaml roleServices:—blueReferenceName: app-blue-service greenReferenceName: app-green-service idleName: app-idle-service liveName: app-service chartPath:”。/myChart" chartName: "myChartName" chartVersion: 0.0.1 lint: true lintFlags: "--strict" test: true testFlags: "--parallel" integrations: - name: kubernetes_integration inputResources: - name: buildInfoResource

ReleaseBundle输入

带有ReleaseBundle输入资源的HelmBlueGreenDeploy步骤。当使用ReleaseBundle输入资源时,你需要指定Helm图表文件在ReleaseBundle资源中的位置chartPath财产。

如果ReleaseBundle在Artifactory中表示一个包含Helm图表的通用存储库,请使用以下配置作为参考:

需要人工集成

您必须指定Artifactory集成ReleaseBundleinputResourceHelmBlueGreenDeploy的一步。该集成将指向Artifactory,该Artifactory将是下载此步骤中使用的ReleaseBundle的源。

HelmBlueGreenDeploy
管线:—name: helmDeployPipeline步骤:—name: helmDeployStep type: HelmBlueGreenDeploy配置:helmVersion: 3 namespace: app-namespace blueReleaseName: app-blue bluevaluefileppaths:—values/values1. zipYaml - values/values2。yaml greenReleaseName: app-green greenvaluefileppaths: - values/values1. yaml greenReleaseName: app-green greenvaluefileppaths:Yaml - values/values2。yaml roleServices:—blueReferenceName: app-blue-service greenReferenceName: app-green-service idleName: app-idle-service liveName: app-service chartPath:”。/myChart" lint: true lintFlags: "--strict" test: true testFlags: "--parallel" integrations: - name: kubernetes_integration - name: artifactory_integration inputResources: - name: releaseBundleResource

如果ReleaseBundle输入资源代表Artifactory中的Helm存储库,您还必须指定chartName而且chartVersion配置属性:

HelmBlueGreenDeploy
管线:—name: helmDeployPipeline步骤:—name: helmDeployStep type: HelmBlueGreenDeploy配置:helmVersion: 3 namespace: app-namespace blueReleaseName: app-blue bluevaluefileppaths:—values/values1. zipYaml - values/values2。yaml greenReleaseName: app-green greenvaluefileppaths: - values/values1. yaml greenReleaseName: app-green greenvaluefileppaths:Yaml - values/values2。yaml roleServices:—blueReferenceName: app-blue-service greenReferenceName: app-green-service idleName: app-idle-service liveName: app-service chartPath:”。/myChart" chartName: "myChartName" chartVersion: 0.0.1 lint: true lintFlags: "--strict" test: true testFlags: "--parallel" integrations: - name: kubernetes_integration - name: artifactory_integration inputResources: - name: releaseBundleResource

定制角色服务

有两个自定义标签分配给角色Service的HelmBlueGreenDeploy步骤。

HelmBlueGreenDeploy
管线:—name: helmDeployPipeline步骤:—name: helmDeployStep type: HelmBlueGreenDeploy配置:helmVersion: 3 namespace: app-namespace blueReleaseName: app-blue greenReleaseName: app-green roleServices:—blueReferenceName: app-blue-service greenReferenceName: app-green-service idleName: app-idle-service idleCustomProperties: ".metadata.labels. properties . "Mylabel = \"value\" | .metadata.labels。role = \"idle\"" liveName: app-service liveCustomProperties: ".metadata.labels. "Mylabel = \"value\" | .metadata.labels。role = \"live\"" integration: - name: kubernetes_integration inputR2022世界杯阿根廷预选赛赛程esources: - name: helmChartResource

多项公共服务

一个HelmBlueGreenDeploy步骤,部署一个公开两个服务的Helm Chart。

HelmBlueGreenDeploy
管线:—name: helmDeployPipeline步骤:—name: helmDeployStep type: HelmBlueGreenDeploy配置:helmVersion: 3 namespace: app-namespace blueReleaseName: app-blue greenReleaseName: app-green roleServices:—blueReferenceName: app-blue-service greenReferenceName: app-green-service idleName: app-idle-service liveName: app-blue-admin-service greenReferenceName: app-green-admin-service idlenename: app-green-admin-service idleName: app-green-admin-serviceapp-admin-service集成:—name: kubernetes_integration inputResources:—na2022世界杯阿根廷预选赛赛程me: helmChartResource

执掌2

使用Helm 2的HelmBlueGreenDeploy步骤。

HelmBlueGreenDeploy
管线:—name: helmDeployPipeline步骤:—name: helmDeployStep type: HelmBlueGreenDeploy配置:helmVersion: 2 namespace: app-namespace blueReleaseName: app-blue greenReleaseName: app-green roleServices:—blueReferenceName: app-blue-service greenReferenceName: app-green-service idleName: app-idle-service liveName: app-service integrations:—name: kubernetes_integration inputResources:—name: helmChartResour2022世界杯阿根廷预选赛赛程ce

工作原理

当你使用HelmBlueGreenDeploy管道中的本机步骤,它在后台执行以下功能:

  • Helm init—仅面向客户端(如果Helm版本为2)
  • jfrog rt配置(如果有一个HelmChart资源输入,使用Artifactory凭证配置jfrog CLI)
  • jfrog rt使用(如果有HelmChart资源输入,设置当前默认的Artifactory配置)
  • kubectl get service(获取Live Services来读取注释并发现当前空闲环境)
  • 执掌取回(如果有HelmChart资源输入,Helm版本为2,获取图表)
  • 执掌拉(如果有HelmChart资源输入,Helm版本为3,获取图表)
  • replace_envs(如果有valuefilepath,替换变量占位符)
  • 头盔绒线(如果绒线为真)
  • helm—dry-run(如果dryRun为真)
  • 舵(部署)
  • kubectl get service(获取helm部署的服务,用于创建或更新角色服务)
  • 清理和更新角色服务定义(使用金桥在Bash节点和金桥而且ConvertFrom-JsonPowerShell节点上)
  • kubectl apply(创建或更新角色服务)
  • add_pipeline_files(保存HelmBlueGreenDeploy配置,以供以后的HelmBlueGreenRoleSwitch和HelmBlueGreenCleanup步骤使用)
  • 头盔测试(如果测试为真)

管道管理服务

由pipeline管理的角色Services可以通过以下标签和注释元数据来标识:

的名字 类型 价值
app.kubernetes.io /管理 标签 “管道”
pipelines.m.si-fil.com/pipeline 注释 管道的名字
pipelines.m.si-fil.com/deploy-step 注释 步骤名称
pipelines.m.si-fil.com/run 注释 最后一次运行更新服务的编号
pipelines.m.si-fil.com/reference 注释 服务名称
pipelines.m.si-fil.com/environment 注释 目前环境扮演着这个角色
  • 没有标签
版权所有©2023 JFrog Ltd。