diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 64dd8ac..01e18b8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,45 +1,77 @@ -# This file is a template, and might need editing before it works on your project. -# To contribute improvements to CI/CD templates, please follow the Development guide at: +--- +# This file is a template, and might need editing before it works on your +# project. To contribute improvements to CI/CD templates, please follow the +# Development guide at: # https://docs.gitlab.com/ee/development/cicd/templates.html +# # This specific template is located at: # https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Getting-Started.gitlab-ci.yml -# This is a sample GitLab CI/CD configuration file that should run without any modifications. -# It demonstrates a basic 3 stage CI/CD pipeline. Instead of real tests or scripts, -# it uses echo commands to simulate the pipeline execution. +# This is a sample GitLab CI/CD configuration file that should run without any +# modifications. It demonstrates a basic 3 stage CI/CD pipeline. Instead of +# real tests or scripts, it uses echo commands to simulate the pipeline +# execution. # -# A pipeline is composed of independent jobs that run scripts, grouped into stages. -# Stages run in sequential order, but jobs within stages run in parallel. +# A pipeline is composed of independent jobs that run scripts, grouped into +# stages. Stages run in sequential order, but jobs within stages run in +# parallel. # -# For more information, see: https://docs.gitlab.com/ee/ci/yaml/README.html#stages +# For more information, see: +# https://docs.gitlab.com/ee/ci/yaml/README.html#stages -stages: # List of stages for jobs, and their order of execution +# List of stages for jobs, and their order of execution +stages: - build - test - deploy -build-job: # This job runs in the build stage, which runs first. +build-docker-image: # This job runs in the build stage, which runs first. stage: build + image: docker:latest + services: + - docker:dind + before_script: + - docker login + -u "$CI_REGISTRY_USER" + -p "$CI_REGISTRY_PASSWORD" + $CI_REGISTRY + # Default branch leaves tag empty (= latest tag) + # All other branches are tagged with the escaped branch name (commit ref slug) script: - - echo "Compiling the code..." - - echo "Compile complete." + - | + if [[ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]]; then + tag="" + echo "Running on default branch '$CI_DEFAULT_BRANCH': tag = 'latest'" + else + tag=":$CI_COMMIT_REF_SLUG" + echo "Running on branch '$CI_COMMIT_BRANCH': tag = $tag" + fi + - docker build --pull -t "$CI_REGISTRY_IMAGE${tag}" . + - docker push "$CI_REGISTRY_IMAGE${tag}" + # Run this job in a branch where a Dockerfile exists + rules: + - if: $CI_COMMIT_BRANCH + exists: + - Dockerfile -unit-test-job: # This job runs in the test stage. - stage: test # It only starts when the job in the build stage completes successfully. - script: - - echo "Running unit tests... This will take about 60 seconds." - - sleep 60 - - echo "Code coverage is 90%" +# This job runs in the test stage. +# unit-test-job: +# # It only starts when the job in the build stage completes successfully. +# stage: test +# script: +# - echo "Running unit tests... This will take about 60 seconds." +# - sleep 60 +# - echo "Code coverage is 90%" -lint-test-job: # This job also runs in the test stage. - stage: test # It can run at the same time as unit-test-job (in parallel). - script: - - echo "Linting code... This will take about 10 seconds." - - sleep 10 - - echo "No lint issues found." +# lint-test-job: # This job also runs in the test stage. +# stage: test # It can run at the same time as unit-test-job (in parallel). +# script: +# - echo "Linting code... This will take about 10 seconds." +# - sleep 10 +# - echo "No lint issues found." -deploy-job: # This job runs in the deploy stage. - stage: deploy # It only runs when *both* jobs in the test stage complete successfully. - script: - - echo "Deploying application..." - - echo "Application successfully deployed." +# deploy-job: # This job runs in the deploy stage. +# stage: deploy # It only runs when *both* jobs in the test stage complete successfully. +# script: +# - echo "Deploying application..." +# - echo "Application successfully deployed."