失败后自动重新部署
Automatic redeploy after fail
我正在使用 VSTS 在每次提交到特定分支后自动发布我的应用程序。任务基本上是:
- 重新创建数据库
- 如果第一次正常 -> 部署 API 和 Web
- 如果第二次正常 -> 部署并重启一些 windows 服务
在第二步中,有时会因为某些连接或 IIS 问题而导致部署失败。这不是真的
重要的是我不想在这里详细说明错误的性质。当它发生时,我所要做的就是转到 VSTS
并在失败的任务上单击 Redeploy
。
但我想知道是否有办法使该过程自动化。所以如果部署失败和特定错误我想触发
Redeploy
自动。有没有办法在 VSTS 中执行此操作?有什么想法可以实现吗?
有两个选项可以帮助您重新部署第二个 task/environment。
方案一:添加与第二个任务相同的任务,在上一个任务失败时执行后面的任务
如果要reploy三次,可以在second environment中添加和second task一样的三个task。对于您添加的三个任务,仅设置 when a previous task has failed for 运行 this task 选项。所以它可以重新部署第二个 task/environment 不超过三倍。
选项2:在第二个环境中的第二个任务之后添加一个PowerShell任务,如果第二个任务失败,则重新部署第二个环境
在PowerShell任务中,您应该进行以下操作。
1.Get 当前发布日志 by rest API:
GET https://account.vsrm.visualstudio.com/Git2/_apis/Release/releases/{releaseID}
对于releaseID,您可以通过预定义变量$(Release.ReleaseId)
.
获取值
2.Get第二个任务状态
在其余 API 响应中,您可以通过搜索任务 显示名称 并获取任务的 status
来检查您的第二个任务。如下例,任务显示名称为PowerShell Script
,任务失败(status
值为failed
)。
{
"id": 5,
"timelineRecordId": "ae95a8be-6259-466d-ba8d-93711a922237",
"name": "PowerShell Script",
"dateStarted": "2017-10-03T02:43:25.757Z",
"dateEnded": "2017-10-03T02:43:29.073Z",
"startTime": "2017-10-03T02:43:25.757Z",
"finishTime": "2017-10-03T02:43:29.073Z",
"status": "failed",
"rank": 4,
"issues": [
{
"issueType": "Error",
"message": "agit : The term 'agit' is not recognized as the name of a cmdlet, function, script file, or operable program. Check \r\nthe spelling of the name, or if a path was included, verify that the path is correct and try again.\r\nAt D:\a\_temp\0a858f5c-894b-4944-bed4-54b3cbed48bc.ps1:1 char:1\r\n+ agit\r\n+ ~~~~\r\n + CategoryInfo : ObjectNotFound: (agit:String) [], CommandNotFoundException\r\n + FullyQualifiedErrorId : CommandNotFoundException\r\n \r\n"
},
{
"issueType": "Error",
"message": "Process completed with exit code 0 and had 1 error(s) written to the error stream."
}
],
"task": {
"id": "e213ff0f-5d5c-4791-802d-52ea3e7be1f1",
"name": "PowerShell",
"version": "1.2.3"
},
"agentName": "Hosted Agent",
"logUrl": "https://account.vsrm.visualstudio.com/f7855e29-6f8d-429d-8c9b-41fd4d7e70a4/_apis/Release/releases/300/environments/374/tasks/5/logs?releaseDeployPhaseId=344"
}
3.If第二个任务失败,再按rest API:
重新部署第二个环境
PATCH https://account.vsrm.visualstudio.com/{project}/_apis/Release/releases/{releaseID}/environments/{environmentID}?api-version=4.0-preview.4
environmentID也可以通过perdefined变量获取$(Release.EnvironmentId)
.
我正在使用 VSTS 在每次提交到特定分支后自动发布我的应用程序。任务基本上是:
- 重新创建数据库
- 如果第一次正常 -> 部署 API 和 Web
- 如果第二次正常 -> 部署并重启一些 windows 服务
在第二步中,有时会因为某些连接或 IIS 问题而导致部署失败。这不是真的
重要的是我不想在这里详细说明错误的性质。当它发生时,我所要做的就是转到 VSTS
并在失败的任务上单击 Redeploy
。
但我想知道是否有办法使该过程自动化。所以如果部署失败和特定错误我想触发
Redeploy
自动。有没有办法在 VSTS 中执行此操作?有什么想法可以实现吗?
有两个选项可以帮助您重新部署第二个 task/environment。
方案一:添加与第二个任务相同的任务,在上一个任务失败时执行后面的任务
如果要reploy三次,可以在second environment中添加和second task一样的三个task。对于您添加的三个任务,仅设置 when a previous task has failed for 运行 this task 选项。所以它可以重新部署第二个 task/environment 不超过三倍。
选项2:在第二个环境中的第二个任务之后添加一个PowerShell任务,如果第二个任务失败,则重新部署第二个环境
在PowerShell任务中,您应该进行以下操作。
1.Get 当前发布日志 by rest API:
GET https://account.vsrm.visualstudio.com/Git2/_apis/Release/releases/{releaseID}
对于releaseID,您可以通过预定义变量$(Release.ReleaseId)
.
2.Get第二个任务状态
在其余 API 响应中,您可以通过搜索任务 显示名称 并获取任务的 status
来检查您的第二个任务。如下例,任务显示名称为PowerShell Script
,任务失败(status
值为failed
)。
{
"id": 5,
"timelineRecordId": "ae95a8be-6259-466d-ba8d-93711a922237",
"name": "PowerShell Script",
"dateStarted": "2017-10-03T02:43:25.757Z",
"dateEnded": "2017-10-03T02:43:29.073Z",
"startTime": "2017-10-03T02:43:25.757Z",
"finishTime": "2017-10-03T02:43:29.073Z",
"status": "failed",
"rank": 4,
"issues": [
{
"issueType": "Error",
"message": "agit : The term 'agit' is not recognized as the name of a cmdlet, function, script file, or operable program. Check \r\nthe spelling of the name, or if a path was included, verify that the path is correct and try again.\r\nAt D:\a\_temp\0a858f5c-894b-4944-bed4-54b3cbed48bc.ps1:1 char:1\r\n+ agit\r\n+ ~~~~\r\n + CategoryInfo : ObjectNotFound: (agit:String) [], CommandNotFoundException\r\n + FullyQualifiedErrorId : CommandNotFoundException\r\n \r\n"
},
{
"issueType": "Error",
"message": "Process completed with exit code 0 and had 1 error(s) written to the error stream."
}
],
"task": {
"id": "e213ff0f-5d5c-4791-802d-52ea3e7be1f1",
"name": "PowerShell",
"version": "1.2.3"
},
"agentName": "Hosted Agent",
"logUrl": "https://account.vsrm.visualstudio.com/f7855e29-6f8d-429d-8c9b-41fd4d7e70a4/_apis/Release/releases/300/environments/374/tasks/5/logs?releaseDeployPhaseId=344"
}
3.If第二个任务失败,再按rest API:
重新部署第二个环境PATCH https://account.vsrm.visualstudio.com/{project}/_apis/Release/releases/{releaseID}/environments/{environmentID}?api-version=4.0-preview.4
environmentID也可以通过perdefined变量获取$(Release.EnvironmentId)
.