diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2020-07-09 18:17:47 +0200 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2020-07-09 18:17:47 +0200 |
commit | 74769031a422e81aeca9ba63d82fbf66cefb79a5 (patch) | |
tree | e64f0cd68420dcf16871d0f022085900782918d8 | |
parent | ba8f76a46597c0e8de00c58c657c887641280c18 (diff) | |
download | s2i-jekyll-74769031a422e81aeca9ba63d82fbf66cefb79a5.tar.gz |
gitlab docker build
-rw-r--r-- | .gitlab-ci.yml | 73 |
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 |