规划CI管道以构建和推送docker容器
我正在创建一个可以重用的管道来构建docker映像,并将该映像推送到azure容器注册表。下面是我的存储库的树结构:规划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
───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中应该很容易进行类似操作)并在此处写下: