Skip to content

Commit 20e2edd

Browse files
Update common Docker engineering infrastructure with latest
1 parent f5789ab commit 20e2edd

26 files changed

+524
-118
lines changed

eng/docker-tools/DEV-GUIDE.md

Lines changed: 387 additions & 0 deletions
Large diffs are not rendered by default.

eng/docker-tools/readme.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,6 @@
2525

2626
!!! Changes made in this directory are subject to being overwritten by automation !!!
2727

28-
The files in this directory are shared by all .NET Docker repos. If you need to make changes to these files, open an issue or submit a pull request in https://github.com/dotnet/docker-tools.
28+
The files in this directory are shared by all .NET Docker repos. If you need to make changes to these files, open an issue or submit a pull request in https://github.com/dotnet/docker-tools.
29+
30+
For guidance on using this infrastructure, see the [Developer Guide](DEV-GUIDE.md).

eng/docker-tools/templates/1es.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,15 @@ parameters:
3939
- name: enableSbom
4040
type: boolean
4141
default: false
42+
# Network isolation policy that will be enabled for jobs. The default policy
43+
# allows all outbound connections except for public package feeds and known
44+
# malicious endpoints. If this policy breaks the build, then it can be set to
45+
# "Permissive" temporarily until external dependencies are resolved.
46+
# See the network isolation documentation for more details:
47+
# https://eng.ms/docs/coreai/devdiv/one-engineering-system-1es/1es-build/cloudbuild/security/1espt-network-isolation
48+
- name: networkIsolationPolicy
49+
type: string
50+
default: Permissive,CFSClean
4251

4352
resources:
4453
repositories:
@@ -53,6 +62,8 @@ extends:
5362
baseTemplate: v1/1ES.${{ iif(contains(variables['Build.DefinitionName'], '-official'), 'Official', 'Unofficial') }}.PipelineTemplate.yml@1ESPipelineTemplates
5463
templateParameters:
5564
pool: ${{ parameters.pool }}
65+
settings:
66+
networkIsolationPolicy: ${{ parameters.networkIsolationPolicy }}
5667
sdl:
5768
sbom:
5869
enabled: ${{ parameters.enableSbom }}

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

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ jobs:
3232
- ${{ parameters.commonInitStepsForMatrixAndBuild }}
3333
- template: /eng/docker-tools/templates/jobs/${{ format('../steps/init-docker-{0}.yml', parameters.dockerClientOS) }}@self
3434
parameters:
35+
publishConfig: ${{ parameters.publishConfig }}
3536
cleanupDocker: true
3637
- ${{ parameters.customInitSteps }}
3738
- template: /eng/docker-tools/templates/steps/set-image-info-path-var.yml@self
@@ -51,7 +52,7 @@ jobs:
5152
# the environment variable for us.
5253
$imageBuilderBuildArgs = "$env:IMAGEBUILDERBUILDARGS $env:IMAGEBUILDER_QUEUEARGS --image-info-output-path $(imageInfoContainerDir)/$(legName)-image-info.json $(commonMatrixAndBuildOptions)"
5354
if ($env:SYSTEM_TEAMPROJECT -eq "${{ parameters.internalProjectName }}" -and $env:BUILD_REASON -ne "PullRequest") {
54-
$imageBuilderBuildArgs = "$imageBuilderBuildArgs --repo-prefix ${{ parameters.publishConfig.buildAcr.repoPrefix }} --push"
55+
$imageBuilderBuildArgs = "$imageBuilderBuildArgs --repo-prefix ${{ parameters.publishConfig.BuildRegistry.repoPrefix }} --push"
5556
}
5657
5758
# If the pipeline isn't configured to disable the cache and a build variable hasn't been set to disable the cache
@@ -66,14 +67,8 @@ jobs:
6667
parameters:
6768
name: BuildImages
6869
displayName: Build Images
69-
serviceConnections:
70-
# "name" here refers to the argument name, not the service connection name.
71-
# It should probably be changed to "argName".
72-
- name: acr
73-
id: ${{ parameters.publishConfig.buildAcr.serviceConnection.id }}
74-
tenantId: ${{ parameters.publishConfig.buildAcr.serviceConnection.tenantId }}
75-
clientId: ${{ parameters.publishConfig.buildAcr.serviceConnection.clientId }}
76-
- ${{ if parameters.storageAccountServiceConnection }}:
70+
${{ if parameters.storageAccountServiceConnection }}:
71+
serviceConnections:
7772
- name: storage
7873
id: ${{ parameters.storageAccountServiceConnection.id }}
7974
tenantId: ${{ parameters.storageAccountServiceConnection.tenantId }}
@@ -89,8 +84,8 @@ jobs:
8984
--architecture $(architecture)
9085
--retry
9186
--digests-out-var 'builtImages'
92-
--acr-subscription '${{ parameters.publishConfig.buildAcr.subscription }}'
93-
--acr-resource-group '${{ parameters.publishConfig.buildAcr.resourceGroup }}'
87+
--acr-subscription '${{ parameters.publishConfig.BuildRegistry.subscription }}'
88+
--acr-resource-group '${{ parameters.publishConfig.BuildRegistry.resourceGroup }}'
9489
$(manifestVariables)
9590
$(imageBuilderBuildArgs)
9691
- template: /eng/docker-tools/templates/steps/publish-artifact.yml@self
@@ -104,12 +99,12 @@ jobs:
10499
- powershell: |
105100
$images = "$(BuildImages.builtImages)"
106101
if (-not $images) { return 0 }
107-
$syftImageName = "${{ parameters.publishConfig.publicMirrorAcr.server }}/$(imageNames.syft)"
102+
$syftImageName = "${{ parameters.publishConfig.PublicMirrorRegistry.server }}/$(imageNames.syft)"
108103
& $(engDockerToolsPath)/Pull-Image.ps1 $syftImageName
109104
$images -Split ',' | ForEach-Object {
110105
echo "Generating SBOM for $_";
111106
$targetImageName = "$_";
112-
$formattedImageName = $targetImageName.Replace('${{ parameters.publishConfig.buildAcr.server }}/${{ parameters.publishConfig.buildAcr.repoPrefix }}', "").Replace('/', '_').Replace(':', '_');
107+
$formattedImageName = $targetImageName.Replace('${{ parameters.publishConfig.BuildRegistry.server }}/${{ parameters.publishConfig.BuildRegistry.repoPrefix }}', "").Replace('/', '_').Replace(':', '_');
113108
$sbomChildDir = "$(sbomDirectory)/$formattedImageName";
114109
New-Item -Type Directory -Path $sbomChildDir > $null;
115110
docker build --output=$sbomChildDir -f $(engDockerToolsPath)/Dockerfile.syft --build-arg SYFT_IMAGE_NAME=$syftImageName --build-arg TARGET_IMAGE_NAME=$targetImageName -t syft-sbom $(engDockerToolsPath);

eng/docker-tools/templates/jobs/copy-base-images-staging.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
parameters:
2424
name: ${{ parameters.name }}
2525
pool: ${{ parameters.pool }}
26+
publishConfig: ${{ parameters.publishConfig }}
2627
customInitSteps: ${{ parameters.customInitSteps }}
2728
additionalOptions: ${{ parameters.additionalOptions }}
28-
acr: ${{ parameters.publishConfig.internalMirrorAcr }}
29-
repoPrefix: ${{ parameters.publishConfig.internalMirrorAcr.repoPrefix }}
29+
acr: ${{ parameters.publishConfig.InternalMirrorRegistry }}

eng/docker-tools/templates/jobs/copy-base-images.yml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ parameters:
55
- name: pool
66
type: object
77
default: {}
8-
- name: acr
8+
- name: publishConfig
99
type: object
1010
default: null
11-
- name: repoPrefix
12-
type: string
11+
- name: acr
12+
type: object
1313
default: null
1414
- name: customInitSteps
1515
type: stepList
@@ -29,11 +29,12 @@ jobs:
2929
pool: ${{ parameters.pool }}
3030
steps:
3131
- template: /eng/docker-tools/templates/steps/init-docker-linux.yml@self
32+
parameters:
33+
publishConfig: ${{ parameters.publishConfig }}
3234
- ${{ parameters.customInitSteps }}
3335
- template: /eng/docker-tools/templates/steps/copy-base-images.yml@self
3436
parameters:
3537
acr: ${{ parameters.acr }}
36-
repoPrefix: ${{ parameters.repoPrefix }}
3738
additionalOptions: ${{ parameters.additionalOptions }}
3839
continueOnError: ${{ parameters.continueOnError }}
3940
forceDryRun: ${{ parameters.forceDryRun }}

eng/docker-tools/templates/jobs/generate-matrix.yml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,5 @@ jobs:
6363
parameters:
6464
name: matrix
6565
displayName: Generate ${{ parameters.matrixType }} Matrix
66-
serviceConnections:
67-
- name: acr
68-
tenantId: $(build.serviceConnection.tenantId)
69-
clientId: $(build.serviceConnection.clientId)
70-
id: $(build.serviceConnection.id)
7166
internalProjectName: internal
7267
args: $(generateBuildMatrixCommand)

eng/docker-tools/templates/jobs/publish.yml

Lines changed: 15 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121
- name: imageBuilder.commonCmdArgs
2222
value: >-
2323
--manifest '$(manifest)'
24-
--registry-override '${{ parameters.publishConfig.publishAcr.server }}'
24+
--registry-override '${{ parameters.publishConfig.PublishRegistry.server }}'
2525
$(manifestVariables)
2626
$(imageBuilder.queueArgs)
2727
- name: publishNotificationRepoName
@@ -53,6 +53,8 @@ jobs:
5353
- template: /eng/docker-tools/templates/steps/retain-build.yml@self
5454

5555
- template: /eng/docker-tools/templates/steps/init-docker-linux.yml@self
56+
parameters:
57+
publishConfig: ${{ parameters.publishConfig }}
5658

5759
- pwsh: |
5860
$azdoOrgName = Split-Path -Leaf $Env:SYSTEM_COLLECTIONURI
@@ -95,21 +97,16 @@ jobs:
9597
- template: /eng/docker-tools/templates/steps/run-imagebuilder.yml@self
9698
parameters:
9799
displayName: Copy Images
98-
serviceConnections:
99-
- name: acr
100-
id: ${{ parameters.publishConfig.publishAcr.serviceConnection.id }}
101-
tenantId: ${{ parameters.publishConfig.publishAcr.serviceConnection.tenantId }}
102-
clientId: ${{ parameters.publishConfig.publishAcr.serviceConnection.clientId }}
103100
internalProjectName: ${{ parameters.internalProjectName }}
104101
args: >-
105102
copyAcrImages
106-
'${{ parameters.publishConfig.buildAcr.subscription }}'
107-
'${{ parameters.publishConfig.buildAcr.resourceGroup }}'
108-
'${{ parameters.publishConfig.buildAcr.repoPrefix }}'
109-
'${{ parameters.publishConfig.buildAcr.server }}'
103+
'${{ parameters.publishConfig.BuildRegistry.subscription }}'
104+
'${{ parameters.publishConfig.BuildRegistry.resourceGroup }}'
105+
'${{ parameters.publishConfig.BuildRegistry.repoPrefix }}'
106+
'${{ parameters.publishConfig.BuildRegistry.server }}'
110107
--os-type '*'
111108
--architecture '*'
112-
--repo-prefix '${{ parameters.publishConfig.publishAcr.repoPrefix }}'
109+
--repo-prefix '${{ parameters.publishConfig.PublishRegistry.repoPrefix }}'
113110
--image-info '$(imageInfoContainerDir)/image-info.json'
114111
$(dryRunArg)
115112
$(imageBuilder.pathArgs)
@@ -118,17 +115,12 @@ jobs:
118115
- template: /eng/docker-tools/templates/steps/run-imagebuilder.yml@self
119116
parameters:
120117
displayName: Publish Manifest
121-
serviceConnections:
122-
- name: acr
123-
id: ${{ parameters.publishConfig.publishAcr.serviceConnection.id }}
124-
tenantId: ${{ parameters.publishConfig.publishAcr.serviceConnection.tenantId }}
125-
clientId: ${{ parameters.publishConfig.publishAcr.serviceConnection.clientId }}
126118
internalProjectName: ${{ parameters.internalProjectName }}
127119
dockerClientOS: ${{ parameters.dockerClientOS }}
128120
args: >-
129121
publishManifest
130122
'$(imageInfoContainerDir)/image-info.json'
131-
--repo-prefix '${{ parameters.publishConfig.publishAcr.repoPrefix }}'
123+
--repo-prefix '${{ parameters.publishConfig.PublishRegistry.repoPrefix }}'
132124
--os-type '*'
133125
--architecture '*'
134126
$(dryRunArg)
@@ -208,17 +200,12 @@ jobs:
208200
- template: /eng/docker-tools/templates/steps/run-imagebuilder.yml@self
209201
parameters:
210202
displayName: Generate EOL Annotation Data
211-
serviceConnections:
212-
- name: acr
213-
id: ${{ parameters.publishConfig.publishAcr.serviceConnection.id }}
214-
tenantId: ${{ parameters.publishConfig.publishAcr.serviceConnection.tenantId }}
215-
clientId: ${{ parameters.publishConfig.publishAcr.serviceConnection.clientId }}
216203
internalProjectName: internal
217204
condition: and(succeeded(), eq(variables['publishEolAnnotations'], 'true'))
218205
args: >-
219206
generateEolAnnotationDataForPublish
220-
'${{ parameters.publishConfig.publishAcr.server }}'
221-
'${{ parameters.publishConfig.publishAcr.repoPrefix }}'
207+
'${{ parameters.publishConfig.PublishRegistry.server }}'
208+
'${{ parameters.publishConfig.PublishRegistry.repoPrefix }}'
222209
'$(artifactsPath)/eol-annotation-data/eol-annotation-data.json'
223210
'$(imageInfoContainerDir)/full-image-info-orig.json'
224211
'$(imageInfoContainerDir)/full-image-info-new.json'
@@ -236,7 +223,7 @@ jobs:
236223

237224
- template: /eng/docker-tools/templates/steps/annotate-eol-digests.yml@self
238225
parameters:
239-
acr: ${{ parameters.publishConfig.publishAcr }}
226+
acr: ${{ parameters.publishConfig.PublishRegistry }}
240227
dataFile: $(artifactsPath)/eol-annotation-data/eol-annotation-data.json
241228

242229
- script: >
@@ -275,7 +262,7 @@ jobs:
275262
$(gitHubNotificationsRepoInfo.authArgs)
276263
'$(gitHubNotificationsRepoInfo.org)'
277264
'$(gitHubNotificationsRepoInfo.repo)'
278-
--repo-prefix '${{ parameters.publishConfig.publishAcr.repoPrefix }}'
265+
--repo-prefix '${{ parameters.publishConfig.PublishRegistry.repoPrefix }}'
279266
--task "🟪 Copy Images"
280267
--task "🟪 Publish Manifest"
281268
--task "🟪 Wait for Image Ingestion"
@@ -284,8 +271,8 @@ jobs:
284271
--task "🟪 Publish Image Info"
285272
--task "🟪 Ingest Kusto Image Info"
286273
--task "🟪 Generate EOL Annotation Data"
287-
--task "🟪 Annotate EOL Images (${{ parameters.publishConfig.publishAcr.server }})"
288-
--task "🟪 Wait for Annotation Ingestion (${{ parameters.publishConfig.publishAcr.server }})"
274+
--task "🟪 Annotate EOL Images (${{ parameters.publishConfig.PublishRegistry.server }})"
275+
--task "🟪 Wait for Annotation Ingestion (${{ parameters.publishConfig.PublishRegistry.server }})"
289276
$(dryRunArg)
290277
$(imageBuilder.commonCmdArgs)
291278
displayName: Post Publish Notification

eng/docker-tools/templates/stages/dotnet/publish-config-nonprod.yml

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,12 @@ stages:
4747
internalProjectName: "internal"
4848
publicProjectName: "public"
4949

50+
# publishConfig schema is defined in src/ImageBuilder/Configuration/PublishConfiguration.cs.
51+
# This will get converted to JSON and placed in appsettings.json to be loaded by ImageBuilder at runtime.
5052
publishConfig:
51-
internalMirrorAcr:
53+
InternalMirrorRegistry:
5254
server: $(acr-staging-test.server)
53-
repoPrefix: $(mirrorRepoPrefix)
55+
repoPrefix: $(internalMirrorRepoPrefix)
5456
resourceGroup: $(testResourceGroup)
5557
subscription: $(testSubscription)
5658
serviceConnection:
@@ -59,8 +61,9 @@ stages:
5961
clientId: $(internal-mirror-test.serviceConnection.clientId)
6062
tenantId: $(testTenant)
6163

62-
publicMirrorAcr:
64+
PublicMirrorRegistry:
6365
server: $(public-mirror.server)
66+
repoPrefix: $(publicMirrorRepoPrefix)
6467
resourceGroup: $(public-mirror.resourceGroup)
6568
subscription: $(public-mirror.subscription)
6669
serviceConnection:
@@ -69,7 +72,7 @@ stages:
6972
tenantId: $(public-mirror.serviceConnection.tenantId)
7073
clientId: $(public-mirror.serviceConnection.clientId)
7174

72-
buildAcr:
75+
BuildRegistry:
7376
server: $(acr-staging-test.server)
7477
resourceGroup: $(testResourceGroup)
7578
subscription: $(testSubscription)
@@ -92,7 +95,7 @@ stages:
9295
clientId: $(test-nonprod.serviceConnection.clientId)
9396
tenantId: $(testTenant)
9497

95-
publishAcr:
98+
PublishRegistry:
9699
server: $(acr-test.server)
97100
resourceGroup: $(testResourceGroup)
98101
subscription: $(testSubscription)

eng/docker-tools/templates/stages/dotnet/publish-config-prod.yml

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,12 @@ stages:
4747
internalProjectName: "internal"
4848
publicProjectName: "public"
4949

50+
# publishConfig schema is defined in src/ImageBuilder/Configuration/PublishConfiguration.cs.
51+
# This will get converted to JSON and placed in appsettings.json to be loaded by ImageBuilder at runtime.
5052
publishConfig:
51-
internalMirrorAcr:
53+
InternalMirrorRegistry:
5254
server: $(acr-staging.server)
53-
repoPrefix: $(mirrorRepoPrefix)
55+
repoPrefix: $(internalMirrorRepoPrefix)
5456
resourceGroup: $(acr-staging.resourceGroup)
5557
subscription: $(acr-staging.subscription)
5658
serviceConnection:
@@ -59,8 +61,9 @@ stages:
5961
clientId: $(internal-mirror.serviceConnection.clientId)
6062
tenantId: $(internal-mirror.serviceConnection.tenantId)
6163

62-
publicMirrorAcr:
64+
PublicMirrorRegistry:
6365
server: $(public-mirror.server)
66+
repoPrefix: $(publicMirrorRepoPrefix)
6467
resourceGroup: $(public-mirror.resourceGroup)
6568
subscription: $(public-mirror.subscription)
6669
serviceConnection:
@@ -69,7 +72,7 @@ stages:
6972
tenantId: $(public-mirror.serviceConnection.tenantId)
7073
clientId: $(public-mirror.serviceConnection.clientId)
7174

72-
buildAcr:
75+
BuildRegistry:
7376
server: $(acr-staging.server)
7477
resourceGroup: $(acr-staging.resourceGroup)
7578
subscription: $(acr-staging.subscription)
@@ -92,7 +95,7 @@ stages:
9295
clientId: $(test.serviceConnection.clientId)
9396
tenantId: $(test.serviceConnection.tenantId)
9497

95-
publishAcr:
98+
PublishRegistry:
9699
server: $(acr.server)
97100
resourceGroup: $(acr.resourceGroup)
98101
subscription: $(acr.subscription)

0 commit comments

Comments
 (0)