docker-ripe-atlas/azure-pipelines.yaml
2022-09-04 15:26:59 +08:00

142 lines
3.8 KiB
YAML

name: $(Date:yyyyMMdd).$(Rev:r)
variables:
DOCKER_IMAGE_BASENAME: "jamesits/ripe-atlas"
trigger:
batch: true
branches:
include: [ "master" ]
paths:
include: [ "*" ]
exclude: [ "README.md" ]
pr:
autoCancel: true
branches:
include:
- master
paths:
exclude:
- README.md
schedules:
- cron: "0 3 * * *"
displayName: nightly build
always: true
branches:
include:
- master
jobs:
- job: build
displayName: "build"
pool:
vmImage: "ubuntu-latest"
workspace:
clean: all
variables:
ARTIFACTS_DIR: "/tmp/ripe-atlas-artifacts"
timeoutInMinutes: 60
strategy:
matrix:
arm64:
ARCH: "arm64"
DOCKER_IMAGE_TAG: "latest-arm64"
armhf:
ARCH: "armhf"
DOCKER_IMAGE_TAG: "latest-armv7l"
i386:
ARCH: "i386"
DOCKER_IMAGE_TAG: "latest-i386"
amd64:
ARCH: "amd64"
DOCKER_IMAGE_TAG: "latest-amd64"
maxParallel: 4
steps:
- checkout: self
clean: true
submodules: true
- bash: |
set -Eeuo pipefail
docker run --privileged --rm tonistiigi/binfmt --install=$(ARCH)
export DOCKER_BUILDKIT=1
docker build --platform=$(ARCH) --no-cache --rm=false -t ripe-atlas .
docker images --digests ripe-atlas
docker build --target=artifacts --platform=$(ARCH) --output=type=local,dest=$(ARTIFACTS_DIR) .
cp -r $(ARTIFACTS_DIR)/* ${BUILD_ARTIFACTSTAGINGDIRECTORY}
displayName: "build image and release artifacts"
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)'
artifactName: '$(ARCH)'
parallel: true
parallelCount: 20
- task: Docker@2
displayName: "docker login"
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'), ne(variables['Build.Reason'], 'PullRequest'))
inputs:
containerRegistry: 'Docker Hub: Jamesits'
command: 'login'
- bash: |
set -Eeuo pipefail
docker tag ripe-atlas $(DOCKER_IMAGE_BASENAME):$(DOCKER_IMAGE_TAG)
docker push $(DOCKER_IMAGE_BASENAME):$(DOCKER_IMAGE_TAG)
displayName: "Push image"
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'), ne(variables['Build.Reason'], 'PullRequest'))
- task: Docker@2
displayName: "docker logout"
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'), ne(variables['Build.Reason'], 'PullRequest'))
inputs:
containerRegistry: 'Docker Hub: Jamesits'
command: 'logout'
- job: manifest
displayName: "create docker manifest"
pool:
vmImage: "ubuntu-latest"
workspace:
clean: all
variables:
DOCKER_IMAGE_TAG: "latest"
timeoutInMinutes: 60
dependsOn:
- build
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'), ne(variables['Build.Reason'], 'PullRequest'))
steps:
- task: Docker@2
displayName: "Docker login"
inputs:
containerRegistry: 'Docker Hub: Jamesits'
command: 'login'
- bash: |
set -Eeuo pipefail
docker manifest create \
$(DOCKER_IMAGE_BASENAME):$(DOCKER_IMAGE_TAG) \
--amend $(DOCKER_IMAGE_BASENAME):latest-arm64 \
--amend $(DOCKER_IMAGE_BASENAME):latest-armv7l \
--amend $(DOCKER_IMAGE_BASENAME):latest-i386 \
--amend $(DOCKER_IMAGE_BASENAME):latest-amd64
docker manifest push $(DOCKER_IMAGE_BASENAME):$(DOCKER_IMAGE_TAG)
displayName: "create and push manifest"
- task: Docker@2
displayName: "docker logout"
inputs:
containerRegistry: 'Docker Hub: Jamesits'
command: 'logout'