Commit 0506e09f authored by Pierre Smeyers's avatar Pierre Smeyers
Browse files

Merge branch '13-auto-stop-environments' into 'master'

Resolve "auto-stop environments"

Closes #13

See merge request to-be-continuous/aws!46
parents 4db1c1e0 e26561b7
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -240,6 +240,7 @@ Here are variables supported to configure review environments:
| `AWS_REVIEW_ENABLED`     | AWS project ID for `review` env | _none_ (disabled) |
| `AWS_REVIEW_APP_NAME`    | Application name for `review` env      | `"${AWS_BASE_APP_NAME}-${CI_ENVIRONMENT_SLUG}"` (ex: `myproject-review-fix-bug-12`) |
| `AWS_REVIEW_ENVIRONMENT_URL`| The review environments url _(only define for static environment URLs declaration and if different from default)_ | `$AWS_ENVIRONMENT_URL` |
| `AWS_REVIEW_AUTOSTOP_DURATION`| The amount of time before GitLab will automatically stop `review` environments | `4 hours` |

### Integration environment configuration

+5 −0
Original line number Diff line number Diff line
@@ -39,6 +39,11 @@
          "description": "The application name for review env (only define if different from global)",
          "advanced": true
        },
        {
          "name": "AWS_REVIEW_AUTOSTOP_DURATION",
          "description": "The amount of time before GitLab will automatically stop `review` environments",
          "default": "4 hours"
        },
        {
          "name": "AWS_REVIEW_ENVIRONMENT_URL",
          "type": "url",
+17 −12
Original line number Diff line number Diff line
@@ -45,8 +45,11 @@ variables:
  AWS_SCRIPTS_DIR: "."

  AWS_BASE_APP_NAME: "$CI_PROJECT_NAME"
  # deprecated, backward compatibility
  AWS_REVIEW_ENVIRONMENT_SCHEME: "https"

  AWS_REVIEW_AUTOSTOP_DURATION: "4 hours"

  # default: one-click deploy
  AWS_PROD_DEPLOY_STRATEGY: manual

@@ -275,8 +278,8 @@ stages:
    fi
  }

  function auth() {
    oidc_role_arn="$1"
  function aws_auth() {
    oidc_role_arn=${ENV_OIDC_ROLE_ARN:-${AWS_OIDC_ROLE_ARN}}
    if [[ "$oidc_role_arn" ]]
    then
      log_info "Obtaining temporary credentials with OpenID connect..."
@@ -290,10 +293,10 @@ stages:
  }

  # application deployment function
  function deploy() {
    export environment_type=$1
    export environment_name=$2
    environment_url=$3
  function aws_deploy() {
    export environment_type=$ENV_TYPE
    export environment_name=${ENV_APP_NAME:-${AWS_BASE_APP_NAME}${ENV_APP_SUFFIX}}
    environment_url=${ENV_URL:-${AWS_ENVIRONMENT_URL:-$ENV_URL_LEGACY}}

    # backward compatibility
    export env=$environment_type
@@ -338,9 +341,9 @@ stages:
  }

  # environment cleanup function
  function delete() {
    export environment_type=$1
    export environment_name=$2
  function aws_delete() {
    export environment_type=$ENV_TYPE
    export environment_name=${ENV_APP_NAME:-${AWS_BASE_APP_NAME}${ENV_APP_SUFFIX}}
    
    # backward compatibility
    export env=$environment_type
@@ -378,7 +381,7 @@ stages:
  before_script:
    - *aws-scripts
    - install_ca_certs "${CUSTOM_CA_CERTS:-$DEFAULT_CA_CERTS}"
    - auth "${ENV_OIDC_ROLE_ARN:-${AWS_OIDC_ROLE_ARN}}"
    - aws_auth

# Deploy job prototype
# Can be extended to define a concrete environment
@@ -393,7 +396,7 @@ stages:
  variables:
    ENV_APP_SUFFIX: "-$CI_ENVIRONMENT_SLUG"
  script:
    - deploy "$ENV_TYPE" "${ENV_APP_NAME:-${AWS_BASE_APP_NAME}${ENV_APP_SUFFIX}}" "${ENV_URL:-${AWS_ENVIRONMENT_URL:-$ENV_URL_LEGACY}}"
    - aws_deploy
  artifacts:
    name: "$ENV_TYPE env url for $CI_PROJECT_NAME on $CI_COMMIT_REF_SLUG"
    paths:
@@ -417,7 +420,7 @@ stages:
  variables:
    ENV_APP_SUFFIX: "-$CI_ENVIRONMENT_SLUG"
  script:
    - delete "$ENV_TYPE" "${ENV_APP_NAME:-${AWS_BASE_APP_NAME}${ENV_APP_SUFFIX}}"
    - aws_delete
  environment:
    action: stop

@@ -429,11 +432,13 @@ aws-review:
    ENV_TYPE: review
    ENV_APP_NAME: "$AWS_REVIEW_APP_NAME"
    ENV_URL: "${AWS_REVIEW_ENVIRONMENT_URL}"
    # deprecated, backward compatibility
    ENV_URL_LEGACY: "${AWS_REVIEW_ENVIRONMENT_SCHEME}://${CI_PROJECT_NAME}-${CI_ENVIRONMENT_SLUG}.${AWS_REVIEW_ENVIRONMENT_DOMAIN}"
    ENV_OIDC_ROLE_ARN: "$AWS_REVIEW_OIDC_ROLE_ARN"
  environment:
    name: review/$CI_COMMIT_REF_NAME
    on_stop: aws-cleanup-review
    auto_stop_in: "$AWS_REVIEW_AUTOSTOP_DURATION"
  resource_group: review/$CI_COMMIT_REF_NAME
  rules:
    # exclude tags