Jyo*_*oti 7 yaml azure-devops azure-repos
我在同一分支中有服务器端(使用 C# 的 Web api)和客户端(角度)代码。我为服务器端和客户端代码的构建创建了单独的阶段,并创建了一个部署阶段。如果我在客户端或服务器端签入代码,则所有 3 个阶段都会运行。为了避免这种情况,我正在寻找在阶段级别添加条件的方法,以便如果存在服务器端更改,则仅运行服务器阶段,如果签入的代码仅包含客户端代码,则仅运行客户端阶段。我不明白如何检查哪些文件已签入。我在搜索时发现了类似的问题,但解决方案是使用 git 给出的。我的代码位于 azure-repos 中。有什么方法可以让我根据文件夹检查是否有更改,并在阶段条件下进一步使用它。像这样的东西:
stages:
- stage: 'Server'
condition:
- stage: 'Client'
condition:
Run Code Online (Sandbox Code Playgroud)
提前致谢。
该线程中提到的解决方案应该适合您。我将分享有关此解决方法的更多详细信息。
ChangedFolders1,在 stage Server 之上添加另一个 stage ,在 stage ChangedFolders 中,添加具有单个 powershell 任务的单个作业。(您不需要为服务器文件夹和客户端文件夹创建变量。)
2、在powershell任务中,运行上面线程中提到的脚本。并通过脚本设置输出变量。请参阅此处的文档了解更多信息。
请参阅下面的示例:
stages:
- stage: ChangedFolders
jobs:
- job: preCheck
steps:
- powershell: |
$files=$(git diff HEAD HEAD~ --name-only)
$temp=$files -split ' '
$count=$temp.Length
echo "Total changed $count files"
For ($i=0; $i -lt $temp.Length; $i++)
{
$name=$temp[$i]
echo "this is $name file"
if ($name -like 'ServerFolder/*') #if ServerFolder is a subfolder under a folder use "- like '*/ServerFolder/*'"
{
Write-Host "##vso[task.setvariable variable=severFolder;isOutput=true]True"
}
if ($name -like 'ClientFolder/*')
{
Write-Host "##vso[task.setvariable variable=clientFolder;isOutput=true]True"
}
}
name: taskVariable
- stage: 'Server'
condition:
- stage: 'Client'
condition:
Run Code Online (Sandbox Code Playgroud)
3、然后您可以为服务器和客户端阶段添加依赖关系和条件。请参阅此处的文档。检查下面的 yaml 示例:
引用条件中的输出变量的格式如下:dependencies.dependOnStageName.outputs['jobName.taskName.variableName']
- stage: ChangedFolders
jobs:
- job: preCheck
steps:
- powershell: |
...
name: taskVariable
- stage: 'Server'
dependsOn: preCheck
condition: eq(dependencies.ChangedFolders.outputs['preCheck.taskVariable.serverFolder'], 'True')
- stage: 'Client'
dependsOn: preCheck
condition: eq(dependencies.ChangedFolders.outputs['preCheck.taskVariable.clientFolder'], 'True')
Run Code Online (Sandbox Code Playgroud)
请让我知道,如果你有任何问题。
我正在发布对我有用的解决方案。我有 3 个阶段:服务器、客户端和部署。我已将同一分支上的两个管道的阶段分开。现在,我在一个管道中有服务器和部署阶段,在另一个管道中有客户端和部署阶段。另外,我在服务器端(Web Api)管道中使用了以下代码
paths:
exclude:
- folder Path for Client side /*
stages:
- stage: 'Server'
# steps for building server side code
- stage: 'Deploy'
# steps for Deploying server side code
Run Code Online (Sandbox Code Playgroud)
以及客户端管道中的以下代码
paths:
include:
- folder Path for Client side/*
stages:
- stage: 'Client'
# steps for building client side code
- stage: 'Deploy'
# steps for Deploying client side code
Run Code Online (Sandbox Code Playgroud)
现在它触发各自的管道并部署各自的构建。
| 归档时间: |
|
| 查看次数: |
7807 次 |
| 最近记录: |