我正在创建一个自定义Azure DevOps任务来替换我的任务组。我的自定义任务现在适用于直接的PowerShell,但是我也试图在该任务中集成一个“标准”任务(发布构建工件)。为此,我将azure-pipelines-tasks回购添加为项目的子模块,并且我正在编译所需的任务,并将输出复制到任务中。
脚本的设计工作方式是运行一些PowerShell动作,然后运行“发布构建工件” js脚本。
问题是,当我从PowerShell脚本中运行节点“ publishbuildartifacts.js”时,即使它在同一文件夹中,它也无法正确读取task.json文件以获取所需的信息。
我能够使“ publishbuildartifacts.js”正确运行的唯一方法是在task.json中直接调用。
我可以使用这种方法,只是我需要在执行此操作之前运行PowerShell脚本。
我遇到的问题是,当我在执行操作中拥有PowerShell动作和Node动作时,它将仅在节点组件上运行,并且当我在PowerShell组件中添加“平台”:[“ windows”]时;将仅运行PowerShell,而不运行节点。
如何让它们按指定的顺序运行?
我也尝试过“ prejobexecution”和“ postjobexecution”,但这就是我希望任务能够完成的方式。
"execution": {
"PowerShell3": {
"target": "ABS-Report_tasks.ps1",
"platforms": [
"windows"
]
},
"Node": {
"target": "publishbuildartifacts.js",
"argumentFormat": ""
}
},
答案 0 :(得分:0)
有一种分组任务的方法。看看下面的信息,有关详细信息,请参阅文章。
Visual Studio Code Tasks and Split Terminals
{
"label": "Run Server",
"type": "shell",
"command": "${config:python.pythonPath} manage.py runserver --noreload",
"presentation": {
"group": "groupServerStuff"
}
},
具有相同组的所有任务将作为另一个拆分终端打开 相同终端窗口中的窗格。很好。
除了单独启动每个任务,还有一种方法可以使任务 “呼叫”或“产生”其他任务...
{
"label": "Run Server",
"dependsOn": [
"Run TCP Server",
"Run Django Server",
"Tail Log File"
]
},
{
"label": "Run Django Server",
"type": "shell",
"command": "${config:python.pythonPath} manage.py runserver --noreload",
"presentation": {
"group": "groupServerStuff"
}
},
{
"label": "Run TCP Server",
"type": "shell",
"command": "${config:python.pythonPath} scripts/tcp_server.py",
"presentation": {
"group": "groupServerStuff"
}
},
{
"label": "Tail Log File",
"type": "shell",
"command": "tail -f /tmp/logfile.txt",
"presentation": {
"group": "groupServerStuff"
}
},
OP的更新
很有趣,但是对执行块中的VSTS自定义任务有效。该示例适用于VSCode。因为这些不是任务,也不是终端窗口,所以我不知道在我试图完成的一系列执行中该如何注册。
您没有表明这是用于VSTS的,并且由于您已完成了PowerShell问答,因此假设是VSCode。
现在,所有这些。我从来没有在VS / VSTS中尝试过这个,只是VSCode。有些人使用VSCode进行VS构建。
网络上也有关于该主题的几篇文章。但是,快速搜索显示任务组已添加到VSTS。
See: Visual Studio Team Services: Create and use task groups
…尽管它只是显示如何通过GUI进行操作。
答案 1 :(得分:0)
我可以知道您在管道中使用了哪个代理池吗? Azure Pipeline允许运行跨平台脚本。请参阅此document。
还有另一种解决方法。您可以在powershell脚本中添加命令以运行publishbuildartifacts.js,例如node publishbuildartifacts.js
。