Loading templates/gitlab-ci-s3.yml +36 −51 Original line number Diff line number Diff line Loading @@ -279,11 +279,17 @@ stages: return 1 } function login() { endpoint_host=$1 host_bucket=$2 access_key=$3 secret_key=$4 function s3_login() { endpoint_host=${ENV_ENDPOINT_HOST:-$S3_ENDPOINT_HOST} host_bucket=${S3_HOST_BUCKET} access_key=${ENV_ACCESS_KEY:-$S3_ACCESS_KEY} secret_key=${ENV_SECRET_KEY:-$S3_SECRET_KEY} assert_defined "$endpoint_host" 'Missing required S3 endpoint host' # shellcheck disable=SC2016 assert_defined "$host_bucket" 'Missing required env $S3_HOST_BUCKET' assert_defined "$access_key" 'Missing required S3 access key' assert_defined "$secret_key" 'Missing required S3 secret key' echo -e "[default]\\nhost_base = $endpoint_host\\nhost_bucket = $host_bucket\\nwebsite_endpoint = $S3_WEBSITE_ENDPOINT\\naccess_key = $access_key\\nsecret_key = $secret_key" > ~/.s3cfg Loading @@ -305,18 +311,18 @@ stages: } # upload/sync files to bucket function deploy() { export environment_type=$1 # backward compatibility export env=$environment_type bucket=$2 prefix=$3 function s3_deploy() { export environment_type=$ENV_TYPE bucket=${ENV_BUCKET_NAME:-${S3_BASE_BUCKET_NAME}${ENV_APP_SUFFIX}} prefix=${ENV_PREFIX:-${S3_PREFIX}} region=${ENV_REGION:-${S3_REGION}} # normalize prefix with leading slash if [[ "$prefix" ]] && [[ "${prefix:0:1}" != "/" ]] then prefix="/$prefix" fi region=$4 # backward compatibility export env=$environment_type log_info "--- \\e[32mdeploy\\e[0m" log_info "--- \$environment_type: \\e[33;1m${environment_type}\\e[0m" Loading Loading @@ -378,10 +384,10 @@ stages: } # delete application function delete() { export environment_type=$1 bucket=$2 prefix=$3 function s3_delete() { export environment_type=$ENV_TYPE bucket=${ENV_BUCKET_NAME:-${S3_BASE_BUCKET_NAME}${ENV_APP_SUFFIX}} prefix=${ENV_PREFIX:-${S3_PREFIX}} # normalize prefix with leading slash if [[ "$prefix" ]] && [[ "${prefix:0:1}" != "/" ]] then Loading Loading @@ -416,7 +422,7 @@ stages: fi } function delete_all() { function s3_delete_all() { export environment_type=$1 envnameproto=$2 prefix=$3 Loading Loading @@ -452,6 +458,10 @@ stages: # job prototype # defines default Docker image, tracking probe, cache policy and tags # # @arg ENV_ENDPOINT_HOST: env-specific S3 endpoint host # @arg ENV_ACCESS_KEY : env-specific S3 access key # @arg ENV_SECRET_KEY : env-specific S3 secret key .s3-base: image: name: $S3_CMD_IMAGE Loading @@ -462,6 +472,7 @@ stages: before_script: - *s3-scripts - install_ca_certs "${CUSTOM_CA_CERTS:-$DEFAULT_CA_CERTS}" - s3_login # Deploy job prototype # Can be extended to define a concrete environment Loading @@ -471,24 +482,13 @@ stages: # @arg ENV_REGION : env-specific region # @arg ENV_PREFIX : env-specific S3 prefix # @arg ENV_APP_SUFFIX : env-specific application suffix # @arg ENV_ENDPOINT_HOST: env-specific S3 endpoint host # @arg ENV_ACCESS_KEY : env-specific S3 access key # @arg ENV_SECRET_KEY : env-specific S3 secret key .s3-deploy: extends: .s3-base stage: deploy variables: ENV_APP_SUFFIX: "-$CI_ENVIRONMENT_SLUG" before_script: - *s3-scripts - install_ca_certs "${CUSTOM_CA_CERTS:-$DEFAULT_CA_CERTS}" - assert_defined "${ENV_ENDPOINT_HOST:-$S3_ENDPOINT_HOST}" 'Missing required S3 endpoint host' - assert_defined "${S3_HOST_BUCKET}" 'Missing required env $S3_HOST_BUCKET' - assert_defined "${ENV_ACCESS_KEY:-$S3_ACCESS_KEY}" 'Missing required S3 access key' - assert_defined "${ENV_SECRET_KEY:-$S3_SECRET_KEY}" 'Missing required S3 secret key' - login "${ENV_ENDPOINT_HOST:-$S3_ENDPOINT_HOST}" "${S3_HOST_BUCKET}" "${ENV_ACCESS_KEY:-$S3_ACCESS_KEY}" "${ENV_SECRET_KEY:-$S3_SECRET_KEY}" script: - deploy "$ENV_TYPE" "${ENV_BUCKET_NAME:-${S3_BASE_BUCKET_NAME}${ENV_APP_SUFFIX}}" "${ENV_PREFIX:-${S3_PREFIX}}" "${ENV_REGION:-${S3_REGION}}" - s3_deploy artifacts: name: "$ENV_TYPE env url for $CI_PROJECT_NAME on $CI_COMMIT_REF_SLUG" paths: Loading @@ -505,9 +505,6 @@ stages: # @arg ENV_BUCKET_NAME : env-specific S3 bucket name # @arg ENV_PREFIX : env-specific S3 prefix # @arg ENV_APP_SUFFIX : env-specific application suffix # @arg ENV_ENDPOINT_HOST: env-specific S3 endpoint host # @arg ENV_ACCESS_KEY : env-specific S3 access key # @arg ENV_SECRET_KEY : env-specific S3 secret key .s3-cleanup: extends: .s3-base stage: deploy Loading @@ -517,16 +514,8 @@ stages: variables: GIT_STRATEGY: none ENV_APP_SUFFIX: "-$CI_ENVIRONMENT_SLUG" before_script: - *s3-scripts - install_ca_certs "${CUSTOM_CA_CERTS:-$DEFAULT_CA_CERTS}" - assert_defined "${ENV_ENDPOINT_HOST:-$S3_ENDPOINT_HOST}" 'Missing required S3 endpoint host' - assert_defined "${S3_HOST_BUCKET}" 'Missing required env $S3_HOST_BUCKET' - assert_defined "${ENV_ACCESS_KEY:-$S3_ACCESS_KEY}" 'Missing required S3 access key' - assert_defined "${ENV_SECRET_KEY:-$S3_SECRET_KEY}" 'Missing required S3 secret key' - login "${ENV_ENDPOINT_HOST:-$S3_ENDPOINT_HOST}" "${S3_HOST_BUCKET}" "${ENV_ACCESS_KEY:-$S3_ACCESS_KEY}" "${ENV_SECRET_KEY:-$S3_SECRET_KEY}" script: - delete "$ENV_TYPE" "${ENV_BUCKET_NAME:-${S3_BASE_BUCKET_NAME}${ENV_APP_SUFFIX}}" "${ENV_PREFIX:-${S3_PREFIX}}" - s3_delete environment: action: stop Loading Loading @@ -593,19 +582,15 @@ s3-cleanup-all-review: stage: deploy # force no dependencies dependencies: [] # no need to clone repository variables: # no need to clone repository GIT_STRATEGY: none before_script: - *s3-scripts - install_ca_certs "${CUSTOM_CA_CERTS:-$DEFAULT_CA_CERTS}" - assert_defined "${S3_REVIEW_ENDPOINT_HOST:-$S3_ENDPOINT_HOST}" 'Missing required env $S3_REVIEW_ENDPOINT_HOST or $S3_ENDPOINT_HOST' - assert_defined "${S3_HOST_BUCKET}" 'Missing required env $S3_HOST_BUCKET' - assert_defined "${S3_REVIEW_ACCESS_KEY:-$S3_ACCESS_KEY}" 'Missing required env $S3_REVIEW_ACCESS_KEY or $S3_ACCESS_KEY' - assert_defined "${S3_REVIEW_SECRET_KEY:-$S3_SECRET_KEY}" 'Missing required env $S3_REVIEW_SECRET_KEY or $S3_SECRET_KEY' - login "${S3_REVIEW_ENDPOINT_HOST:-$S3_ENDPOINT_HOST}" "${S3_HOST_BUCKET}" "${S3_REVIEW_ACCESS_KEY:-$S3_ACCESS_KEY}" "${S3_REVIEW_SECRET_KEY:-$S3_SECRET_KEY}" ENV_TYPE: review ENV_ENDPOINT_HOST: "$S3_REVIEW_ENDPOINT_HOST" ENV_ACCESS_KEY: "$S3_REVIEW_ACCESS_KEY" ENV_SECRET_KEY: "$S3_REVIEW_SECRET_KEY" script: - delete_all review "${S3_REVIEW_BUCKET_NAME:-${S3_BASE_BUCKET_NAME}-review-.*}" "${S3_REVIEW_PREFIX:-${S3_PREFIX}}" - s3_delete_all review "${S3_REVIEW_BUCKET_NAME:-${S3_BASE_BUCKET_NAME}-review-.*}" "${S3_REVIEW_PREFIX:-${S3_PREFIX}}" rules: # exclude tags - if: $CI_COMMIT_TAG Loading Loading
templates/gitlab-ci-s3.yml +36 −51 Original line number Diff line number Diff line Loading @@ -279,11 +279,17 @@ stages: return 1 } function login() { endpoint_host=$1 host_bucket=$2 access_key=$3 secret_key=$4 function s3_login() { endpoint_host=${ENV_ENDPOINT_HOST:-$S3_ENDPOINT_HOST} host_bucket=${S3_HOST_BUCKET} access_key=${ENV_ACCESS_KEY:-$S3_ACCESS_KEY} secret_key=${ENV_SECRET_KEY:-$S3_SECRET_KEY} assert_defined "$endpoint_host" 'Missing required S3 endpoint host' # shellcheck disable=SC2016 assert_defined "$host_bucket" 'Missing required env $S3_HOST_BUCKET' assert_defined "$access_key" 'Missing required S3 access key' assert_defined "$secret_key" 'Missing required S3 secret key' echo -e "[default]\\nhost_base = $endpoint_host\\nhost_bucket = $host_bucket\\nwebsite_endpoint = $S3_WEBSITE_ENDPOINT\\naccess_key = $access_key\\nsecret_key = $secret_key" > ~/.s3cfg Loading @@ -305,18 +311,18 @@ stages: } # upload/sync files to bucket function deploy() { export environment_type=$1 # backward compatibility export env=$environment_type bucket=$2 prefix=$3 function s3_deploy() { export environment_type=$ENV_TYPE bucket=${ENV_BUCKET_NAME:-${S3_BASE_BUCKET_NAME}${ENV_APP_SUFFIX}} prefix=${ENV_PREFIX:-${S3_PREFIX}} region=${ENV_REGION:-${S3_REGION}} # normalize prefix with leading slash if [[ "$prefix" ]] && [[ "${prefix:0:1}" != "/" ]] then prefix="/$prefix" fi region=$4 # backward compatibility export env=$environment_type log_info "--- \\e[32mdeploy\\e[0m" log_info "--- \$environment_type: \\e[33;1m${environment_type}\\e[0m" Loading Loading @@ -378,10 +384,10 @@ stages: } # delete application function delete() { export environment_type=$1 bucket=$2 prefix=$3 function s3_delete() { export environment_type=$ENV_TYPE bucket=${ENV_BUCKET_NAME:-${S3_BASE_BUCKET_NAME}${ENV_APP_SUFFIX}} prefix=${ENV_PREFIX:-${S3_PREFIX}} # normalize prefix with leading slash if [[ "$prefix" ]] && [[ "${prefix:0:1}" != "/" ]] then Loading Loading @@ -416,7 +422,7 @@ stages: fi } function delete_all() { function s3_delete_all() { export environment_type=$1 envnameproto=$2 prefix=$3 Loading Loading @@ -452,6 +458,10 @@ stages: # job prototype # defines default Docker image, tracking probe, cache policy and tags # # @arg ENV_ENDPOINT_HOST: env-specific S3 endpoint host # @arg ENV_ACCESS_KEY : env-specific S3 access key # @arg ENV_SECRET_KEY : env-specific S3 secret key .s3-base: image: name: $S3_CMD_IMAGE Loading @@ -462,6 +472,7 @@ stages: before_script: - *s3-scripts - install_ca_certs "${CUSTOM_CA_CERTS:-$DEFAULT_CA_CERTS}" - s3_login # Deploy job prototype # Can be extended to define a concrete environment Loading @@ -471,24 +482,13 @@ stages: # @arg ENV_REGION : env-specific region # @arg ENV_PREFIX : env-specific S3 prefix # @arg ENV_APP_SUFFIX : env-specific application suffix # @arg ENV_ENDPOINT_HOST: env-specific S3 endpoint host # @arg ENV_ACCESS_KEY : env-specific S3 access key # @arg ENV_SECRET_KEY : env-specific S3 secret key .s3-deploy: extends: .s3-base stage: deploy variables: ENV_APP_SUFFIX: "-$CI_ENVIRONMENT_SLUG" before_script: - *s3-scripts - install_ca_certs "${CUSTOM_CA_CERTS:-$DEFAULT_CA_CERTS}" - assert_defined "${ENV_ENDPOINT_HOST:-$S3_ENDPOINT_HOST}" 'Missing required S3 endpoint host' - assert_defined "${S3_HOST_BUCKET}" 'Missing required env $S3_HOST_BUCKET' - assert_defined "${ENV_ACCESS_KEY:-$S3_ACCESS_KEY}" 'Missing required S3 access key' - assert_defined "${ENV_SECRET_KEY:-$S3_SECRET_KEY}" 'Missing required S3 secret key' - login "${ENV_ENDPOINT_HOST:-$S3_ENDPOINT_HOST}" "${S3_HOST_BUCKET}" "${ENV_ACCESS_KEY:-$S3_ACCESS_KEY}" "${ENV_SECRET_KEY:-$S3_SECRET_KEY}" script: - deploy "$ENV_TYPE" "${ENV_BUCKET_NAME:-${S3_BASE_BUCKET_NAME}${ENV_APP_SUFFIX}}" "${ENV_PREFIX:-${S3_PREFIX}}" "${ENV_REGION:-${S3_REGION}}" - s3_deploy artifacts: name: "$ENV_TYPE env url for $CI_PROJECT_NAME on $CI_COMMIT_REF_SLUG" paths: Loading @@ -505,9 +505,6 @@ stages: # @arg ENV_BUCKET_NAME : env-specific S3 bucket name # @arg ENV_PREFIX : env-specific S3 prefix # @arg ENV_APP_SUFFIX : env-specific application suffix # @arg ENV_ENDPOINT_HOST: env-specific S3 endpoint host # @arg ENV_ACCESS_KEY : env-specific S3 access key # @arg ENV_SECRET_KEY : env-specific S3 secret key .s3-cleanup: extends: .s3-base stage: deploy Loading @@ -517,16 +514,8 @@ stages: variables: GIT_STRATEGY: none ENV_APP_SUFFIX: "-$CI_ENVIRONMENT_SLUG" before_script: - *s3-scripts - install_ca_certs "${CUSTOM_CA_CERTS:-$DEFAULT_CA_CERTS}" - assert_defined "${ENV_ENDPOINT_HOST:-$S3_ENDPOINT_HOST}" 'Missing required S3 endpoint host' - assert_defined "${S3_HOST_BUCKET}" 'Missing required env $S3_HOST_BUCKET' - assert_defined "${ENV_ACCESS_KEY:-$S3_ACCESS_KEY}" 'Missing required S3 access key' - assert_defined "${ENV_SECRET_KEY:-$S3_SECRET_KEY}" 'Missing required S3 secret key' - login "${ENV_ENDPOINT_HOST:-$S3_ENDPOINT_HOST}" "${S3_HOST_BUCKET}" "${ENV_ACCESS_KEY:-$S3_ACCESS_KEY}" "${ENV_SECRET_KEY:-$S3_SECRET_KEY}" script: - delete "$ENV_TYPE" "${ENV_BUCKET_NAME:-${S3_BASE_BUCKET_NAME}${ENV_APP_SUFFIX}}" "${ENV_PREFIX:-${S3_PREFIX}}" - s3_delete environment: action: stop Loading Loading @@ -593,19 +582,15 @@ s3-cleanup-all-review: stage: deploy # force no dependencies dependencies: [] # no need to clone repository variables: # no need to clone repository GIT_STRATEGY: none before_script: - *s3-scripts - install_ca_certs "${CUSTOM_CA_CERTS:-$DEFAULT_CA_CERTS}" - assert_defined "${S3_REVIEW_ENDPOINT_HOST:-$S3_ENDPOINT_HOST}" 'Missing required env $S3_REVIEW_ENDPOINT_HOST or $S3_ENDPOINT_HOST' - assert_defined "${S3_HOST_BUCKET}" 'Missing required env $S3_HOST_BUCKET' - assert_defined "${S3_REVIEW_ACCESS_KEY:-$S3_ACCESS_KEY}" 'Missing required env $S3_REVIEW_ACCESS_KEY or $S3_ACCESS_KEY' - assert_defined "${S3_REVIEW_SECRET_KEY:-$S3_SECRET_KEY}" 'Missing required env $S3_REVIEW_SECRET_KEY or $S3_SECRET_KEY' - login "${S3_REVIEW_ENDPOINT_HOST:-$S3_ENDPOINT_HOST}" "${S3_HOST_BUCKET}" "${S3_REVIEW_ACCESS_KEY:-$S3_ACCESS_KEY}" "${S3_REVIEW_SECRET_KEY:-$S3_SECRET_KEY}" ENV_TYPE: review ENV_ENDPOINT_HOST: "$S3_REVIEW_ENDPOINT_HOST" ENV_ACCESS_KEY: "$S3_REVIEW_ACCESS_KEY" ENV_SECRET_KEY: "$S3_REVIEW_SECRET_KEY" script: - delete_all review "${S3_REVIEW_BUCKET_NAME:-${S3_BASE_BUCKET_NAME}-review-.*}" "${S3_REVIEW_PREFIX:-${S3_PREFIX}}" - s3_delete_all review "${S3_REVIEW_BUCKET_NAME:-${S3_BASE_BUCKET_NAME}-review-.*}" "${S3_REVIEW_PREFIX:-${S3_PREFIX}}" rules: # exclude tags - if: $CI_COMMIT_TAG Loading