Commit 3d7a071a authored by Noel Alonso's avatar Noel Alonso
Browse files

Merge branch 'feature-refactoring' into 'dev'

Cambia propiedades de despliegue y testing

See merge request redmic-project/server/tasks!12
parents a38e2dd2 c05418e4
Loading
Loading
Loading
Loading
+155 −20
Original line number Diff line number Diff line
@@ -11,37 +11,172 @@ include:
  - project: 'redmic-project/gitlab-ci-templates'
    ref: master
    file: '/deployment.yml'
  - project: 'redmic-project/gitlab-ci-templates'
    ref: master
    file: '/deployment-custom-image.yml'

stages:
  - build
  - license-list
  - pre-package
  - package
  - test-package
  - post-package
  - deploy

variables:
  PROJECT_PARENT_NAME: api

.maven-build:
  variables:
    POSTGRES_IMAGE_TAG: 10.13-alpine
    POSTGRES_DB: redmic
    POSTGRES_USER: postgres
    POSTGRES_PASSWORD: password
    DIND_IMAGE_NAME: docker
    DIND_IMAGE_TAG: dind
    DOCKER_HOST: tcp://docker:2375
    SPRING_DATASOURCE_URL: jdbc:postgresql://docker:5432/redmic?stringtype=unspecified&currentSchema=sde
    JOBS_DATASOURCE_URL: jdbc:postgresql://docker:5432/redmic?currentSchema=job
    ELASTIC_ADDRESSES: docker
    ELASTICSEARCH_IMAGE_NAME: docker.elastic.co/elasticsearch/elasticsearch
    ELASTICSEARCH_IMAGE_TAG: 6.6.2
    ES_BOOTSTRAP_MEMORY_LOCK: 'true'
    OLD_ELASTIC_ADMIN_PASS: changeme
    ELASTIC_ADMIN_PASS: elastic_admin_pass
    ELASTIC_USER: elastic_user
    ELASTIC_USER_PASS: elastic_user_pass
    ELASTIC_USER_ROLE: redmic_user
    ES_JAVA_OPTS: '-Xms512m -Xmx512m -Djava.security.policy=file:///usr/share/elasticsearch/config/grovy-classes_whitelist.policy'
    ES_CLUSTER_NAME: es_dev
    ES_NODE_NAME: node-1
    ES_DISCOVERY_ZEN_MINIMUM_MASTER_NODES: 1
    ES_DISCOVERY_ZEN_PING_UNICAST_HOSTS: es6-1
    ES_XPACK_SECURITY_ENABLED: 'false'
    ELASTIC_HOSTS: es6-1
    LOGGING_LEVEL_ROOT: error
    LOGGING_LEVEL_ORG_SPRINGFRAMEWORK: error
  DOCKER_BUILD_ARGS: --build-arg PARENT_IMAGE_NAME=${REDMIC_SERVER_IMAGE_NAME} --build-arg PARENT_IMAGE_TAG=${REDMIC_SERVER_IMAGE_TAG}
  STACK: api
  STATUS_CHECK_DELAY: 300

.deploy:
  script:
    GITLAB_REGISTRY_HOST: registry.gitlab.com
    CI_DEPLOY_USER: ci_deploy_user
    CI_DEPLOY_PASSWORD: ci_deploy_password
  services:
    - ${DIND_IMAGE_NAME}:${DIND_IMAGE_TAG}
  before_script:
    - >
      deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} COMPOSE_FILE=${COMPOSE_FILE}
      SPRING_PROFILES_ACTIVE=${SPRING_PROFILES_ACTIVE} SPRING_DATASOURCE_USERNAME=${SPRING_DATASOURCE_USERNAME}
      SPRING_DATASOURCE_PASSWORD=${SPRING_DATASOURCE_PASSWORD} JOBS_DATASOURCE_USERNAME=${JOBS_DATASOURCE_USERNAME}
      JOBS_DATASOURCE_PASSWORD=${JOBS_DATASOURCE_PASSWORD} AWS_ACCESS_KEY=${AWS_ACCESS_KEY}
      AWS_SECRET_KEY=${AWS_SECRET_KEY} ELASTIC_XPACKSECURITYUSER=${ELASTIC_XPACKSECURITYUSER}
      PUBLIC_HOSTNAME=${PUBLIC_HOSTNAME}
  environment:
    url: https://${PUBLIC_HOSTNAME}/api/${CI_PROJECT_NAME}
      mkdir -p sql;
      chmod -R 755 sql;
      docker network create test
    - >
      docker run -d --rm --name postgres \
        -p 5432:5432 \
        --network test \
        --network-alias db \
        -e POSTGRES_DB \
        -e POSTGRES_USER \
        -e POSTGRES_PASSWORD \
        -v $(pwd)/sql:/sql \
        postgres:${POSTGRES_IMAGE_TAG}
    - >
      curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN_READ_API}" \
        -o sql/oauth_database_structure_test.sql \
        "https://gitlab.com/api/v4/snippets/${OAUTH_DATABASE_STRUCTURE_TEST_SNIPPET_ID}/raw";
      curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN_READ_API}" \
        -o sql/oauth_database_data_test.sql \
        "https://gitlab.com/api/v4/snippets/${OAUTH_DATABASE_DATA_TEST_SNIPPET_ID}/raw";
      curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN_READ_API}" \
        -o sql/user_database_structure_test.sql \
        "https://gitlab.com/api/v4/snippets/${USER_DATABASE_STRUCTURE_TEST_SNIPPET_ID}/raw";
      curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN_READ_API}" \
        -o sql/user_database_data_test.sql \
        "https://gitlab.com/api/v4/snippets/${USER_DATABASE_DATA_TEST_SNIPPET_ID}/raw"
      curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN_READ_API}" \
        -o sql/api_database_structure_test.sql \
        "https://gitlab.com/api/v4/snippets/${API_DATABASE_STRUCTURE_TEST_SNIPPET_ID}/raw"
      curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN_READ_API}" \
        -o sql/task_database_structure_test.sql \
        "https://gitlab.com/api/v4/snippets/${TASK_DATABASE_STRUCTURE_TEST_SNIPPET_ID}/raw"
    - >
      RETRIES=10;
      until docker exec postgres psql -h localhost \
          -d redmic \
          -U ${POSTGRES_USER} \
          -c 'select 1' > /dev/null 2>&1 || [ $RETRIES -eq 0 ];
      do
          RETRIES=$((RETRIES-=1));
          echo "Waiting for postgres server, ${RETRIES} remaining attempts...";
          sleep 1;
      done;
      docker exec postgres psql -h localhost \
        -d redmic \
        -U ${POSTGRES_USER} \
        -f /sql/oauth_database_structure_test.sql;
      docker exec postgres psql -h localhost \
        -d redmic \
        -U ${POSTGRES_USER} \
        -f /sql/oauth_database_data_test.sql;
      docker exec postgres psql -h localhost \
        -d redmic \
        -U ${POSTGRES_USER} \
        -f /sql/user_database_structure_test.sql;
      docker exec postgres psql -h localhost \
        -d redmic \
        -U ${POSTGRES_USER} \
        -f /sql/user_database_data_test.sql;
      docker exec postgres psql -h localhost \
        -d redmic \
        -U ${POSTGRES_USER} \
        -f /sql/api_database_structure_test.sql;
      docker exec postgres psql -h localhost \
        -d redmic \
        -U ${POSTGRES_USER} \
        -f /sql/task_database_structure_test.sql
      docker exec postgres psql -h localhost \
        -d redmic \
        -U ${POSTGRES_USER} \
        -c "ALTER ROLE ${SPRING_DATASOURCE_USERNAME} WITH PASSWORD '${SPRING_DATASOURCE_PASSWORD}'";
      docker exec postgres psql -h localhost \
        -d redmic \
        -U ${POSTGRES_USER} \
        -c "ALTER ROLE ${JOBS_DATASOURCE_USERNAME} WITH PASSWORD '${JOBS_DATASOURCE_PASSWORD}'"
    - >
      docker run -d --rm --name es6-1 \
        -p 9300:9300 \
        -p 9200:9200 \
        --network test \
        --ulimit memlock=-1:-1 \
        -e ES_BOOTSTRAP_MEMORY_LOCK \
        -e OLD_ELASTIC_ADMIN_PASS \
        -e ELASTIC_ADMIN_PASS \
        -e ELASTIC_USER \
        -e ELASTIC_USER_PASS \
        -e ELASTIC_USER_ROLE \
        -e ES_JAVA_OPTS \
        -e ES_CLUSTER_NAME \
        -e ES_NODE_NAME \
        -e ES_DISCOVERY_ZEN_MINIMUM_MASTER_NODES \
        -e ES_DISCOVERY_ZEN_PING_UNICAST_HOSTS \
        -e ES_XPACK_SECURITY_ENABLED \
        ${ELASTICSEARCH_IMAGE_NAME}:${ELASTICSEARCH_IMAGE_TAG}
    - >
      RESPONSE="";
      until [ "$RESPONSE" = "green" ];
      do
        sleep 15;
        RESPONSE="$(curl -sS -u ${ELASTIC_USER}:${ELASTIC_USER_PASS} docker:9200/_cat/health?h=status || :)";
        echo "Waiting for elasticsearch server, remaining attempts... Last output:";
        echo $RESPONSE;
      done
  after_script:
    - rm -rf .m2/repository/es
    - docker stop postgres es6-1

.deploy-development:
.docker-build:
  variables:
    SPRING_PROFILES_ACTIVE: pre
    DBLD_PARENT_IMAGE_NAME: ${REDMIC_SERVER_IMAGE_NAME}
    DBLD_PARENT_IMAGE_TAG: ${REDMIC_SERVER_IMAGE_TAG}

.deploy-production:
.deploy:
  variables:
    SPRING_PROFILES_ACTIVE: prod
    STACK: ${PROJECT_PARENT_NAME}
    STATUS_CHECK_DELAY: 300
  environment:
    url: https://${PUBLIC_HOSTNAME}/api/${CI_PROJECT_NAME}
+8 −2
Original line number Diff line number Diff line
ARG PARENT_IMAGE_NAME
ARG PARENT_IMAGE_TAG
ARG PARENT_IMAGE_NAME=registry.gitlab.com/redmic-project/docker/redmic-server
ARG PARENT_IMAGE_TAG=latest

FROM ${PARENT_IMAGE_NAME}:${PARENT_IMAGE_TAG}

COPY /dist/*.jar ./

ARG MICROSERVICE_NAME=tasks
ENV MICROSERVICE_NAME=${MICROSERVICE_NAME}

ARG MICROSERVICE_PORT=8088
ENV MICROSERVICE_PORT=${MICROSERVICE_PORT}

EXPOSE ${MICROSERVICE_PORT}
+3 −0
Original line number Diff line number Diff line
PARENT_IMAGE_NAME=registry.gitlab.com/redmic-project/docker/redmic-server
PARENT_IMAGE_TAG=latest

MICROSERVICE_NAME=tasks
MICROSERVICE_PORT=8088
+11 −5
Original line number Diff line number Diff line
@@ -2,17 +2,23 @@ version: '3.5'

services:
  tasks:
    environment:
      SPRING_PROFILES_ACTIVE: pre
    deploy:
      placement:
        constraints:
          - node.hostname == ${PLACEMENT_CONSTRAINTS_NODE_HOSTNAME:-hostname}
      resources:
        limits:
          cpus: '1'
          memory: 1G
          cpus: '${RESOURCES_LIMITS_CPUS:-1}'
          memory: ${RESOURCES_LIMITS_MEMORY:-1G}
        reservations:
          memory: 820M
          cpus: '${RESOURCES_RESERVATIONS_CPUS:-0.001}'
          memory: ${RESOURCES_RESERVATIONS_MEMORY:-820M}

volumes:
  mediastorage-private-vol:
    name: mediastorage-private-vol
    name: ${MEDIASTORAGE_PRIVATE_VOL_NAME:-mediastorage-private-vol}

  mediastorage-public-vol:
    name: mediastorage-public-vol
 No newline at end of file
    name: ${MEDIASTORAGE_PUBLIC_VOL_NAME:-mediastorage-public-vol}
+8 −8
Original line number Diff line number Diff line
@@ -2,26 +2,26 @@ version: '3.5'

services:
  tasks:
    environment:
      SPRING_PROFILES_ACTIVE: prod
    deploy:
      placement:
        constraints:
          - node.role == worker
      resources:
        limits:
          cpus: '1'
          memory: 2G
          cpus: '${RESOURCES_LIMITS_CPUS:-1}'
          memory: ${RESOURCES_LIMITS_MEMORY:-2G}
        reservations:
          memory: 1639M
          cpus: '${RESOURCES_RESERVATIONS_CPUS:-0.01}'
          memory: ${RESOURCES_RESERVATIONS_MEMORY:-1639M}

volumes:
  mediastorage-private-vol:
    name: mediastorage-private-vol
    name: ${MEDIASTORAGE_PRIVATE_VOL_NAME:-mediastorage-private-vol}
    driver: "cloudstor:aws"
    driver_opts:
      backing: shared

  mediastorage-public-vol:
    name: mediastorage-public-vol
    name: ${MEDIASTORAGE_PUBLIC_VOL_NAME:-mediastorage-public-vol}
    driver: "cloudstor:aws"
    driver_opts:
      backing: shared
Loading