@@ -1069,16 +1069,161 @@ build-push-windows-image:
1069
1069
paths :
1070
1070
- tags_to_sign_${WIN_VERSION}
1071
1071
1072
+ build-push-windows-fips-image :
1073
+ extends : .trigger-filter
1074
+ stage : release
1075
+ parallel :
1076
+ matrix :
1077
+ - WIN_VERSION : ["2019", "2022"]
1078
+ dependencies :
1079
+ - sign-exe
1080
+ tags :
1081
+ - splunk-otel-collector-windows${WIN_VERSION}
1082
+ retry : 2
1083
+ variables :
1084
+ ErrorActionPreference : stop
1085
+ before_script :
1086
+ - New-Item -Type dir .\cmd\otelcol\fips\dist
1087
+ - Copy-Item .\dist\signed\otelcol-fips_windows_amd64.exe .\cmd\otelcol\fips\dist\otelcol-fips_windows_amd64.exe
1088
+ - &get-base-image |
1089
+ if ($env:WIN_VERSION -eq "2019") {
1090
+ $BASE_IMAGE = $env:WIN_2019_BASE_IMAGE
1091
+ } else {
1092
+ $BASE_IMAGE = $env:WIN_2022_BASE_IMAGE
1093
+ }
1094
+ - |
1095
+ docker pull $BASE_IMAGE
1096
+ if ($LASTEXITCODE -ne 0) { exit 1 }
1097
+ - &delete-all-images-except-base |
1098
+ # Delete all images except the base image
1099
+ $base_id = $(docker images -q $BASE_IMAGE)
1100
+ foreach ($id in $(docker images -a -q | Get-Unique)) {
1101
+ if ($id -ne $base_id) {
1102
+ docker rmi -f $id
1103
+ }
1104
+ }
1105
+ - docker system prune --force
1106
+ script :
1107
+ - |
1108
+ docker login -u $env:CIRCLECI_QUAY_USERNAME -p $env:CIRCLECI_QUAY_PASSWORD quay.io
1109
+ if ($LASTEXITCODE -ne 0) { exit 1 }
1110
+ - |
1111
+ # Set env vars
1112
+ if ($env:CI_COMMIT_TAG) {
1113
+ $IMAGE_NAME = "quay.io/signalfx/splunk-otel-collector-fips"
1114
+ $OLD_IMAGE_NAME = "quay.io/signalfx/splunk-otel-collector-fips-windows"
1115
+ $tagNumber = $env:CI_COMMIT_TAG.TrimStart("v")
1116
+ $IMAGE_TAG = "${tagNumber}-${env:WIN_VERSION}"
1117
+ } else {
1118
+ $IMAGE_NAME = "quay.io/signalfx/splunk-otel-collector-fips-dev"
1119
+ $OLD_IMAGE_NAME = "quay.io/signalfx/splunk-otel-collector-fips-windows-dev"
1120
+ $IMAGE_TAG = "${env:CI_COMMIT_SHA}-${env:WIN_VERSION}"
1121
+ }
1122
+ $LATEST_TAG = ""
1123
+ if ($env:CI_COMMIT_BRANCH -eq "main" -or $env:CI_COMMIT_TAG -match '^v\d+\.\d+\.\d+$') {
1124
+ # Only push latest tag for main and stable releases
1125
+ $LATEST_TAG = "latest-${env:WIN_VERSION}"
1126
+ }
1127
+ - $JMX_METRIC_GATHERER_RELEASE = $(Get-Content packaging\jmx-metric-gatherer-release.txt)
1128
+ - |
1129
+ echo "Building ${IMAGE_NAME}:${IMAGE_TAG}"
1130
+ docker build -t ${IMAGE_NAME}:${IMAGE_TAG} --build-arg BASE_IMAGE=${BASE_IMAGE} --build-arg JMX_METRIC_GATHERER_RELEASE=${JMX_METRIC_GATHERER_RELEASE} -f .\cmd\otelcol\fips\Dockerfile.windows .\cmd\otelcol\fips
1131
+ if ($LASTEXITCODE -ne 0) { exit 1 }
1132
+ - |
1133
+ echo "Pushing ${IMAGE_NAME}:${IMAGE_TAG}"
1134
+ docker push ${IMAGE_NAME}:${IMAGE_TAG}
1135
+ if ($LASTEXITCODE -ne 0) { exit 1 }
1136
+ - |
1137
+ # DEPRECATED: Push image to the windows repo
1138
+ echo "Tagging and pushing ${OLD_IMAGE_NAME}:${IMAGE_TAG}"
1139
+ docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${OLD_IMAGE_NAME}:${IMAGE_TAG}
1140
+ if ($LASTEXITCODE -ne 0) { exit 1 }
1141
+ docker push ${OLD_IMAGE_NAME}:${IMAGE_TAG}
1142
+ if ($LASTEXITCODE -ne 0) { exit 1 }
1143
+ - |
1144
+ echo "Getting os.version from ${BASE_IMAGE}"
1145
+ $os_version = (docker manifest inspect $BASE_IMAGE | ConvertFrom-Json).manifests[0].platform."os.version"
1146
+ if ($LASTEXITCODE -ne 0) { exit 1 }
1147
+ echo "$os_version"
1148
+ - |
1149
+ echo "Creating and pushing ${IMAGE_NAME}:${IMAGE_TAG} manifest"
1150
+ docker manifest rm ${IMAGE_NAME}:${IMAGE_TAG}
1151
+ docker manifest create ${IMAGE_NAME}:${IMAGE_TAG} ${IMAGE_NAME}:${IMAGE_TAG}
1152
+ if ($LASTEXITCODE -ne 0) { exit 1 }
1153
+ docker manifest annotate --os "windows" --arch "amd64" --os-version ${os_version} ${IMAGE_NAME}:${IMAGE_TAG} ${IMAGE_NAME}:${IMAGE_TAG}
1154
+ if ($LASTEXITCODE -ne 0) { exit 1 }
1155
+ docker manifest push ${IMAGE_NAME}:${IMAGE_TAG} --purge
1156
+ if ($LASTEXITCODE -ne 0) { exit 1 }
1157
+ - |
1158
+ # DEPRECATED: Push manifest to the windows repo
1159
+ echo "Creating and pushing ${OLD_IMAGE_NAME}:${IMAGE_TAG} manifest"
1160
+ docker manifest rm ${OLD_IMAGE_NAME}:${IMAGE_TAG}
1161
+ docker manifest create ${OLD_IMAGE_NAME}:${IMAGE_TAG} ${OLD_IMAGE_NAME}:${IMAGE_TAG}
1162
+ if ($LASTEXITCODE -ne 0) { exit 1 }
1163
+ docker manifest annotate --os "windows" --arch "amd64" --os-version ${os_version} ${OLD_IMAGE_NAME}:${IMAGE_TAG} ${OLD_IMAGE_NAME}:${IMAGE_TAG}
1164
+ if ($LASTEXITCODE -ne 0) { exit 1 }
1165
+ docker manifest push ${OLD_IMAGE_NAME}:${IMAGE_TAG} --purge
1166
+ if ($LASTEXITCODE -ne 0) { exit 1 }
1167
+ - |
1168
+ if ($LATEST_TAG) {
1169
+ echo "Tagging and pushing ${IMAGE_NAME}:${LATEST_TAG}"
1170
+ docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${IMAGE_NAME}:${LATEST_TAG}
1171
+ if ($LASTEXITCODE -ne 0) { exit 1 }
1172
+ docker push ${IMAGE_NAME}:${LATEST_TAG}
1173
+ if ($LASTEXITCODE -ne 0) { exit 1 }
1174
+ echo "Creating and pushing ${IMAGE_NAME}:${LATEST_TAG} manifest"
1175
+ docker manifest rm ${IMAGE_NAME}:${LATEST_TAG}
1176
+ docker manifest create ${IMAGE_NAME}:${LATEST_TAG} ${IMAGE_NAME}:${LATEST_TAG}
1177
+ if ($LASTEXITCODE -ne 0) { exit 1 }
1178
+ docker manifest annotate --os "windows" --arch "amd64" --os-version ${os_version} ${IMAGE_NAME}:${LATEST_TAG} ${IMAGE_NAME}:${LATEST_TAG}
1179
+ if ($LASTEXITCODE -ne 0) { exit 1 }
1180
+ docker manifest push ${IMAGE_NAME}:${LATEST_TAG} --purge
1181
+ if ($LASTEXITCODE -ne 0) { exit 1 }
1182
+ }
1183
+ - |
1184
+ # DEPRECATED: Push latest tag to the windows repo
1185
+ if ($LATEST_TAG) {
1186
+ echo "Tagging and pushing ${OLD_IMAGE_NAME}:${LATEST_TAG}"
1187
+ docker tag ${OLD_IMAGE_NAME}:${IMAGE_TAG} ${OLD_IMAGE_NAME}:${LATEST_TAG}
1188
+ if ($LASTEXITCODE -ne 0) { exit 1 }
1189
+ docker push ${OLD_IMAGE_NAME}:${LATEST_TAG}
1190
+ if ($LASTEXITCODE -ne 0) { exit 1 }
1191
+ echo "Creating and pushing ${OLD_IMAGE_NAME}:${LATEST_TAG} manifest"
1192
+ docker manifest rm ${OLD_IMAGE_NAME}:${LATEST_TAG}
1193
+ docker manifest create ${OLD_IMAGE_NAME}:${LATEST_TAG} ${OLD_IMAGE_NAME}:${LATEST_TAG}
1194
+ if ($LASTEXITCODE -ne 0) { exit 1 }
1195
+ docker manifest annotate --os "windows" --arch "amd64" --os-version ${os_version} ${OLD_IMAGE_NAME}:${LATEST_TAG} ${OLD_IMAGE_NAME}:${LATEST_TAG}
1196
+ if ($LASTEXITCODE -ne 0) { exit 1 }
1197
+ docker manifest push ${OLD_IMAGE_NAME}:${LATEST_TAG} --purge
1198
+ if ($LASTEXITCODE -ne 0) { exit 1 }
1199
+ }
1200
+ - echo "${IMAGE_NAME}:${IMAGE_TAG}" > tags
1201
+ - echo "${OLD_IMAGE_NAME}:${IMAGE_TAG}" >> tags
1202
+ - (Get-Content -Raw -Path tags) -replace "`r`n", "`n"| Set-Content -NoNewline tags_to_sign_${env:WIN_VERSION}-fips
1203
+ after_script :
1204
+ - *get-base-image
1205
+ - *delete-all-images-except-base
1206
+ - docker system prune --force
1207
+ - |
1208
+ if (Test-Path -Path C:\Users\Administrator\Desktop\ops-scripts\docker-leak-check.exe) {
1209
+ C:\Users\Administrator\Desktop\ops-scripts\docker-leak-check.exe -remove
1210
+ }
1211
+ artifacts :
1212
+ paths :
1213
+ - tags_to_sign_${WIN_VERSION}-fips
1214
+
1072
1215
sign-windows-image :
1073
1216
extends : .sign-docker
1074
1217
stage : release
1075
1218
parallel :
1076
1219
matrix :
1077
1220
- WIN_VERSION : ["2019", "2022"]
1221
+ FIPS : ["-fips", ""]
1078
1222
needs :
1079
1223
- build-push-windows-image
1224
+ - build-push-windows-fips-image
1080
1225
before_script :
1081
- - mv tags_to_sign_${WIN_VERSION} tags_to_sign
1226
+ - mv tags_to_sign_${WIN_VERSION}${FIPS} tags_to_sign
1082
1227
1083
1228
release-debs :
1084
1229
extends :
@@ -1244,6 +1389,7 @@ push-multiarch-manifest:
1244
1389
parallel :
1245
1390
matrix :
1246
1391
- MANIFEST : [multiarch, windows_multiarch]
1392
+ FIPS : ["-fips",""]
1247
1393
needs :
1248
1394
- sign-linux-image
1249
1395
- sign-windows-image
@@ -1256,12 +1402,12 @@ push-multiarch-manifest:
1256
1402
- |
1257
1403
# Set env vars
1258
1404
if [[ -n "${CI_COMMIT_TAG:-}" ]]; then
1259
- MANIFEST_NAME="quay.io/signalfx/splunk-otel-collector"
1260
- WIN_MANIFEST_NAME="quay.io/signalfx/splunk-otel-collector-windows"
1405
+ MANIFEST_NAME="quay.io/signalfx/splunk-otel-collector${FIPS} "
1406
+ WIN_MANIFEST_NAME="quay.io/signalfx/splunk-otel-collector${FIPS} -windows"
1261
1407
MANIFEST_TAG=${CI_COMMIT_TAG#v}
1262
1408
else
1263
- MANIFEST_NAME="quay.io/signalfx/splunk-otel-collector-dev"
1264
- WIN_MANIFEST_NAME="quay.io/signalfx/splunk-otel-collector-windows-dev"
1409
+ MANIFEST_NAME="quay.io/signalfx/splunk-otel-collector${FIPS} -dev"
1410
+ WIN_MANIFEST_NAME="quay.io/signalfx/splunk-otel-collector${FIPS} -windows-dev"
1265
1411
MANIFEST_TAG=${CI_COMMIT_SHA}
1266
1412
fi
1267
1413
LATEST_TAG=""
@@ -1303,14 +1449,19 @@ push-multiarch-manifest:
1303
1449
echo "$json"
1304
1450
# Check number of images in the manifest
1305
1451
count=$( echo "$json" | jq -r ".manifests | length" )
1306
- if [[ "$MANIFEST" = "multiarch" && $count -ne 5 ]]; then
1452
+ if [[ "$MANIFEST" = "multiarch" && "$FIPS" == "" && $count -ne 5 ]]; then
1453
+ exit 1
1454
+ elif [[ "$MANIFEST" = "multiarch" && "$FIPS" == "-fips" && $count -ne 4 ]]; then
1307
1455
exit 1
1308
1456
elif [[ "$MANIFEST" = "windows_multiarch" && $count -ne 2 ]]; then
1309
1457
exit 1
1310
1458
fi
1311
1459
# Check the manifest for the linux images
1312
1460
if [[ "$MANIFEST" != "windows_multiarch" ]]; then
1313
1461
for arch in "amd64" "arm64" "ppc64le"; do
1462
+ if [[ "$FIPS" != "" && "$arch" == "ppc64le" ]]; then
1463
+ continue
1464
+ fi
1314
1465
found=$( echo "$json" | jq -r ".manifests[] | select(.platform.architecture == \"${arch}\" and .platform.os == \"linux\")" )
1315
1466
if [[ -z "$found" ]]; then
1316
1467
echo "linux/${arch} not found in ${MANIFEST_NAME}:${tag}"
@@ -1342,7 +1493,7 @@ push-multiarch-manifest:
1342
1493
fi
1343
1494
- mkdir -p dist
1344
1495
- echo "[${MANIFEST_NAME}@${digest}]" | tee dist/${MANIFEST}_digest.txt
1345
- - echo "${MANIFEST_NAME}:${MANIFEST_TAG}" > tags_to_sign_${MANIFEST}
1496
+ - echo "${MANIFEST_NAME}:${MANIFEST_TAG}" > tags_to_sign_${MANIFEST}${FIPS}
1346
1497
- if [[ "$CI_COMMIT_BRANCH" != "main" || "$MANIFEST" != "multiarch" ]]; then exit 0; fi
1347
1498
# Push the multiarch manifest for the main branch to the docker-test artifactory repo for xray scanning
1348
1499
# TODO: Add new job to trigger xray scanning for the manifest whenever it is supported
@@ -1354,18 +1505,19 @@ push-multiarch-manifest:
1354
1505
artifacts :
1355
1506
paths :
1356
1507
- dist/${MANIFEST}_digest.txt
1357
- - tags_to_sign_${MANIFEST}
1508
+ - tags_to_sign_${MANIFEST}${FIPS}
1358
1509
1359
1510
sign-multiarch-manifest :
1360
1511
extends : .sign-docker
1361
1512
stage : docker-manifest-release
1362
1513
parallel :
1363
1514
matrix :
1364
1515
- MANIFEST : [multiarch, windows_multiarch]
1516
+ FIPS : ["-fips",""]
1365
1517
needs :
1366
1518
- push-multiarch-manifest
1367
1519
before_script :
1368
- - mv tags_to_sign_${MANIFEST} tags_to_sign
1520
+ - mv tags_to_sign_${MANIFEST}${FIPS} tags_to_sign
1369
1521
1370
1522
xray-scan-docker :
1371
1523
only :
0 commit comments