Skip to content
Snippets Groups Projects
.gitlab-ci.yml 2.33 KiB
Newer Older
Benjamin Bertrand's avatar
Benjamin Bertrand committed
image: docker:latest

.runner_tags: &runner_tags
  tags:
Benjamin Bertrand's avatar
Benjamin Bertrand committed
    - docker
Benjamin Bertrand's avatar
Benjamin Bertrand committed

variables:
  CONTAINER_TEST_IMAGE: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME"
  CONTAINER_RELEASE_IMAGE: "$CI_REGISTRY_IMAGE:latest"
Benjamin Bertrand's avatar
Benjamin Bertrand committed
  CONTAINER_CACHE_IMAGE: "$CI_REGISTRY_IMAGE:master"
Benjamin Bertrand's avatar
Benjamin Bertrand committed
  POSTGRES_USER: ics
  POSTGRES_PASSWORD: icspwd
  POSTGRES_DB: csentry_db_test
Benjamin Bertrand's avatar
Benjamin Bertrand committed

stages:
  - build
  - test
  - release
  - deploy
Benjamin Bertrand's avatar
Benjamin Bertrand committed

before_script:
  - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY

build:
  <<: *runner_tags
  stage: build
  script:
Benjamin Bertrand's avatar
Benjamin Bertrand committed
    - docker pull "$CONTAINER_CACHE_IMAGE" || true
    - docker build --pull --cache-from "$CONTAINER_CACHE_IMAGE" -t "$CONTAINER_TEST_IMAGE" .
Benjamin Bertrand's avatar
Benjamin Bertrand committed
    - docker push "$CONTAINER_TEST_IMAGE"

test:
  <<: *runner_tags
  stage: test
Benjamin Bertrand's avatar
Benjamin Bertrand committed
  image: "$CONTAINER_TEST_IMAGE"
  services:
    - postgres:10
    - redis:4.0
  before_script: []
Benjamin Bertrand's avatar
Benjamin Bertrand committed
  script:
Benjamin Bertrand's avatar
Benjamin Bertrand committed
    - pytest --cov=app -v
Benjamin Bertrand's avatar
Benjamin Bertrand committed

release-image:
  <<: *runner_tags
  stage: release
  script:
    - docker pull "$CONTAINER_TEST_IMAGE"
    - docker tag "$CONTAINER_TEST_IMAGE" "$CONTAINER_RELEASE_IMAGE"
    - docker push "$CONTAINER_RELEASE_IMAGE"
  only:
    - tags

deploy-staging:
  <<: *runner_tags
  stage: deploy
  image: registry.esss.lu.se/ics-docker/tower-cli:3.2
  before_script: []
  script:
    - >
      tower-cli job launch
      -h icsv-awx01.esss.lu.se
      -u ${ANSIBLE_AWX_USERNAME}
      -p ${ANSIBLE_AWX_PASSWORD}
      -J deploy-csentry-staging
      -e "csentry_tag=$CI_COMMIT_REF_NAME" --monitor
  environment:
    name: staging
    url: https://csentry-test.esss.lu.se
  only:

pages:
  <<: *runner_tags
  stage: deploy
  image: "$CONTAINER_RELEASE_IMAGE"
  before_script: []
  script:
    - sphinx-build -M html docs docs/_build
    - mv docs/_build/html public
  artifacts:
    paths:
      - public
  # CI_COMMIT_TAG is used in docs/conf.py
  # Don't forget to update if not only deploying docs for tags
  only:
    - tags

deploy-production:
  <<: *runner_tags
  stage: deploy
  image: registry.esss.lu.se/ics-docker/tower-cli:3.2
  before_script: []
  script:
    - >
      tower-cli job launch
      -h icsv-awx01.esss.lu.se
      -u ${ANSIBLE_AWX_USERNAME}
      -p ${ANSIBLE_AWX_PASSWORD}
      -J deploy-csentry
      -e "csentry_tag=$CI_COMMIT_TAG" --monitor
  environment:
    name: production
    url: https://csentry.esss.lu.se
  only:
    - tags
  when: manual