feat: Update CircleCI configuration file
This commit is contained in:
@@ -1,64 +1,214 @@
|
|||||||
version: 2
|
version: 2.1
|
||||||
|
|
||||||
|
orbs:
|
||||||
|
docker: circleci/docker@1.0.1
|
||||||
|
|
||||||
|
commands:
|
||||||
|
docker-build:
|
||||||
|
description: |
|
||||||
|
Build a Docker image
|
||||||
|
parameters:
|
||||||
|
dockerfile:
|
||||||
|
default: Dockerfile
|
||||||
|
description: |
|
||||||
|
Name of dockerfile to use, defaults to Dockerfile
|
||||||
|
type: string
|
||||||
|
extra_build_args:
|
||||||
|
default: ''
|
||||||
|
description: >
|
||||||
|
Extra flags to pass to docker build. For examples, see
|
||||||
|
https://docs.docker.com/engine/reference/commandline/build
|
||||||
|
type: string
|
||||||
|
registry:
|
||||||
|
default: docker.io
|
||||||
|
description: |
|
||||||
|
Comma separated list of registry to use, defaults to docker.io
|
||||||
|
type: string
|
||||||
|
image:
|
||||||
|
default: cdalvaro/saltstack-master
|
||||||
|
description: |
|
||||||
|
Name of image to build
|
||||||
|
type: string
|
||||||
|
tag:
|
||||||
|
default: ${CIRCLE_SHA1}
|
||||||
|
description: |
|
||||||
|
Image tag, defaults to the value of $CIRCLE_SHA1
|
||||||
|
type: string
|
||||||
|
path:
|
||||||
|
default: .
|
||||||
|
description: |
|
||||||
|
Path to the directory containing your Dockerfile and build context,
|
||||||
|
defaults to . (working directory)
|
||||||
|
type: string
|
||||||
|
cache_from:
|
||||||
|
default: ''
|
||||||
|
description: |
|
||||||
|
Comma-separated list of images. Images will first be pulled, then passed
|
||||||
|
as the --cache-from build argument
|
||||||
|
https://docs.docker.com/engine/reference/commandline/build/
|
||||||
|
type: string
|
||||||
|
no_output_timeout:
|
||||||
|
default: 10m
|
||||||
|
description: |
|
||||||
|
No output timeout for build step
|
||||||
|
type: string
|
||||||
|
steps:
|
||||||
|
- when:
|
||||||
|
condition: <<parameters.cache_from>>
|
||||||
|
steps:
|
||||||
|
- run:
|
||||||
|
name: Build image for <<parameters.registry>>
|
||||||
|
no_output_timeout: <<parameters.no_output_timeout>>
|
||||||
|
command: >
|
||||||
|
echo "<<parameters.cache_from>>" | sed -n 1'p' | tr ',' '\n' |
|
||||||
|
while read image; do
|
||||||
|
echo "Pulling ${image} ...";
|
||||||
|
docker pull "${image}" || true
|
||||||
|
done
|
||||||
|
|
||||||
|
docker_tag_args=""
|
||||||
|
|
||||||
|
IFS="," read -ra DOCKER_REGISTRIES \<<< "<<parameters.registry>>"
|
||||||
|
|
||||||
|
for registry in "${DOCKER_REGISTRIES[@]}"; do
|
||||||
|
IFS="," read -ra DOCKER_TAGS \<<< "<<parameters.tag>>"
|
||||||
|
|
||||||
|
for tag in "${DOCKER_TAGS[@]}"; do
|
||||||
|
docker_tag_args="${docker_tag_args} -t ${registry}/<<parameters.image>>:${tag}"
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
docker build
|
||||||
|
<<#parameters.extra_build_args>><<parameters.extra_build_args>><</parameters.extra_build_args>>
|
||||||
|
\
|
||||||
|
--cache-from <<parameters.cache_from>> \
|
||||||
|
-f <<parameters.path>>/<<parameters.dockerfile>> \
|
||||||
|
${docker_tag_args} \
|
||||||
|
<<parameters.path>>
|
||||||
|
- unless:
|
||||||
|
condition: <<parameters.cache_from>>
|
||||||
|
steps:
|
||||||
|
- run:
|
||||||
|
name: Building image for <<parameters.registry>>
|
||||||
|
no_output_timeout: <<parameters.no_output_timeout>>
|
||||||
|
command: >
|
||||||
|
docker_tag_args=""
|
||||||
|
|
||||||
|
IFS="," read -ra DOCKER_REGISTRIES \<<< "<<parameters.registry>>"
|
||||||
|
|
||||||
|
for registry in "${DOCKER_REGISTRIES[@]}"; do
|
||||||
|
IFS="," read -ra DOCKER_TAGS \<<< "<<parameters.tag>>"
|
||||||
|
|
||||||
|
for tag in "${DOCKER_TAGS[@]}"; do
|
||||||
|
docker_tag_args="${docker_tag_args} -t ${registry}/<<parameters.image>>:${tag}"
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
docker build
|
||||||
|
<<#parameters.extra_build_args>><<parameters.extra_build_args>><</parameters.extra_build_args>>
|
||||||
|
\
|
||||||
|
-f <<parameters.path>>/<<parameters.dockerfile>> \
|
||||||
|
${docker_tag_args} \
|
||||||
|
<<parameters.path>>
|
||||||
|
|
||||||
|
docker-save:
|
||||||
|
description: |
|
||||||
|
Save one or more images to a tar archive
|
||||||
|
parameters:
|
||||||
|
registry:
|
||||||
|
default: docker.io
|
||||||
|
description: |
|
||||||
|
Comma separated list of registry to use, defaults to docker.io
|
||||||
|
type: string
|
||||||
|
image:
|
||||||
|
description: |
|
||||||
|
Name of image to save
|
||||||
|
type: string
|
||||||
|
tag:
|
||||||
|
default: ${CIRCLE_SHA1}
|
||||||
|
description: |
|
||||||
|
Image tag, defaults to the value of $CIRCLE_SHA1
|
||||||
|
type: string
|
||||||
|
steps:
|
||||||
|
- run:
|
||||||
|
name: Save image to tar archive
|
||||||
|
command: >
|
||||||
|
docker_images=""
|
||||||
|
|
||||||
|
IFS="," read -ra DOCKER_REGISTRIES \<<< "<<parameters.registry>>"
|
||||||
|
|
||||||
|
for registry in "${DOCKER_REGISTRIES[@]}"; do
|
||||||
|
IFS="," read -ra DOCKER_TAGS \<<< "<<parameters.tag>>"
|
||||||
|
|
||||||
|
for tag in "${DOCKER_TAGS[@]}"; do
|
||||||
|
docker_images="${docker_images} ${registry}/<<parameters.image>>:${tag}"
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
mkdir -p ~/docker/
|
||||||
|
|
||||||
|
docker save -o ~/docker/docker-images.tar ${docker_images}
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: ~/
|
||||||
|
paths:
|
||||||
|
- docker
|
||||||
|
|
||||||
|
docker-load:
|
||||||
|
description: |
|
||||||
|
Load tar archive
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: ~/
|
||||||
|
- run:
|
||||||
|
name: Load images from tar archive
|
||||||
|
command: >
|
||||||
|
docker load -i ~/docker/docker-images.tar
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
docker:
|
executor: docker/machine
|
||||||
- image: circleci/golang:1-stretch-browsers-legacy
|
|
||||||
environment:
|
|
||||||
IMAGE_NAME: "cdalvaro/saltstack-master"
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- checkout
|
- checkout
|
||||||
|
- docker-build:
|
||||||
|
registry: docker.io,quay.io
|
||||||
|
image: cdalvaro/saltstack-master
|
||||||
|
tag: ${CIRCLE_TAG:-latest}
|
||||||
|
cache_from: docker.io/cdalvaro/saltstack-master:latest
|
||||||
|
extra_build_args: '--build-arg VCS_REF=${CIRCLE_TAG:-${CIRCLE_SHA1}} --build-arg BUILD_DATE="$(date +"%Y-%m-%d %H:%M:%S%:z")"'
|
||||||
|
no_output_timeout: 45m
|
||||||
|
- docker-save:
|
||||||
|
registry: docker.io,quay.io
|
||||||
|
image: cdalvaro/saltstack-master
|
||||||
|
tag: ${CIRCLE_TAG:-latest}
|
||||||
|
|
||||||
- setup_remote_docker:
|
test:
|
||||||
version: 18.03.1-ce
|
executor: docker/machine
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- docker-load
|
||||||
- run:
|
- run:
|
||||||
name: Docker info
|
name: Launch docker container
|
||||||
command: |
|
command: docker run -it --rm -d --name salt_master cdalvaro/saltstack-master:${CIRCLE_TAG:-latest}
|
||||||
docker version
|
|
||||||
docker info
|
|
||||||
- restore_cache:
|
|
||||||
keys:
|
|
||||||
- cache-v2-{{ .Branch }}
|
|
||||||
paths:
|
|
||||||
- /tmp/cache/layers.tar
|
|
||||||
|
|
||||||
- run:
|
- run:
|
||||||
name: Loading docker cache
|
name: Container info
|
||||||
command: |
|
command: docker container ls
|
||||||
if [[ -f /tmp/cache/layers.tar ]]; then
|
|
||||||
echo "Loading cache ..."
|
|
||||||
docker load -i /tmp/cache/layers.tar
|
|
||||||
docker image ls
|
|
||||||
else
|
|
||||||
echo "Couldn't find any caches"
|
|
||||||
fi
|
|
||||||
- run:
|
- run:
|
||||||
name: Build docker image
|
name: Wait for salt-master bootup
|
||||||
command: |
|
command: sleep 60
|
||||||
docker build \
|
|
||||||
--pull \
|
|
||||||
--cache-from=${IMAGE_NAME} \
|
|
||||||
--build-arg BUILD_DATE="$(date +"%Y-%m-%d %H:%M:%S%:z")" \
|
|
||||||
--build-arg VCS_REF=$(git rev-parse --short HEAD) \
|
|
||||||
-t ${IMAGE_NAME}:$(cat VERSION) .
|
|
||||||
- run:
|
- run:
|
||||||
name: Launching container for testing
|
name: Test image bootup
|
||||||
command: |
|
command: docker exec -it salt_master /usr/local/bin/healthcheck
|
||||||
docker run --rm --detach --name saltstack-master ${IMAGE_NAME}:$(cat VERSION)
|
|
||||||
sleep 120
|
|
||||||
- run:
|
|
||||||
name: Generate docker build image cache
|
|
||||||
command: |
|
|
||||||
mkdir -p /tmp/cache/
|
|
||||||
docker save -o /tmp/cache/layers.tar ${IMAGE_NAME}
|
|
||||||
- save_cache:
|
|
||||||
key: cache-v2-{{ .Branch }}
|
|
||||||
paths:
|
|
||||||
- /tmp/cache/layers.tar
|
|
||||||
|
|
||||||
workflows:
|
workflows:
|
||||||
version: 2
|
build-and-test:
|
||||||
build:
|
|
||||||
jobs:
|
jobs:
|
||||||
|
- build:
|
||||||
|
filters:
|
||||||
|
tags:
|
||||||
|
only: /^[0-9._]+$/
|
||||||
|
- test:
|
||||||
|
requires:
|
||||||
- build
|
- build
|
||||||
|
filters:
|
||||||
|
tags:
|
||||||
|
only: /^[0-9._]+$/
|
||||||
|
|||||||
@@ -3,10 +3,10 @@
|
|||||||
# Docker Daemon Build Hook
|
# Docker Daemon Build Hook
|
||||||
# $IMAGE_NAME var is injected into the build so the tag is correct.
|
# $IMAGE_NAME var is injected into the build so the tag is correct.
|
||||||
|
|
||||||
docker pull ${DOCKER_REPO}:latest
|
docker pull "${DOCKER_REPO}:latest"
|
||||||
|
|
||||||
docker build \
|
docker build \
|
||||||
--cache-from=${DOCKER_REPO}:latest \
|
--cache-from="${DOCKER_REPO}:latest" \
|
||||||
--build-arg=BUILD_DATE="$(date +"%Y-%m-%d %H:%M:%S%:z")" \
|
--build-arg=BUILD_DATE="$(date +"%Y-%m-%d %H:%M:%S%:z")" \
|
||||||
--build-arg=VCS_REF="$(git rev-parse --short HEAD)" \
|
--build-arg=VCS_REF="$(git rev-parse --short HEAD)" \
|
||||||
-t ${IMAGE_NAME} .
|
-t "${IMAGE_NAME}" .
|
||||||
|
|||||||
Reference in New Issue
Block a user