是否可以执行PowerShell脚本,然后执行(task.json)中用于自定义任务的Node脚本?

时间:2019-06-05 21:02:53

标签: powershell azure-devops

我正在创建一个自定义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":  ""
     }
},

2 个答案:

答案 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