规划CI管道以构建和推送docker容器

规划CI管道以构建和推送docker容器,docker,kubernetes,azure-devops,azure-pipelines,Docker,Kubernetes,Azure Devops,Azure Pipelines,我正在创建一个可以重用的管道来构建docker映像,并将该映像推送到azure容器注册表。下面是我的存储库的树结构: ───repo ├── app1 │ ├── dir1 │ ├── dockerfile │ ├── file1 │ └── file2 ├── app2 │ ├── dir1 │ ├── dockerfile │ ├── file1 │ └── file2

我正在创建一个可以重用的管道来构建docker映像,并将该映像推送到azure容器注册表。下面是我的存储库的树结构:

───repo
    ├── app1
    │   ├── dir1
    │   ├── dockerfile
    │   ├── file1 
    │   └── file2
    ├── app2
    │   ├── dir1
    │   ├── dockerfile
    │   ├── file1 
    │   └── file2
    ├── app3
    │   ├── dir1
    │   ├── dockerfile
    │   ├── file1 
    │   └── file2
当管道运行时,如果开发人员更改了app1目录中的file1,那么管道知道需要使用app1目录中的dockerfile构建映像,我如何规划ci


注意:我正在Azure DevOps中构建管道。

您可以使用一个简单的PS脚本,使用git确定更改了哪个文件夹,并使用项目名称和
true设置一个构建变量:

$files=$(git diff HEAD HEAD~ --name-only)
$temp=$files -split ' '
$count=$temp.Length
Write-Host "Total changed $count files"
For ($i=0; $i -lt $temp.Length; $i++)
{
  $name=$temp[$i]
  Write-Host "this is $name file"
  $project = $name.Split('/')[0]
  Write-Host "##vso[task.setvariable variable=$project]true"
}
现在,对于每个已更改的项目,您都有一个带有项目名称和值
true
的变量

因此,在docker构建任务中,您可以使用。例如-对于
app1
步骤:

and(succeeded(), eq(variables['app1'], 'true'))

请在此处查看可能的GitHub操作实现:(在Azure DevOps中应该很容易进行类似操作)并在此处写下: