image: docker:${DOCKER_VERSION}
services:
- name: docker:${DOCKER_VERSION}
alias: docker
variables:
DOCKER_VERSION: "20-dind"
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: /certs
DOCKERFILE_PATH: .
JFROG_REPO: "${ARTIFACTORY_CLOUD_DOCKER_REGISTRY_DEV}/COMPANY/pipelines"
GITLAB_REPO: "${CI_REGISTRY_IMAGE}"
VERSION: 0000.0.5
# Global scope: setup docker daemon
before_script:
- test -S /var/run/docker.sock || export DOCKER_HOST="tcp://docker:2376" DOCKER_TLS_VERIFY=1 DOCKER_CERT_PATH="$DOCKER_TLS_CERTDIR/client" DOCKER_BUILDKIT=1
- for i in 1 2 3 4 5 6 7 8 9 10; do docker version && break || sleep 1; done
stages:
- build_and_deploy_to_jfrog
- build_and_deploy_to_gitlab
build_and_deploy_to_jfrog:
stage: build_and_deploy_to_jfrog
script:
- docker login $ARTIFACTORY_CLOUD_DOCKER_REGISTRY_DEV -u $ARTIFACTORY_CLOUD_PUBLISH_USERNAME -p $ARTIFACTORY_CLOUD_PUBLISH_PASSWORD
- IMAGE="${JFROG_REPO}:${VERSION}"
- echo "IMAGE=$IMAGE"
- docker image build -t "$IMAGE" -f Dockerfile .
- docker push "$IMAGE"
build_and_deploy_to_gitlab:
stage: build_and_deploy_to_gitlab
script:
- docker login $CI_REGISTRY -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
- IMAGE="${GITLAB_REPO}:${VERSION}"
- echo "IMAGE=$IMAGE"
- docker image build -t "$IMAGE" -f Dockerfile .
- docker push "$IMAGE"
Use image from jfrog
image: ${JFROG_REPO}:${VERSION}
variables:
JFROG_REPO: "${ARTIFACTORY_CLOUD_DOCKER_REGISTRY_DEV}/company/dsci/pipelines"
VERSION: 0000.0.5
stages:
- test
test:
stage: test
script:
- env | sort
.gitlab-ci.yml:
image: docker:${DOCKER_VERSION}
services:
- name: docker:${DOCKER_VERSION}
alias: docker
variables:
DOCKER_VERSION: "20-dind"
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: /certs
DOCKERFILE_PATH: .
include:
- template: Security/SAST.gitlab-ci.yml
stages:
- build
- test
# Global scope: setup docker daemon
before_script:
- test -S /var/run/docker.sock || export DOCKER_HOST="tcp://docker:2376" DOCKER_TLS_VERIFY=1 DOCKER_CERT_PATH="$DOCKER_TLS_CERTDIR/client" DOCKER_BUILDKIT=1
- for i in 1 2 3 4 5; do docker version && break || sleep 1; done
.setup_creds: &setup_creds
- echo $ARTIFACTORY_CLOUD_PUBLISH_PASSWORD | docker login -u "$ARTIFACTORY_CLOUD_PUBLISH_USERNAME" --password-stdin $DOCKER_REGISTRY
- echo -e "machine COMPANY.jfrog.io\n login $ARTIFACTORY_CLOUD_PUBLISH_USERNAME\n password $ARTIFACTORY_CLOUD_PUBLISH_PASSWORD\n" >> .netrc
# TO-DO find a cleaner way to version this. Try taking a look at bumpversion - https://github.com/c4urself/bump2version
.build-image-from-cache:
variables:
REPO_PATH: COMPANY/dsci/pipelines
DOCKERFILE: Dockerfile
stage: build
script:
- *setup_creds
- echo "Running on branch $CI_COMMIT_BRANCH..."
- echo "Building with $DOCKERFILE..."
- VERSION=$(date +"%Y%m%dT%H%M")
- echo "Creating version $VERSION..."
- DOCKER_REPO=$DOCKER_REGISTRY/$REPO_PATH
- docker pull $DOCKER_REPO:$CI_COMMIT_BEFORE_SHA || true
- docker build . -f $DOCKERFILE_PATH/$DOCKERFILE
-t $DOCKER_REPO:$CI_COMMIT_SHA
-t $DOCKER_REPO:$VERSION
--cache-from $DOCKER_REPO:$CI_COMMIT_BEFORE_SHA
--secret id=netrc,src=.netrc
--build-arg DOCKER_REGISTRY=$DOCKER_REGISTRY
--build-arg BUILDKIT_INLINE_CACHE=1
- docker push --all-tags $DOCKER_REPO
build-image-dev:
extends:
- .build-image-from-cache
variables:
DOCKER_REGISTRY: $ARTIFACTORY_CLOUD_DOCKER_REGISTRY_DEV
rules:
- if: $CI_COMMIT_BRANCH =~ /^feature\/*/
build-image-prod:
extends:
- .build-image-from-cache
variables:
DOCKER_REGISTRY: $ARTIFACTORY_CLOUD_DOCKER_REGISTRY_PROD
rules:
- if: $CI_COMMIT_BRANCH == "main"
.gitlab-ci.yml:
image: docker:${DOCKER_VERSION}
services:
- name: docker:${DOCKER_VERSION}
alias: docker
variables:
DOCKER_VERSION: "20-dind"
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: /certs
DOCKERFILE_PATH: .
VERSION: 0000.0.2
# Global scope: setup docker daemon
before_script:
- test -S /var/run/docker.sock || export DOCKER_HOST="tcp://docker:2376" DOCKER_TLS_VERIFY=1 DOCKER_CERT_PATH="$DOCKER_TLS_CERTDIR/client" DOCKER_BUILDKIT=1
- for i in 1 2 3 4 5; do docker version && break || sleep 1; done
stages:
- build_and_deploy_to_jfrog
build_and_deploy_to_jfrog:
stage: build_and_deploy_to_jfrog
script:
- REPO="${ARTIFACTORY_CLOUD_DOCKER_REGISTRY:-COMPANY-cr-dev.jfrog.io}/COMPANY/dsci/pipelines"
- docker login $REPO -u $ARTIFACTORY_CLOUD_PUBLISH_USERNAME -p $ARTIFACTORY_CLOUD_PUBLISH_PASSWORD
- echo "REPO=$REPO"
- IMAGE="$REPO:$VERSION"
- docker image build -t "$IMAGE" -f Dockerfile .
- docker push "$IMAGE"