diff --git a/opslevel-deploy.yml b/opslevel-deploy.yml new file mode 100644 index 0000000..52c432a --- /dev/null +++ b/opslevel-deploy.yml @@ -0,0 +1,91 @@ +parameters: +- name: 'env' + default: 'Production' + type: string +- name: 'integrationId' + type: string +- name: 'serviceAlias' + type: string +- name: 'apiUrl' + default: 'https://app.opslevel.com/' + type: string + +jobs: +- job: deploy + steps: + - script: | + #!/bin/bash + + # Exit immediately if a command exits with a non-zero status + set -e + + # Variables (modify or provide dynamically in Azure pipeline environment) + DEPLOYER_ID="$(Build.QueuedById)" + DEPLOYER_ID="${DEPLOYER_ID:-$(Build.QueuedById)}" + DEPLOYER_EMAIL="$(Build.RequestedForEmail)" + DEPLOYER_NAME="$(Build.RequestedFor)" + DEPLOY_NUMBER="$(Build.BuildNumber)" + DEPLOY_URL="$(Build.BuildUri)" + VERSION="${VERSION:-$(git rev-parse --short HEAD)}" # Default to the current git commit hash + DESCRIPTION="${DESCRIPTION:-"Deployed by CI Pipeline: Deploy #${DEPLOY_NUMBER}"}" + COMMIT_SHA="${COMMIT_SHA:-$(git rev-parse HEAD)}" + COMMIT_MESSAGE="${COMMIT_MESSAGE:-$(git log -1 --pretty=%B)}" + COMMIT_BRANCH="${COMMIT_BRANCH:-$(git rev-parse --abbrev-ref HEAD)}" + COMMIT_DATE="${COMMIT_DATE:-$(git show --no-patch --format='%cd')}" + COMMITTER_NAME="${COMMITTER_NAME:-$(git show --no-patch --format='%cn')}" + COMMITTER_EMAIL="${COMMITTER_EMAIL:-$(git show --no-patch --format='%ce')}" + AUTHOR_NAME="${AUTHOR_NAME:-$(git show --no-patch --format='%an')}" + AUTHOR_EMAIL="${AUTHOR_EMAIL:-$(git show --no-patch --format='%ae')}" + AUTHORING_DATE="${AUTHORING_DATE:-$(git show --no-patch --format='%ad')}" + DEPLOYED_AT="`date -u +%Y-%m-%dT%H:%M:%SZ`" + + + # API endpoint, Routing ID and Service Alias + OPSLEVEL_ENDPOINT="${{ parameters.apiUrl }}integrations/deploy/" + DEPLOYMENT_ENV="${{ parameters.env }}" + OPSLEVEL_ROUTING_ID="${{ parameters.integrationId }}" + SERVICE_ALIAS="${{ parameters.serviceAlias }}" + + # Payload for the OpsLevel API + data="{ + \"dedup_id\": \"$(uuidgen)\", + \"service\": \"$SERVICE_ALIAS\", + \"deployer\": { + \"id\": \"$DEPLOYER_ID\", + \"email\": \"$DEPLOYER_EMAIL\", + \"name\": \"$DEPLOYER_NAME\" + }, + \"deployed_at\": \"$DEPLOYED_AT\", + \"environment\": \"$DEPLOYMENT_ENV\", + \"description\": \"$DESCRIPTION\", + \"deploy_url\": \"$DEPLOY_URL\", + \"deploy_number\": \"$DEPLOY_NUMBER\", + \"commit\": { + \"sha\": \"$COMMIT_SHA\", + \"message\": \"$COMMIT_MESSAGE\", + \"branch\": \"$COMMIT_BRANCH\", + \"date\": \"$COMMIT_DATE\", + \"committer_name\": \"$COMMITTER_NAME\", + \"committer_email\": \"$COMMITTER_EMAIL\", + \"author_name\": \"$AUTHOR_NAME\", + \"author_email\": \"$AUTHOR_EMAIL\", + \"authoring_date\": \"$AUTHORING_DATE\" + } + }" + + echo "$data" + + # Send data to OpsLevel + response=$(curl -s -i -X POST "$OPSLEVEL_ENDPOINT" \ + -H "Content-Type: application/json" \ + -H "X-OpsLevel-Routing-ID: $OPSLEVEL_ROUTING_ID" \ + -d "$data") + + # Check response for errors + echo "$response" | grep -q '"errors"' && { + echo "Error sending deployment data to OpsLevel: $response" + exit 1 + } + + echo "Deployment data successfully sent to OpsLevel." + displayName: 'Send OpsLevel Deployment Details'