mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 01:38:56 -04:00
[ci] Support multiple project deployments (#170783)
This commit is contained in:
parent
1d35c0f013
commit
82953b5d27
1 changed files with 80 additions and 69 deletions
|
@ -6,91 +6,102 @@ set -euo pipefail
|
|||
source .buildkite/scripts/common/util.sh
|
||||
source .buildkite/scripts/steps/artifacts/docker_image.sh
|
||||
|
||||
PROJECT_TYPE=""
|
||||
is_pr_with_label "ci:project-deploy-elasticsearch" && PROJECT_TYPE="elasticsearch"
|
||||
is_pr_with_label "ci:project-deploy-observability" && PROJECT_TYPE="observability"
|
||||
is_pr_with_label "ci:project-deploy-security" && PROJECT_TYPE="security"
|
||||
if [ -z "${PROJECT_TYPE}" ]; then
|
||||
echo "Mising project type"
|
||||
exit 10
|
||||
fi
|
||||
|
||||
PROJECT_NAME="kibana-pr-$BUILDKITE_PULL_REQUEST-$PROJECT_TYPE"
|
||||
PROJECT_CREATE_CONFIGURATION='{
|
||||
"name": "'"$PROJECT_NAME"'",
|
||||
"region_id": "aws-eu-west-1",
|
||||
"overrides": {
|
||||
"kibana": {
|
||||
"docker_image": "'"$KIBANA_IMAGE"'"
|
||||
}
|
||||
}
|
||||
}'
|
||||
PROJECT_UPDATE_CONFIGURATION='{
|
||||
"name": "'"$PROJECT_NAME"'",
|
||||
"overrides": {
|
||||
"kibana": {
|
||||
"docker_image": "'"$KIBANA_IMAGE"'"
|
||||
}
|
||||
}
|
||||
}'
|
||||
deploy() {
|
||||
PROJECT_TYPE=$1
|
||||
case $PROJECT_TYPE in
|
||||
elasticsearch)
|
||||
PROJECT_TYPE_LABEL='Elasticsearch Serverless'
|
||||
;;
|
||||
observability)
|
||||
PROJECT_TYPE_LABEL='Observability'
|
||||
;;
|
||||
security)
|
||||
PROJECT_TYPE_LABEL='Security'
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "--- Create project"
|
||||
DEPLOY_LOGS=$(mktemp --suffix ".json")
|
||||
PROJECT_NAME="kibana-pr-$BUILDKITE_PULL_REQUEST-$PROJECT_TYPE"
|
||||
PROJECT_CREATE_CONFIGURATION='{
|
||||
"name": "'"$PROJECT_NAME"'",
|
||||
"region_id": "aws-eu-west-1",
|
||||
"overrides": {
|
||||
"kibana": {
|
||||
"docker_image": "'"$KIBANA_IMAGE"'"
|
||||
}
|
||||
}
|
||||
}'
|
||||
PROJECT_UPDATE_CONFIGURATION='{
|
||||
"name": "'"$PROJECT_NAME"'",
|
||||
"overrides": {
|
||||
"kibana": {
|
||||
"docker_image": "'"$KIBANA_IMAGE"'"
|
||||
}
|
||||
}
|
||||
}'
|
||||
|
||||
echo "Checking if project already exists..."
|
||||
curl -s \
|
||||
-H "Authorization: ApiKey $PROJECT_API_KEY" \
|
||||
"${PROJECT_API_DOMAIN}/api/v1/serverless/projects/${PROJECT_TYPE}" \
|
||||
-XGET &>> $DEPLOY_LOGS
|
||||
echo "--- Create $PROJECT_TYPE_LABEL project"
|
||||
DEPLOY_LOGS=$(mktemp --suffix ".json")
|
||||
|
||||
PROJECT_ID=$(jq -r --slurp '[.[0].items[] | select(.name == "'$PROJECT_NAME'")] | .[0].id' $DEPLOY_LOGS)
|
||||
if [ -z "${PROJECT_ID}" ] || [ "$PROJECT_ID" = 'null' ]; then
|
||||
echo "Creating project..."
|
||||
echo "Checking if project already exists..."
|
||||
curl -s \
|
||||
-H "Authorization: ApiKey $PROJECT_API_KEY" \
|
||||
-H "Content-Type: application/json" \
|
||||
"${PROJECT_API_DOMAIN}/api/v1/serverless/projects/${PROJECT_TYPE}" \
|
||||
-XPOST -d "$PROJECT_CREATE_CONFIGURATION" &>> $DEPLOY_LOGS
|
||||
-XGET &>> $DEPLOY_LOGS
|
||||
|
||||
PROJECT_ID=$(jq -r --slurp '.[1].id' $DEPLOY_LOGS)
|
||||
PROJECT_ID=$(jq -r --slurp '[.[0].items[] | select(.name == "'$PROJECT_NAME'")] | .[0].id' $DEPLOY_LOGS)
|
||||
if [ -z "${PROJECT_ID}" ] || [ "$PROJECT_ID" = 'null' ]; then
|
||||
echo "Creating project..."
|
||||
curl -s \
|
||||
-H "Authorization: ApiKey $PROJECT_API_KEY" \
|
||||
-H "Content-Type: application/json" \
|
||||
"${PROJECT_API_DOMAIN}/api/v1/serverless/projects/${PROJECT_TYPE}" \
|
||||
-XPOST -d "$PROJECT_CREATE_CONFIGURATION" &>> $DEPLOY_LOGS
|
||||
|
||||
echo "Get credentials..."
|
||||
curl -s -XPOST -H "Authorization: ApiKey $PROJECT_API_KEY" \
|
||||
"${PROJECT_API_DOMAIN}/api/v1/serverless/projects/${PROJECT_TYPE}/${PROJECT_ID}/_reset-credentials" &>> $DEPLOY_LOGS
|
||||
PROJECT_ID=$(jq -r --slurp '.[1].id' $DEPLOY_LOGS)
|
||||
|
||||
PROJECT_USERNAME=$(jq -r --slurp '.[2].username' $DEPLOY_LOGS)
|
||||
PROJECT_PASSWORD=$(jq -r --slurp '.[2].password' $DEPLOY_LOGS)
|
||||
echo "Get credentials..."
|
||||
curl -s -XPOST -H "Authorization: ApiKey $PROJECT_API_KEY" \
|
||||
"${PROJECT_API_DOMAIN}/api/v1/serverless/projects/${PROJECT_TYPE}/${PROJECT_ID}/_reset-credentials" &>> $DEPLOY_LOGS
|
||||
|
||||
echo "Write to vault..."
|
||||
VAULT_ROLE_ID="$(retry 5 15 gcloud secrets versions access latest --secret=kibana-buildkite-vault-role-id)"
|
||||
VAULT_SECRET_ID="$(retry 5 15 gcloud secrets versions access latest --secret=kibana-buildkite-vault-secret-id)"
|
||||
VAULT_TOKEN=$(retry 5 30 vault write -field=token auth/approle/login role_id="$VAULT_ROLE_ID" secret_id="$VAULT_SECRET_ID")
|
||||
retry 5 30 vault login -no-print "$VAULT_TOKEN"
|
||||
retry 5 5 vault write "secret/kibana-issues/dev/cloud-deploy/$PROJECT_NAME" username="$PROJECT_USERNAME" password="$PROJECT_PASSWORD" id="$PROJECT_ID"
|
||||
else
|
||||
echo "Updating project..."
|
||||
curl -s \
|
||||
-H "Authorization: ApiKey $PROJECT_API_KEY" \
|
||||
-H "Content-Type: application/json" \
|
||||
"${PROJECT_API_DOMAIN}/api/v1/serverless/projects/${PROJECT_TYPE}/${PROJECT_ID}" \
|
||||
-XPUT -d "$PROJECT_UPDATE_CONFIGURATION" &>> $DEPLOY_LOGS
|
||||
fi
|
||||
PROJECT_USERNAME=$(jq -r --slurp '.[2].username' $DEPLOY_LOGS)
|
||||
PROJECT_PASSWORD=$(jq -r --slurp '.[2].password' $DEPLOY_LOGS)
|
||||
|
||||
PROJECT_KIBANA_URL=$(jq -r --slurp '.[1].endpoints.kibana' $DEPLOY_LOGS)
|
||||
PROJECT_KIBANA_LOGIN_URL="${PROJECT_KIBANA_URL}/login"
|
||||
PROJECT_ELASTICSEARCH_URL=$(jq -r --slurp '.[1].endpoints.elasticsearch' $DEPLOY_LOGS)
|
||||
echo "Write to vault..."
|
||||
VAULT_ROLE_ID="$(retry 5 15 gcloud secrets versions access latest --secret=kibana-buildkite-vault-role-id)"
|
||||
VAULT_SECRET_ID="$(retry 5 15 gcloud secrets versions access latest --secret=kibana-buildkite-vault-secret-id)"
|
||||
VAULT_TOKEN=$(retry 5 30 vault write -field=token auth/approle/login role_id="$VAULT_ROLE_ID" secret_id="$VAULT_SECRET_ID")
|
||||
retry 5 30 vault login -no-print "$VAULT_TOKEN"
|
||||
retry 5 5 vault write "secret/kibana-issues/dev/cloud-deploy/$PROJECT_NAME" username="$PROJECT_USERNAME" password="$PROJECT_PASSWORD" id="$PROJECT_ID"
|
||||
else
|
||||
echo "Updating project..."
|
||||
curl -s \
|
||||
-H "Authorization: ApiKey $PROJECT_API_KEY" \
|
||||
-H "Content-Type: application/json" \
|
||||
"${PROJECT_API_DOMAIN}/api/v1/serverless/projects/${PROJECT_TYPE}/${PROJECT_ID}" \
|
||||
-XPUT -d "$PROJECT_UPDATE_CONFIGURATION" &>> $DEPLOY_LOGS
|
||||
fi
|
||||
|
||||
cat << EOF | buildkite-agent annotate --style "info" --context project
|
||||
### Project Deployment
|
||||
PROJECT_KIBANA_URL=$(jq -r --slurp '.[1].endpoints.kibana' $DEPLOY_LOGS)
|
||||
PROJECT_KIBANA_LOGIN_URL="${PROJECT_KIBANA_URL}/login"
|
||||
PROJECT_ELASTICSEARCH_URL=$(jq -r --slurp '.[1].endpoints.elasticsearch' $DEPLOY_LOGS)
|
||||
|
||||
Kibana: $PROJECT_KIBANA_LOGIN_URL
|
||||
cat << EOF | buildkite-agent annotate --style "info" --context "project-$PROJECT_TYPE"
|
||||
### $PROJECT_TYPE_LABEL Deployment
|
||||
|
||||
Elasticsearch: $PROJECT_ELASTICSEARCH_URL
|
||||
Kibana: $PROJECT_KIBANA_LOGIN_URL
|
||||
|
||||
Credentials: \`vault read secret/kibana-issues/dev/cloud-deploy/$PROJECT_NAME\`
|
||||
Elasticsearch: $PROJECT_ELASTICSEARCH_URL
|
||||
|
||||
Kibana image: \`$KIBANA_IMAGE\`
|
||||
Credentials: \`vault read secret/kibana-issues/dev/cloud-deploy/$PROJECT_NAME\`
|
||||
|
||||
Kibana image: \`$KIBANA_IMAGE\`
|
||||
EOF
|
||||
|
||||
buildkite-agent meta-data set pr_comment:deploy_project:head "* [Project Deployment](${PROJECT_KIBANA_LOGIN_URL})"
|
||||
buildkite-agent meta-data set pr_comment:early_comment_job_id "$BUILDKITE_JOB_ID"
|
||||
buildkite-agent meta-data set "pr_comment:deploy_project_$PROJECT_TYPE:head" "* [$PROJECT_TYPE_LABEL Deployment](${PROJECT_KIBANA_LOGIN_URL})"
|
||||
buildkite-agent meta-data set pr_comment:early_comment_job_id "$BUILDKITE_JOB_ID"
|
||||
}
|
||||
|
||||
is_pr_with_label "ci:project-deploy-elasticsearch" && deploy "elasticsearch"
|
||||
is_pr_with_label "ci:project-deploy-observability" && deploy "observability"
|
||||
is_pr_with_label "ci:project-deploy-security" && deploy "security"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue