aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2020-07-09 18:17:47 +0200
committerGerd Hoffmann <kraxel@redhat.com>2020-07-09 18:17:47 +0200
commit74769031a422e81aeca9ba63d82fbf66cefb79a5 (patch)
treee64f0cd68420dcf16871d0f022085900782918d8
parentba8f76a46597c0e8de00c58c657c887641280c18 (diff)
downloads2i-jekyll-74769031a422e81aeca9ba63d82fbf66cefb79a5.tar.gz
gitlab docker build
-rw-r--r--.gitlab-ci.yml73
1 files changed, 73 insertions, 0 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..249d61a
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,73 @@
+# This is a GitLab CI configuration to build the project as a docker image
+# The file is generic enough to be dropped in a project containing a working Dockerfile
+# Author: Florent CHAUVEAU <florent.chauveau@gmail.com>
+# Mentioned here: https://blog.callr.tech/building-docker-images-with-gitlab-ci-best-practices/
+
+# do not use "latest" here, if you want this to work in the future
+image: docker:18
+
+stages:
+ - build
+ - push
+
+# Use this if your GitLab runner does not use socket binding
+services:
+ - docker:dind
+
+before_script:
+ # docker login asks for the password to be passed through stdin for security
+ # we use $CI_JOB_TOKEN here which is a special token provided by GitLab
+ - echo -n $CI_JOB_TOKEN | docker login -u gitlab-ci-token --password-stdin $CI_REGISTRY
+
+Build:
+ stage: build
+ script:
+ # fetches the latest image (not failing if image is not found)
+ - docker pull $CI_REGISTRY_IMAGE:latest || true
+ # builds the project, passing proxy variables, and vcs vars for LABEL
+ # notice the cache-from, which is going to use the image we just pulled locally
+ # the built image is tagged locally with the commit SHA, and then pushed to
+ # the GitLab registry
+ - >
+ docker build
+ --pull
+ --build-arg VCS_REF=$CI_COMMIT_SHA
+ --build-arg VCS_URL=$CI_PROJECT_URL
+ --cache-from $CI_REGISTRY_IMAGE:latest
+ --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
+ .
+ - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
+
+# Here, the goal is to tag the "master" branch as "latest"
+Push latest:
+ variables:
+ # We are just playing with Docker here.
+ # We do not need GitLab to clone the source code.
+ GIT_STRATEGY: none
+ stage: push
+ only:
+ # Only "master" should be tagged "latest"
+ - master
+ script:
+ # Because we have no guarantee that this job will be picked up by the same runner
+ # that built the image in the previous step, we pull it again locally
+ - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
+ # Then we tag it "latest"
+ - docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA $CI_REGISTRY_IMAGE:latest
+ # Annnd we push it.
+ - docker push $CI_REGISTRY_IMAGE:latest
+
+# Finally, the goal here is to Docker tag any Git tag
+# GitLab will start a new pipeline everytime a Git tag is created, which is pretty awesome
+Push tag:
+ variables:
+ # Again, we do not need the source code here. Just playing with Docker.
+ GIT_STRATEGY: none
+ stage: push
+ only:
+ # We want this job to be run on tags only.
+ - tags
+ script:
+ - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
+ - docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME
+ - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME