YAML模式
LinuxVMDeploy原生步骤的YAML模式如下:
管道:—name:steps:—name: myLinuxVMDeployStep type: LinuxVMDeploy configuration: environmentVariables: dry_run: # optional deploy_targets_override: # optional targetDirectory: # optional rolloutDelaySecs: # optional fastFail: # optional sshUser: # required vmEnvironmentVariables: # optional strategy: <"rollingUpdate"|"blueGreen"> # optional;默认“rollingUpdate”inputResourc2022世界杯阿根廷预选赛赛程es: - name: # 1必需(正好1,正好2对于blueGreen策略)。- name: # required(正好是1). scripts: - name: # required context: <"buildNode"|"targetCluster"|"currentCluster"> # required, "currentCluster"只支持blueGreen。命令: # optional
标签
的名字
一个字母数字字符串(允许使用下划线),用于标识步骤。
类型
必须LinuxVMDeploy
对于这个步骤类型。
配置
指定步骤执行环境的所有配置选择。该步骤继承Bash/PowerShell步骤配置标签,包括这些相关的标签:
标签 |
使用说明 |
必需的/可选 |
---|---|---|
集成 |
必须指定VmCluster资源。 | 要求 |
input2022世界杯阿根廷预选赛赛程Resources |
必须指定一个文件规范,BuildInfo或ReleaseBundle包含要上传的文件的资源。必须指定一个。 |
要求 |
从Bash派生的标记
此外,可以定义这些标记来支持该步骤的本机操作:
标签 |
使用说明 |
必需的/可选 |
---|---|---|
sshUser |
用于连接目标虚拟机的ssh用户。 | 要求 |
targetDirectory |
上传部署构件的目录路径。如果目录不存在,则创建该目录。 默认目录为 |
可选 |
|
这些变量将被导出到目标虚拟机中。 | 可选 |
rolloutDelaySecs |
部署之间等待的时间以秒为单位。 |
可选 |
fastFail |
如果 默认是 |
可选 |
策略 | 要使用的发布策略。两者都有可能
|
可选 |
脚本 |
在给定上下文上运行的用户定义命令。
|
要求 |
环境变量
以下环境变量可用于在LinuxVMDeploy步骤中编写的用户定义脚本。
的名字 | 使用说明 |
---|---|
target_cluster |
部署到的虚拟机集群名称。 |
current_cluster |
上次部署到的虚拟机集群名称。 支持 |
current_command |
退出步骤时正在运行的命令的名称。如果没有用户定义的命令正在运行,该选项应该为空。 |
执行
声明在执行前和执行后阶段执行的shell命令序列集合:
标签 | 使用说明 | 必需的/可选 |
---|---|---|
onStart |
在本机操作之前执行的命令 | 可选 |
调用onSuccess |
成功完成后执行的命令 | 可选 |
onFailure |
在完成失败时执行的命令 | 可选 |
onComplete |
在任何补全时执行的命令 | 可选 |
对象执行的操作onExecute
阶段是此步骤类型固有的,不能被覆盖。
保留关键字
onExecute
,onStart
,调用onSuccess
,onFailure
,onComplete
是保留的关键字。在执行脚本的任何其他上下文中使用这些关键字都可能导致意外行为。
例子
下面的示例展示了配置LinuxVMDeploy步骤的几种方法。
将FileSpec资源中的应用上传至虚拟机并运行
LinuxVMDeploy的最基本形式。使用所有默认值。该步骤将上传文件到默认文件targetDirectory
并运行部署命令。
2022世界杯阿根廷预选赛赛程resources:—name: myApplication type: FileSpec configuration: sourceArtifactory: myArtifactory pattern: "example-repo-local/myApp"—name: myVM type: VmCluster configuration: sshKey: mySSHKey targets:—0.0.0.0—1.1.1.1 pipelines:—name: linuxVMDeployPipeline steps:—name: linuxVMDeploy type: linuxVMDeploy configuration: inputResources:—name: myVM - name: myApplication scripts:—name: deploydcommand context: targetCluster commands: - "./myApp"
将BuildInfo资源中的应用上传至虚拟机、执行postDeploy命令、回退处理。
上传BuildInfo资源和尝试运行deployCommand
而且postDeploy
命令。如果deployCommand
如果成功,则postDeploy将运行。虚拟机故障(如果命令或postDeploy
没有成功),然后rollbackCommand
将在任何成功部署的虚拟机上运行。
2022世界杯阿根廷预选赛赛程resources:—name: myApplication type: BuildInfo configuration: sourceArtifactory: myArtifactory buildName: myBuild buildNumber: 1—name: myVM type: VmCluster configuration: sshKey: mySSHKey targets:—0.0.0.0—1.1.1.1 pipelines:—name: linuxVMDeployPipeline steps:—name: linuxVMDeploy type: linuxVMDeploy configuration: inputResources:—name: myVM—name: myApplication sshUser: myUser scripts:—name: deployCommand context: targetCluster commands: - "。/myApp" onFailure: - 'if ["$current_command" == "deployCommand"];/doRollback.sh fi'
覆盖VmCluster目标
在这个例子中,aVmCluster资源与deploy_targets_override
环境变量。中指定的目标将部署工件deploy_targets_override
.VmCluster资源中的ssh密钥仍将被使用。
2022世界杯阿根廷预选赛赛程resources:—name: myApplication type: FileSpec configuration: sourceArtifactory: myArtifactory pattern: "example-repo-local/myApp"—name: myVM type: VmCluster configuration: sshKey: s_VM_DEPLOY_SSHKEY targets:—0.0.0.0—1.1.1.1 pipelines:—name: linuxVMDeployPipeline steps:—name: linuxVMDeploy type: linuxVMDeploy configuration: environmentVariables: deploy_targets_override: "123.456.78.90,127.0.0.1" inputResources:—name: myVM—name: myApplication sshUser: myUser scripts:—name:部署命令上下文:targetCluster命令:- "./myApp"
将环境变量传递给虚拟机运行的命令
在这个例子中,aVmCluster资源由vmEnvironmentVariables
.上运行的用户定义命令可以使用这些变量targetCluster
.
2022世界杯阿根廷预选赛赛程resources:—name: myApplication type: FileSpec configuration: sourceArtifactory: myArtifactory pattern: "example-repo-local/myApp"—name: myVM type: VmCluster configuration: sshKey: s_VM_DEPLOY_SSHKEY targets:—0.0.0.0—1.1.1.1 pipelines:—name: linuxVMDeployPipeline steps:—name: linuxVMDeploy type: linuxVMDeploy configuration: vmEnvironmentVariables:—"LOG_LEVEL=DEBUG" inputResources:—name: myVM—name: myApplication sshUser: myUser scripts:—name: deployCommand context:targetCluster命令:- "。/ myApp LOG_LEVEL美元”
建立一个blueGreen部署策略
在这个例子中,是两个VmCluster2022世界杯阿根廷预选赛赛程资源供应和战略blueGreen
都是确定的。每走一步,targetCluster
而且currentCluster
在两个提供的VmCluster资源之间交换。2022世界杯阿根廷预选赛赛程
2022世界杯阿根廷预选赛赛程resources:—name: myApplication type: FileSpec configuration: sourceArtifactory: myArtifactory pattern: example-repo-local/myApp—name: myVM type: VmCluster configuration: sshKey: s_VM_DEPLOY_SSHKEY targets:—0.0.0.0—1.1.1.1 pipelines:—name: linuxVMDeployPipeline steps:—name: linuxVMDeploy type: linuxVMDeploy configuration: vmEnvironmentVariables:—LOG_LEVEL=DEBUG inputResources:—name: myBlueCluster—name: myGreenCluster—name: myApplication sshUser: myUser strategy:blueGreen脚本:—名称:deployhost命令上下文:targetCluster命令:—“。”/ myApp LOG_LEVEL美元”- name: cleanupCommand context: currentCluster commands: - "./stopApp" - name: swapCluster context: buildNode commands: - "./swapLoadBalancer $target_cluster"
工作原理
当你使用LinuxVMDeploy管道中的本机步骤,它在后台执行以下功能:
- jfrog rt下载(从FileSpec, BuildInfo或ReleaseBundle下载文件)
- tar(压缩所有上传至虚拟机的文件)
- scp(上传压缩工件到虚拟机)
- ssh"mkdir -p"(如果不存在,创建targetDirectory)
- 脚本命令通过ssh在目标vm上运行,如果context是"buildNode",则在构建节点上运行。
- 命令按照它们在yaml中编写的顺序运行。
- 在目标集群上运行的命令可以访问vmEnvironmentVariables中定义的变量。
- 在targetCluster上创建回滚存档(仅在整个步骤成功时发生)
- 回滚路径:“/home/$ssh_user/LinuxVMDeploy/ Rollback”
- Mkdir -p(如果不存在则创建回滚目录)。
- rm -rf $rollbackDirectory/*(删除任何旧的回滚工件)
- cp -r $targetDirectory/* $rollbackDirectory(复制所有上传的工件到回滚存档)