@@ -210,15 +210,20 @@ build-linux-image:
210
210
stage : package
211
211
dependencies :
212
212
- compile
213
+ parallel :
214
+ matrix :
215
+ - ARCH : [amd64, arm64]
213
216
retry : 2
214
217
script :
215
- - make docker-otelcol SKIP_COMPILE=true
218
+ - make docker-otelcol ARCH=${ARCH} SKIP_COMPILE=true
219
+ - arch=$( docker inspect --format='{{.Architecture}}' otelcol:${ARCH} )
220
+ - if [[ "$arch" != "$ARCH" ]]; then exit 1; fi
216
221
after_script :
217
222
- mkdir -p dist
218
- - docker save -o dist/otelcol.tar otelcol:latest
223
+ - docker save -o dist/otelcol-${ARCH} .tar otelcol:${ARCH}
219
224
artifacts :
220
225
paths :
221
- - dist/otelcol.tar
226
+ - dist/otelcol-* .tar
222
227
223
228
.build-deb-rpm :
224
229
only :
@@ -287,31 +292,55 @@ push-linux-image:
287
292
- build-linux-image
288
293
retry : 2
289
294
before_script :
290
- - docker load -i dist/otelcol.tar
295
+ - docker load -i dist/otelcol-amd64.tar
296
+ - docker load -i dist/otelcol-arm64.tar
291
297
script :
292
298
- docker login -u $CIRCLECI_QUAY_USERNAME -p $CIRCLECI_QUAY_PASSWORD quay.io
293
299
- |
300
+ # Set env vars
294
301
set -e
295
302
if [[ -n "${CI_COMMIT_TAG:-}" ]]; then
296
303
IMAGE_NAME="quay.io/signalfx/splunk-otel-collector"
297
- IMAGE_TAG =${CI_COMMIT_TAG#v}
304
+ MANIFEST_TAG =${CI_COMMIT_TAG#v}
298
305
else
299
306
IMAGE_NAME="quay.io/signalfx/splunk-otel-collector-dev"
300
- IMAGE_TAG =$CI_COMMIT_SHA
307
+ MANIFEST_TAG =$CI_COMMIT_SHA
301
308
fi
302
- echo "Tagging and pushing ${IMAGE_NAME}:${IMAGE_TAG}"
303
- docker tag otelcol:latest ${IMAGE_NAME}:${IMAGE_TAG}
304
- docker push ${IMAGE_NAME}:${IMAGE_TAG}
305
- if [[ "$IMAGE_TAG" = "$CI_COMMIT_SHA" ]] || [[ "$IMAGE_TAG" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
306
- # only push latest tag for main and stable releases
307
- echo "Tagging and pushing ${IMAGE_NAME}:latest"
308
- docker tag otelcol:latest ${IMAGE_NAME}:latest
309
- docker push ${IMAGE_NAME}:latest
309
+ - |
310
+ # Tag and push images
311
+ set -e
312
+ for arch in "amd64" "arm64"; do
313
+ ARCH_TAG="${MANIFEST_TAG}-${arch}"
314
+ echo "Tagging and pushing ${IMAGE_NAME}:${ARCH_TAG}"
315
+ docker tag otelcol:${arch} ${IMAGE_NAME}:${ARCH_TAG}
316
+ docker push ${IMAGE_NAME}:${ARCH_TAG}
317
+ if [[ "${CI_COMMIT_BRANCH:-}" = "main" ]] || [[ "${CI_COMMIT_TAG:-}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
318
+ # only push latest tag for main and stable releases
319
+ LATEST_TAG="latest-${arch}"
320
+ echo "Tagging and pushing ${IMAGE_NAME}:${LATEST_TAG}"
321
+ docker tag ${IMAGE_NAME}:${ARCH_TAG} ${IMAGE_NAME}:${LATEST_TAG}
322
+ docker push ${IMAGE_NAME}:${LATEST_TAG}
323
+ fi
324
+ done
325
+ - |
326
+ # Create and push image manifests
327
+ set -e
328
+ echo "Creating and pushing ${IMAGE_NAME}:${MANIFEST_TAG} manifest"
329
+ docker manifest create ${IMAGE_NAME}:${MANIFEST_TAG} --amend ${IMAGE_NAME}:${MANIFEST_TAG}-amd64 --amend ${IMAGE_NAME}:${MANIFEST_TAG}-arm64
330
+ docker manifest push ${IMAGE_NAME}:${MANIFEST_TAG}
331
+ if [[ "${CI_COMMIT_BRANCH:-}" = "main" ]] || [[ "${CI_COMMIT_TAG:-}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
332
+ # only push latest manifest tag for main and stable releases
333
+ echo "Creating and pushing ${IMAGE_NAME}:latest manifest"
334
+ docker manifest create ${IMAGE_NAME}:latest --amend ${IMAGE_NAME}:latest-amd64 --amend ${IMAGE_NAME}:latest-arm64
335
+ docker manifest push ${IMAGE_NAME}:latest
310
336
fi
311
- - docker inspect --format='{{.RepoDigests}}' ${IMAGE_NAME}:${IMAGE_TAG} | tee dist/linux_digest.txt
337
+ - docker pull ${IMAGE_NAME}:${MANIFEST_TAG}
338
+ - docker inspect --format='{{.RepoDigests}}' ${IMAGE_NAME}:${MANIFEST_TAG} | tee dist/linux_digest.txt
339
+ - docker manifest inspect ${IMAGE_NAME}:${MANIFEST_TAG} | tee dist/manifest_digest.txt
312
340
artifacts :
313
341
paths :
314
342
- dist/linux_digest.txt
343
+ - dist/manifest_digest.txt
315
344
316
345
build-push-windows-image :
317
346
only :
@@ -345,7 +374,7 @@ build-push-windows-image:
345
374
docker build -t ${IMAGE_NAME}:${IMAGE_TAG} --build-arg SMART_AGENT_RELEASE=${SMART_AGENT_RELEASE} -f .\cmd\otelcol\Dockerfile.windows .\cmd\otelcol\
346
375
echo "Pushing ${IMAGE_NAME}:${IMAGE_TAG}"
347
376
docker push ${IMAGE_NAME}:${IMAGE_TAG}
348
- if ($IMAGE_TAG -eq $env:CI_COMMIT_SHA -or $IMAGE_TAG -match '^\d+\.\d+\.\d+$') {
377
+ if ($env:CI_COMMIT_BRANCH -eq "main" -or $env:CI_COMMIT_TAG -match '^v \d+\.\d+\.\d+$') {
349
378
# only push latest tag for main and stable releases
350
379
echo "Tagging and pushing ${IMAGE_NAME}:latest"
351
380
docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${IMAGE_NAME}:latest
@@ -506,14 +535,16 @@ cve-scan:
506
535
- schedules
507
536
before_script :
508
537
- apt-get update
509
- - apt-get install -y docker.io
510
- - mkdir -p ~/.docker/cli-plugins
511
- - curl https://github.com/docker/scan-cli-plugin/releases/latest/download/docker-scan_linux_amd64 -L -s -S -o ~/.docker/cli-plugins/docker-scan
512
- - chmod +x ~/.docker/cli-plugins/docker-scan
538
+ - apt-get install -y ca-certificates curl gnupg lsb-release
539
+ - curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
540
+ - echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
541
+ - apt-get update
542
+ - apt-get install -y docker-ce-cli docker-scan-plugin
513
543
script :
514
544
- |
515
- if [ -f dist/otelcol.tar ]; then
516
- docker load -i dist/otelcol.tar
545
+ if [ -f dist/otelcol-amd64.tar ]; then
546
+ docker load -i dist/otelcol-amd64.tar
547
+ docker tag otelcol:amd64 otelcol:latest
517
548
else
518
549
make docker-otelcol
519
550
fi
0 commit comments