1414
1515steps :
1616 - id : " Create a dedicated database"
17- name : " gcr.io/cloud-builders/gcloud "
17+ name : " gcr.io/google.com/cloudsdktool/ cloud-sdk "
1818 entrypoint : " /bin/bash"
1919 args :
2020 - " -c"
2424 --project ${PROJECT_ID}"
2525
2626 - id : " Create a dedicated database user"
27- name : " gcr.io/cloud-builders/gcloud "
27+ name : " gcr.io/google.com/cloudsdktool/ cloud-sdk "
2828 entrypoint : " /bin/bash"
2929 args :
3030 - " -c"
3737 rm db_password
3838
3939 - id : " Create a dedicated storage bucket"
40- name : " gcr.io/cloud-builders/gcloud "
40+ name : " gcr.io/google.com/cloudsdktool/ cloud-sdk "
4141 entrypoint : " /bin/bash"
4242 args :
4343 - " -c"
4747 -p ${PROJECT_ID} \
4848 gs://${_STORAGE_BUCKET}"
4949
50- - id : " Add Django secrets to Secret Manager "
51- name : " gcr.io/cloud-builders/gcloud "
50+ - id : " IAM and Secrets "
51+ name : " gcr.io/google.com/cloudsdktool/ cloud-sdk "
5252 entrypoint : " /bin/bash"
5353 args :
5454 - " -c"
@@ -59,112 +59,98 @@ steps:
5959 SECRET_KEY=$(cat /dev/urandom | LC_ALL=C tr -dc '[:alpha:]' | fold -w 30 | head -n1)
6060 PASSWORD_NAME=${_SECRET_PASSWORD_NAME}" > ${_SECRET_SETTINGS_NAME}
6161
62+ ./retry.sh "gcloud iam service-accounts create ${_SERVICE_ACCOUNT}"
63+
6264 ./retry.sh "gcloud secrets create ${_SECRET_SETTINGS_NAME} \
6365 --project $PROJECT_ID \
6466 --data-file=${_SECRET_SETTINGS_NAME}"
6567
66- gcloud secrets add-iam-policy-binding ${_SECRET_SETTINGS_NAME} \
67- --member serviceAccount:$(gcloud projects list --filter "name=${PROJECT_ID}" --format "value(projectNumber)")@cloudbuild.gserviceaccount.com \
68- --role roles/secretmanager.secretAccessor \
69- --project ${PROJECT_ID}
70-
71- rm ${_SECRET_SETTINGS_NAME}
72-
7368 echo -n "${_SECRET_PASSWORD_VALUE}" > ${_SECRET_PASSWORD_NAME}
7469
7570 ./retry.sh "gcloud secrets create ${_SECRET_PASSWORD_NAME} \
7671 --project $PROJECT_ID \
7772 --data-file=${_SECRET_PASSWORD_NAME}"
7873
79- gcloud secrets add-iam-policy-binding ${_SECRET_PASSWORD_NAME} \
80- --member serviceAccount:$(gcloud projects list --filter "name=${PROJECT_ID}" --format "value(projectNumber)")@cloudbuild.gserviceaccount.com \
74+ ./retry.sh "gcloud secrets add-iam-policy-binding ${_SECRET_SETTINGS_NAME} \
75+ --member serviceAccount:${_SERVICE_ACCOUNT_EMAIL} \
76+ --role roles/secretmanager.secretAccessor \
77+ --project ${PROJECT_ID}"
78+
79+ ./retry.sh "gcloud secrets add-iam-policy-binding ${_SECRET_PASSWORD_NAME} \
80+ --member serviceAccount:${_SERVICE_ACCOUNT_EMAIL} \
8181 --role roles/secretmanager.secretAccessor \
82- --project ${PROJECT_ID}
82+ --project ${PROJECT_ID}"
83+
84+ ./retry.sh "gcloud projects add-iam-policy-binding ${PROJECT_ID} \
85+ --member serviceAccount:${_SERVICE_ACCOUNT_EMAIL} \
86+ --role roles/cloudsql.client \
87+ --project ${PROJECT_ID}"
8388
84- rm ${_SECRET_PASSWORD_NAME}
8589
8690 - id : " Build Container Image"
87- name : " gcr.io/cloud-builders/docker"
88- entrypoint : " /bin/bash"
89- args :
90- - " -c"
91- - |
92- ./retry.sh "docker build -t gcr.io/${PROJECT_ID}/${_SERVICE}:${_VERSION} ."
91+ name : gcr.io/k8s-skaffold/pack
92+ args : ["build", "${_IMAGE_NAME}", "--builder=gcr.io/buildpacks/builder"]
9393
9494 - id : " Push Container Image"
9595 name : " gcr.io/cloud-builders/docker"
9696 entrypoint : " /bin/bash"
9797 args :
9898 - " -c"
9999 - |
100- ./retry.sh "docker push gcr.io/${PROJECT_ID}/${_SERVICE}:${_VERSION }"
100+ ./retry.sh "docker push ${_IMAGE_NAME }"
101101
102102 - id : " Migrate database"
103- name : " gcr.io/google-appengine/exec-wrapper"
104- args :
105- [
106- " -i" ,
107- " gcr.io/$PROJECT_ID/${_SERVICE}:${_VERSION}" ,
108- " -s" ,
109- " ${_CLOUD_SQL_CONNECTION_NAME}" ,
110- " -e" ,
111- " SETTINGS_NAME=${_SECRET_SETTINGS_NAME}" ,
112- " -e" ,
113- " PASSWORD_NAME=${_SECRET_PASSWORD_NAME}" ,
114- " --" ,
115- " python" ,
116- " manage.py" ,
117- " migrate" ,
118- ]
119-
120- - id : " Collect static"
121- name : " gcr.io/google-appengine/exec-wrapper"
103+ name : " gcr.io/google.com/cloudsdktool/cloud-sdk"
104+ entrypoint : /bin/bash
122105 args :
123- [
124- " -i" ,
125- " gcr.io/$PROJECT_ID/${_SERVICE}:${_VERSION}" ,
126- " -s" ,
127- " ${_CLOUD_SQL_CONNECTION_NAME}" ,
128- " -e" ,
129- " SETTINGS_NAME=${_SECRET_SETTINGS_NAME}" ,
130- " --" ,
131- " python" ,
132- " manage.py" ,
133- " collectstatic" ,
134- " --verbosity" ,
135- " 2" ,
136- " --no-input" ,
137- ]
106+ - " -c"
107+ - |
108+ ./retry.sh "gcloud run jobs create ${_CLOUD_RUN_JOB_NAME} \
109+ --region ${_REGION} \
110+ --service-account ${_SERVICE_ACCOUNT_EMAIL} \
111+ --image ${_IMAGE_NAME} \
112+ --set-cloudsql-instances ${_CLOUD_SQL_CONNECTION_NAME} \
113+ --set-env-vars SETTINGS_NAME=${_SECRET_SETTINGS_NAME} \
114+ --command migrate \
115+ --execute-now"
138116
139117 - id : " Deploy to Cloud Run"
140- name : " gcr.io/cloud-builders/gcloud :latest"
118+ name : " gcr.io/google.com/cloudsdktool/ cloud-sdk :latest"
141119 entrypoint : /bin/bash
142120 args :
143121 - " -c"
144122 - |
145123 ./retry.sh "gcloud run deploy ${_SERVICE} \
146124 --project $PROJECT_ID \
147- --image gcr.io/${PROJECT_ID}/${_SERVICE}:${_VERSION } \
125+ --image ${_IMAGE_NAME } \
148126 --no-allow-unauthenticated \
149127 --region ${_REGION} \
150- --platform ${_PLATFORM } \
151- --add -cloudsql-instances ${_CLOUD_SQL_CONNECTION_NAME} \
152- --update -env-vars SETTINGS_NAME=${_SECRET_SETTINGS_NAME}"
128+ --service-account ${_SERVICE_ACCOUNT_EMAIL } \
129+ --set -cloudsql-instances ${_CLOUD_SQL_CONNECTION_NAME} \
130+ --set -env-vars SETTINGS_NAME=${_SECRET_SETTINGS_NAME}"
153131
154132images :
155- - gcr.io/${PROJECT_ID}/${_SERVICE}:${_VERSION}
133+ - ${_IMAGE_NAME}
134+
135+ options :
136+ dynamicSubstitutions : true
137+ logging : CLOUD_LOGGING_ONLY
156138
157139substitutions :
158140 _SERVICE : django
159141 _VERSION : manual
160142 _REGION : us-central1
161- _PLATFORM : managed
162- _STORAGE_BUCKET : ${PROJECT_ID}-bucket
163- _DB_INSTANCE : django-instance
164- _CLOUD_SQL_CONNECTION_NAME : $PROJECT_ID:us-central1:django-instance
165- _DB_NAME : postgres
166- _DB_USER : postgres
143+ _ARTIFACT_REGISTRY : cloud-run-source-deploy
144+ _IMAGE_NAME : ${_REGION}-docker.pkg.dev/${PROJECT_ID}/${_ARTIFACT_REGISTRY}/django-${_VERSION}
145+ _STORAGE_BUCKET : ${PROJECT_ID}-bucket-${_VERSION}
146+ _CLOUD_RUN_JOB_NAME : migrate-${_VERSION}
147+ _SERVICE_ACCOUNT : django-sa-${_VERSION}
148+ _SERVICE_ACCOUNT_EMAIL : ${_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com
149+ _DB_INSTANCE : django-instance-${_VERSION}
150+ _CLOUD_SQL_CONNECTION_NAME : ${PROJECT_ID}:${_REGION}:${_DB_INSTANCE}
151+ _DB_NAME : postgres-${_VERSION}
152+ _DB_USER : postgres-${_VERSION}
167153 _DB_PASS : password1234
168- _SECRET_SETTINGS_NAME : django_settings
169- _SECRET_PASSWORD_NAME : admin_password
154+ _SECRET_SETTINGS_NAME : django_settings-${_VERSION}
155+ _SECRET_PASSWORD_NAME : admin_password-${_VERSION}
170156 _SECRET_PASSWORD_VALUE : password
0 commit comments