Skip to content

Instantly share code, notes, and snippets.

@darkn3rd
Last active July 31, 2022 09:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save darkn3rd/2049b9c3d44905f2348e8b6218bd1aef to your computer and use it in GitHub Desktop.
Save darkn3rd/2049b9c3d44905f2348e8b6218bd1aef to your computer and use it in GitHub Desktop.
Deploy TeamCity on Google Cloud using Deployment Manager
PROJECT_ID="my-cicd-project" # change this to desired project name
##################
# Create new project
#############################
gcloud config set project $PROJECT_ID
gcloud services enable \
deploymentmanager.googleapis.com \
sqladmin.googleapis.com \
iam.googleapis.com \
cloudresourcemanager.googleapis.com \
runtimeconfig.googleapis.com \
compute.googleapis.com
##################
# Upload Flatcar Linux Image
# Ref: https://www.flatcar.org/docs/latest/installing/cloud/gcp/
#############################
gcloud compute images create "flatcar-stable" \
--source-image-family "flatcar-stable" \
--source-image-project "kinvolk-public"
##################
# Download deployment manager scripts
#############################
git clone git@github.com:JetBrains/teamcity-google-template.git
# GNU sed edit (not BSD) - brew install gnu-set && alias sed=gsed
sed -i 's/IPv4Range.*/autoCreateSubnetworks: true/' teamcity-google-template/network.jinja
sed -i "s/teamcitytest-166414/$PROJECT_ID/" teamcity-google-template/virtual-machine.jinja
sed -i 's/2020\.1/2022.04.2/' teamcity-google-template/teamcity.jinja.schema
# required as mounted directories owned by root
sed -i "s/docker create/docker create --user 0/" teamcity-google-template/virtual-machine.jinja
##################
# Grant deployment manager permissiosn to create things
# ref. https://cloud.google.com/deployment-manager/docs/configuration/set-access-control-resources#granting_deployment_manager_permission_to_set_iam_policies
#############################
PROJECT_NUM=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$PROJECT_NUM@cloudservices.gserviceaccount.com --role roles/owner
##################
# Run Scripts
# NOTE: This can take over 30 minutes to create new networks
#############################
DEPLOYMENT_NAME="tc-server"
ZONE="us-central1-a"
gcloud deployment-manager deployments create $DEPLOYMENT_NAME \
--template ./teamcity-google-template/teamcity.jinja \
--properties zone:$ZONE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment