Commit dc8e74a0 authored by Noel Alonso's avatar Noel Alonso
Browse files

Actualiza CI

Actualiza estructura en base a plantillas
Añade arranque de dependiencias en maven-build
parent ffccd3c4
Loading
Loading
Loading
Loading
+173 −19
Original line number Diff line number Diff line
@@ -11,34 +11,188 @@ 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

.maven-build:
  variables:
  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:
    POSTGRES_IMAGE_TAG: 10.13-alpine
    POSTGRES_DB: redmic
    POSTGRES_USER: postgres
    POSTGRES_PASSWORD: password
    OAUTH_IMAGE_NAME: registry.gitlab.com/redmic-project/server/oauth/master
    OAUTH_IMAGE_TAG: latest
    OAUTH_CLIENT_ID: oauth_id
    OAUTH_CLIENT_SECRET: oauth_secret
    USER_IMAGE_NAME: registry.gitlab.com/redmic-project/server/user/master
    USER_IMAGE_TAG: latest
    DIND_IMAGE_NAME: docker
    DIND_IMAGE_TAG: dind
    DOCKER_HOST: tcp://docker:2375
    SPRING_DATASOURCE_URL: jdbc:postgresql://docker:5432/redmic?stringtype=unspecified
    ELASTIC_ADDRESSES: docker
    OAUTH_SERVER: http://docker:8081
    PROPERTY_USER_API: http://docker:8082
    ELASTICSEARCH_IMAGE_NAME: registry.gitlab.com/redmic-project/elastic/elasticsearch/master
    ELASTICSEARCH_IMAGE_TAG: latest
    SCHEMA_ES_IMAGE_NAME: registry.gitlab.com/redmic-project/elastic/schema-es/master
    SCHEMA_ES_IMAGE_TAG: latest
    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: elasticsearch_dev
    ES_NODE_NAME: node-1
    ES_DISCOVERY_ZEN_MINIMUM_MASTER_NODES: 1
    ES_DISCOVERY_ZEN_PING_UNICAST_HOSTS: es-1
    ES_XPACK_SECURITY_ENABLED: 'true'
    ELASTIC_HOSTS: es-1
    ELASTIC_SCHEMA_VERSION: '0.1'
    ELASTIC_PORT: 9200
    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 SPRING_PROFILES_ACTIVE=${SPRING_PROFILES_ACTIVE} SPRING_DATASOURCE_USERNAME=${SPRING_DATASOURCE_USERNAME}
      SPRING_DATASOURCE_PASSWORD=${SPRING_DATASOURCE_PASSWORD} OAUTH_CLIENT_ID=${OAUTH_CLIENT_ID}
      OAUTH_CLIENT_SECRET=${OAUTH_CLIENT_SECRET} AWS_ACCESS_KEY=${AWS_ACCESS_KEY} AWS_SECRET_KEY=${AWS_SECRET_KEY}
      ELASTIC_XPACKSECURITYUSER=${ELASTIC_XPACKSECURITYUSER} AWS_REGION=${AWS_REGION} S3_BUCKET="${S3_BUCKET}"
      PUBLIC_HOSTNAME=${PUBLIC_HOSTNAME}
  environment:
    url: https://${PUBLIC_HOSTNAME}/${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";
    - >
      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} \
        -c "ALTER ROLE ${SPRING_DATASOURCE_USERNAME} WITH PASSWORD '${SPRING_DATASOURCE_PASSWORD}'";
      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 run -d --rm --name oauth \
        -p 8081:8081 \
        --network test \
        -e SPRING_PROFILES_ACTIVE=dev \
        -e SPRING_DATASOURCE_USERNAME \
        -e SPRING_DATASOURCE_PASSWORD \
        ${OAUTH_IMAGE_NAME}:${OAUTH_IMAGE_TAG};
    - >
      docker run -d --rm --name user \
        -p 8082:8082 \
        --network test \
        -e SPRING_PROFILES_ACTIVE=dev \
        -e SPRING_DATASOURCE_USERNAME \
        -e SPRING_DATASOURCE_PASSWORD \
        -e OAUTH_CLIENT_ID \
        -e OAUTH_CLIENT_SECRET \
        ${USER_IMAGE_NAME}:${USER_IMAGE_TAG};
    - >
      docker run -d --rm --name es-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}
    - >
      HEALTH_CHECK_URL="${ELASTIC_HOSTS}:${ELASTIC_PORT}/_cat/health?h=status"
      RESPONSE="";

      until [ "$RESPONSE" = 'green' ]
      do
        RESPONSE=$(curl --silent -u "${ELASTIC_USER}:${ELASTIC_USER_PASS}" "${HEALTH_CHECK_URL}")
        echo "Waiting for elasticsearch server, remaining attempts..."
        sleep 5
      done

      docker login ${GITLAB_REGISTRY_HOST} -u ${CI_DEPLOY_USER} -p ${CI_DEPLOY_PASSWORD}

      docker run -d --rm --name schema-es \
        --network test \
        -e ELASTIC_USER \
        -e ELASTIC_USER_PASS \
        -e ELASTIC_HOSTS \
        -e ELASTIC_SCHEMA_VERSION \
        ${SCHEMA_ES_IMAGE_NAME}:${SCHEMA_ES_IMAGE_TAG}
  after_script:
    - docker stop user oauth postgres

.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: api
    STATUS_CHECK_DELAY: 300
  environment:
    url: https://${PUBLIC_HOSTNAME}/${CI_PROJECT_NAME}