Skip to content

Commit e0d8922

Browse files
Update common Docker engineering infrastructure from mcr.microsoft.com/dotnet-buildtools/image-builder@sha256:06beae0a2edf332a71fcc359b8e1e305fabbce007662125dabb17c3ac1dc9826
1 parent 2d85155 commit e0d8922

9 files changed

Lines changed: 53 additions & 1 deletion

File tree

eng/docker-tools/CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,15 @@ All breaking changes and new features in `eng/docker-tools` will be documented i
44

55
---
66

7+
## 2026-08-10: Pre-ImageBuilder build customization
8+
9+
Build pipeline templates now accept `customPreImageBuilderBuildSteps`. These steps run after
10+
ImageBuilder is available but before repository content is copied into the Linux ImageBuilder
11+
image. Repositories can use the hook to stage files into Docker build contexts, such as shared
12+
`eng/common` content required by Dockerfiles.
13+
14+
---
15+
716
## 2026-06-11: Configurable per-registry referrer-lookup rate limit
817

918
- Issue: [#2141](https://github.com/dotnet/docker-tools/issues/2141)

eng/docker-tools/DEV-GUIDE.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,22 @@ To force a rebuild regardless of cache state, set the `noCache` parameter to `tr
389389

390390
## Common Customization Patterns
391391

392+
### Pattern: Staging Files into Docker Build Contexts
393+
394+
Use `customPreImageBuilderBuildSteps` to modify repository content immediately before the
395+
repository is copied into the Linux ImageBuilder image. For example, a repository can stage
396+
shared `eng/common` files next to Dockerfiles whose build contexts cannot access the repository
397+
root:
398+
399+
```yaml
400+
customPreImageBuilderBuildSteps:
401+
- powershell: ./eng/Stage-EngCommon.ps1
402+
displayName: Stage eng/common in Docker Build Contexts
403+
```
404+
405+
The steps run once per Linux build job, after ImageBuilder is available and before the
406+
`Dockerfile.WithRepo` image is built.
407+
392408
### Pattern: Adding Build Arguments
393409

394410
Pass Dockerfile `ARG` values via ImageBuilder:

eng/docker-tools/templates/jobs/build-images.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ parameters:
1010
# Custom steps that run after ImageBuilder is set up but before the build starts.
1111
# Use for build-specific initialization (e.g., setting variables, additional setup).
1212
customBuildInitSteps: []
13+
# Custom steps that modify repository content before it is copied into the ImageBuilder image.
14+
customPreImageBuilderBuildSteps: []
1315
publishConfig: null
1416
versionsRepoRef: ""
1517
noCache: false
@@ -41,6 +43,7 @@ jobs:
4143
versionsRepoRef: ${{ parameters.versionsRepoRef }}
4244
cleanupDocker: true
4345
customInitSteps: ${{ parameters.customInitSteps }}
46+
customPreImageBuilderBuildSteps: ${{ parameters.customPreImageBuilderBuildSteps }}
4447
- ${{ parameters.customBuildInitSteps }}
4548
- template: /eng/docker-tools/templates/steps/reference-service-connections.yml@self
4649
parameters:

eng/docker-tools/templates/stages/build-and-test.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ parameters:
1313
# Custom steps that run after ImageBuilder is set up but before the build starts.
1414
# Use for build-specific initialization (e.g., setting variables, additional setup).
1515
customBuildInitSteps: []
16+
# Custom steps that modify repository content before it is copied into the ImageBuilder image.
17+
customPreImageBuilderBuildSteps: []
1618
customTestInitSteps: []
1719
sourceBuildPipelineRunId: ""
1820
# When true, the Post-Build stage runs even if the Build stage failed (succeededOrFailed).
@@ -113,6 +115,7 @@ stages:
113115
versionsRepoRef: ${{ parameters.versionsRepoRef }}
114116
customInitSteps: ${{ parameters.customInitSteps }}
115117
customBuildInitSteps: ${{ parameters.customBuildInitSteps }}
118+
customPreImageBuilderBuildSteps: ${{ parameters.customPreImageBuilderBuildSteps }}
116119
noCache: ${{ parameters.noCache }}
117120
publishConfig: ${{ parameters.publishConfig }}
118121
internalProjectName: ${{ parameters.internalProjectName }}
@@ -128,6 +131,7 @@ stages:
128131
versionsRepoRef: ${{ parameters.versionsRepoRef }}
129132
customInitSteps: ${{ parameters.customInitSteps }}
130133
customBuildInitSteps: ${{ parameters.customBuildInitSteps }}
134+
customPreImageBuilderBuildSteps: ${{ parameters.customPreImageBuilderBuildSteps }}
131135
noCache: ${{ parameters.noCache }}
132136
publishConfig: ${{ parameters.publishConfig }}
133137
internalProjectName: ${{ parameters.internalProjectName }}
@@ -143,6 +147,7 @@ stages:
143147
versionsRepoRef: ${{ parameters.versionsRepoRef }}
144148
customInitSteps: ${{ parameters.customInitSteps }}
145149
customBuildInitSteps: ${{ parameters.customBuildInitSteps }}
150+
customPreImageBuilderBuildSteps: ${{ parameters.customPreImageBuilderBuildSteps }}
146151
noCache: ${{ parameters.noCache }}
147152
publishConfig: ${{ parameters.publishConfig }}
148153
internalProjectName: ${{ parameters.internalProjectName }}
@@ -158,6 +163,7 @@ stages:
158163
versionsRepoRef: ${{ parameters.versionsRepoRef }}
159164
customInitSteps: ${{ parameters.customInitSteps }}
160165
customBuildInitSteps: ${{ parameters.customBuildInitSteps }}
166+
customPreImageBuilderBuildSteps: ${{ parameters.customPreImageBuilderBuildSteps }}
161167
noCache: ${{ parameters.noCache }}
162168
publishConfig: ${{ parameters.publishConfig }}
163169
internalProjectName: ${{ parameters.internalProjectName }}
@@ -173,6 +179,7 @@ stages:
173179
versionsRepoRef: ${{ parameters.versionsRepoRef }}
174180
customInitSteps: ${{ parameters.customInitSteps }}
175181
customBuildInitSteps: ${{ parameters.customBuildInitSteps }}
182+
customPreImageBuilderBuildSteps: ${{ parameters.customPreImageBuilderBuildSteps }}
176183
noCache: ${{ parameters.noCache }}
177184
publishConfig: ${{ parameters.publishConfig }}
178185
internalProjectName: ${{ parameters.internalProjectName }}
@@ -188,6 +195,7 @@ stages:
188195
versionsRepoRef: ${{ parameters.versionsRepoRef }}
189196
customInitSteps: ${{ parameters.customInitSteps }}
190197
customBuildInitSteps: ${{ parameters.customBuildInitSteps }}
198+
customPreImageBuilderBuildSteps: ${{ parameters.customPreImageBuilderBuildSteps }}
191199
noCache: ${{ parameters.noCache }}
192200
publishConfig: ${{ parameters.publishConfig }}
193201
internalProjectName: ${{ parameters.internalProjectName }}
@@ -203,6 +211,7 @@ stages:
203211
versionsRepoRef: ${{ parameters.versionsRepoRef }}
204212
customInitSteps: ${{ parameters.customInitSteps }}
205213
customBuildInitSteps: ${{ parameters.customBuildInitSteps }}
214+
customPreImageBuilderBuildSteps: ${{ parameters.customPreImageBuilderBuildSteps }}
206215
noCache: ${{ parameters.noCache }}
207216
publishConfig: ${{ parameters.publishConfig }}
208217
internalProjectName: ${{ parameters.internalProjectName }}

eng/docker-tools/templates/stages/dotnet/build-and-test.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ parameters:
2929
linuxArmBuildJobTimeout: 60
3030
windowsAmdBuildJobTimeout: 60
3131
customBuildInitSteps: []
32+
customPreImageBuilderBuildSteps: []
3233

3334
# Test parameters
3435
testMatrixType: platformVersionedOs
@@ -58,6 +59,7 @@ stages:
5859
testMatrixCustomBuildLegGroupArgs: ${{ parameters.testMatrixCustomBuildLegGroupArgs }}
5960
customCopyBaseImagesInitSteps: ${{ parameters.customCopyBaseImagesInitSteps}}
6061
customBuildInitSteps: ${{ parameters.customBuildInitSteps }}
62+
customPreImageBuilderBuildSteps: ${{ parameters.customPreImageBuilderBuildSteps }}
6163
customInitSteps: ${{ parameters.customInitSteps }}
6264
customTestInitSteps: ${{ parameters.customTestInitSteps }}
6365
windowsAmdBuildJobTimeout: ${{ parameters.windowsAmdBuildJobTimeout }}

eng/docker-tools/templates/stages/dotnet/build-test-publish-repo.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ parameters:
2121
linuxArmBuildJobTimeout: 60
2222
windowsAmdBuildJobTimeout: 60
2323
customBuildInitSteps: []
24+
customPreImageBuilderBuildSteps: []
2425

2526
# Test parameters
2627
testMatrixType: platformVersionedOs
@@ -60,6 +61,7 @@ stages:
6061
linuxArmBuildJobTimeout: ${{ parameters.linuxArmBuildJobTimeout }}
6162
windowsAmdBuildJobTimeout: ${{ parameters.windowsAmdBuildJobTimeout }}
6263
customBuildInitSteps: ${{ parameters.customBuildInitSteps }}
64+
customPreImageBuilderBuildSteps: ${{ parameters.customPreImageBuilderBuildSteps }}
6365
customInitSteps: ${{ parameters.customInitSteps }}
6466
# Test
6567
sourceBuildPipelineRunId: ${{ parameters.sourceBuildPipelineRunId }}

eng/docker-tools/templates/steps/init-common.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ parameters:
3434
type: stepList
3535
default: []
3636

37+
# Custom steps that modify repository content before it is copied into the ImageBuilder image.
38+
- name: customPreImageBuilderBuildSteps
39+
type: stepList
40+
default: []
41+
3742
# Registry and authentication configuration for publishing images.
3843
# Contains server URLs, repo prefixes, subscriptions, and resource groups.
3944
# When null, build/publish steps that require registry access will be skipped.
@@ -245,3 +250,4 @@ steps:
245250
publishConfig: ${{ parameters.publishConfig }}
246251
condition: ${{ parameters.condition }}
247252
customInitSteps: ${{ parameters.customInitSteps }}
253+
customPreImageBuilderBuildSteps: ${{ parameters.customPreImageBuilderBuildSteps }}

eng/docker-tools/templates/steps/init-imagebuilder.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ parameters:
2121
type: stepList
2222
default: []
2323

24+
- name: customPreImageBuilderBuildSteps
25+
type: stepList
26+
default: []
27+
2428
steps:
2529
# Custom ImageBuilder setup (e.g., bootstrap from source)
2630
- ${{ if gt(length(parameters.customInitSteps), 0) }}:
@@ -67,6 +71,7 @@ steps:
6771
# The withrepo image layers the checked-out repository into the ImageBuilder
6872
# container at /repo, so ImageBuilder can access manifests and Dockerfiles
6973
- ${{ if eq(parameters.dockerClientOS, 'linux') }}:
74+
- ${{ parameters.customPreImageBuilderBuildSteps }}
7075
- script: >-
7176
docker build
7277
-t $(imageNames.imageBuilder.withrepo)

eng/docker-tools/templates/variables/docker-images.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
variables:
2-
imageNames.imageBuilderName: mcr.microsoft.com/dotnet-buildtools/image-builder@sha256:79ee50949017dfce2212d66aa473e4361351b2aefda2c5df1dab566f20b68001
2+
imageNames.imageBuilderName: mcr.microsoft.com/dotnet-buildtools/image-builder@sha256:06beae0a2edf332a71fcc359b8e1e305fabbce007662125dabb17c3ac1dc9826
33
imageNames.imageBuilder: $(imageNames.imageBuilderName)
44
imageNames.imageBuilder.withrepo: imagebuilder-withrepo:$(Build.BuildId)-$(System.JobId)
55
imageNames.testRunner: mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux3.0-docker-testrunner

0 commit comments

Comments
 (0)