all: normalize GKE configs/Makefiles to follow common patterns
When a push is made, the latest image is pushed to the registry
with the git hash of the repo and also the same image is pushed
with the :latest tag. This ensures that :latest always points to
the most recent image and that kubectl set image will trigger an
update on the pods without having to delete them.
Fixes golang/go#21772
Change-Id: I97c893f181cdd8891eb87efb3f9ab42ede107d97
Reviewed-on: https://go-review.googlesource.com/61730
Reviewed-by: Sarah Adams <shadams@google.com>
diff --git a/cmd/coordinator/Makefile b/cmd/coordinator/Makefile
index 685e2e8..ebd471c 100644
--- a/cmd/coordinator/Makefile
+++ b/cmd/coordinator/Makefile
@@ -24,7 +24,12 @@
go install golang.org/x/build/cmd/gitlock
gitlock --update=Dockerfile.0 golang.org/x/build/cmd/coordinator
-VERSION=v1
+MUTABLE_VERSION ?= latest
+VERSION ?= $(shell git rev-parse --short HEAD)
+
+IMAGE_STAGING := gcr.io/go-dashboard-dev/coordinator
+IMAGE_PROD := gcr.io/symbolic-datum-552/coordinator
+
DOCKER_IMAGE_build0=build0/coordinator:latest
DOCKER_CTR_build0=coordinator-build0
@@ -37,14 +42,23 @@
docker rm $(DOCKER_CTR_build0)
docker-prod: Dockerfile coordinator
- docker build --force-rm --tag=gcr.io/symbolic-datum-552/coordinator:$(VERSION) .
+ docker build --force-rm --tag=$(IMAGE_PROD):$(VERSION) .
+ docker tag $(IMAGE_PROD):$(VERSION) $(IMAGE_PROD):$(MUTABLE_VERSION)
docker-staging: Dockerfile coordinator
- docker build --force-rm --tag=gcr.io/go-dashboard-dev/coordinator:latest .
+ docker build --force-rm --tag=$(IMAGE_STAGING):$(VERSION) .
+ docker tag $(IMAGE_STAGING):$(VERSION) $(IMAGE_STAGING):$(MUTABLE_VERSION)
push-prod: docker-prod
- gcloud docker -- push gcr.io/symbolic-datum-552/coordinator:$(VERSION)
+ gcloud docker -- push $(IMAGE_PROD):$(MUTABLE_VERSION)
+ gcloud docker -- push $(IMAGE_PROD):$(VERSION)
push-staging: docker-staging
- gcloud docker -- push gcr.io/go-dashboard-dev/coordinator:latest
+ gcloud docker -- push $(IMAGE_STAGING):$(MUTABLE_VERSION)
+ gcloud docker -- push $(IMAGE_STAGING):$(VERSION)
+
+deploy-prod: push-prod
+ kubectl set image deployment/coordinator-deployment coordinator=$(IMAGE_PROD):$(VERSION)
+deploy-staging: push-staging
+ kubectl set image deployment/coordinator-deployment coordinator=$(IMAGE_STAGING):$(VERSION)
clean: FORCE
$(RM) coordinator
diff --git a/cmd/coordinator/deployment-prod.yaml b/cmd/coordinator/deployment-prod.yaml
index 906c3c7..bbe4a01 100644
--- a/cmd/coordinator/deployment-prod.yaml
+++ b/cmd/coordinator/deployment-prod.yaml
@@ -13,7 +13,7 @@
spec:
containers:
- name: coordinator
- image: gcr.io/symbolic-datum-552/coordinator:v1
+ image: gcr.io/symbolic-datum-552/coordinator:latest
imagePullPolicy: Always
command: ["/coordinator"]
ports:
diff --git a/cmd/coordinator/deployment-dev.yaml b/cmd/coordinator/deployment-staging.yaml
similarity index 100%
rename from cmd/coordinator/deployment-dev.yaml
rename to cmd/coordinator/deployment-staging.yaml
diff --git a/cmd/gitmirror/Makefile b/cmd/gitmirror/Makefile
index 073df8d..71dd590 100644
--- a/cmd/gitmirror/Makefile
+++ b/cmd/gitmirror/Makefile
@@ -2,7 +2,12 @@
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.
-VERSION=latest
+MUTABLE_VERSION ?= latest
+VERSION ?= $(shell git rev-parse --short HEAD)
+
+IMAGE_STAGING := gcr.io/go-dashboard-dev/gitmirror
+IMAGE_PROD := gcr.io/symbolic-datum-552/gitmirror
+
DOCKER_IMAGE_build0=build0/gitmirror:latest
DOCKER_CTR_build0=gitmirror-build0
@@ -19,14 +24,23 @@
gitlock --update=Dockerfile.0 golang.org/x/build/cmd/gitmirror
docker-prod: Dockerfile gitmirror
- docker build --force-rm --tag=gcr.io/symbolic-datum-552/gitmirror:$(VERSION) .
+ docker build --force-rm --tag=$(IMAGE_PROD):$(VERSION) .
+ docker tag $(IMAGE_PROD):$(VERSION) $(IMAGE_PROD):$(MUTABLE_VERSION)
docker-staging: Dockerfile gitmirror
- docker build --force-rm --tag=gcr.io/go-dashboard-dev/gitmirror:latest .
+ docker build --force-rm --tag=$(IMAGE_STAGING):$(VERSION) .
+ docker tag $(IMAGE_STAGING):$(VERSION) $(IMAGE_STAGING):$(MUTABLE_VERSION)
push-prod: docker-prod
- gcloud docker -- push gcr.io/symbolic-datum-552/gitmirror:$(VERSION)
+ gcloud docker -- push $(IMAGE_PROD):$(MUTABLE_VERSION)
+ gcloud docker -- push $(IMAGE_PROD):$(VERSION)
push-staging: docker-staging
- gcloud docker -- push gcr.io/go-dashboard-dev/gitmirror:latest
+ gcloud docker -- push $(IMAGE_STAGING):$(MUTABLE_VERSION)
+ gcloud docker -- push $(IMAGE_STAGING):$(VERSION)
+
+deploy-prod: push-prod
+ kubectl set image deployment/gitmirror-deployment gitmirror=$(IMAGE_PROD):$(VERSION)
+deploy-staging: push-staging
+ kubectl set image deployment/gitmirror-deployment gitmirror=$(IMAGE_STAGING):$(VERSION)
.PHONY: clean
clean:
diff --git a/cmd/gitmirror/rc.yaml b/cmd/gitmirror/deployment-prod.yaml
similarity index 96%
rename from cmd/gitmirror/rc.yaml
rename to cmd/gitmirror/deployment-prod.yaml
index cf9249d..ee6322f 100644
--- a/cmd/gitmirror/rc.yaml
+++ b/cmd/gitmirror/deployment-prod.yaml
@@ -1,7 +1,7 @@
apiVersion: v1
kind: ReplicationController
metadata:
- name: gitmirror-rc
+ name: gitmirror-deployment
spec:
replicas: 2
selector:
diff --git a/cmd/gitmirror/rc-dev.yaml b/cmd/gitmirror/deployment-staging.yaml
similarity index 96%
rename from cmd/gitmirror/rc-dev.yaml
rename to cmd/gitmirror/deployment-staging.yaml
index bf27e02..b618b0d 100644
--- a/cmd/gitmirror/rc-dev.yaml
+++ b/cmd/gitmirror/deployment-staging.yaml
@@ -1,7 +1,7 @@
apiVersion: v1
kind: ReplicationController
metadata:
- name: gitmirror-rc
+ name: gitmirror-deployment
spec:
replicas: 2
selector:
diff --git a/cmd/gopherbot/Makefile b/cmd/gopherbot/Makefile
index 264402b..e2e90a0 100644
--- a/cmd/gopherbot/Makefile
+++ b/cmd/gopherbot/Makefile
@@ -2,7 +2,12 @@
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.
-VERSION=latest
+MUTABLE_VERSION ?= latest
+VERSION ?= $(shell git rev-parse --short HEAD)
+
+IMAGE_STAGING := gcr.io/go-dashboard-dev/gopherbot
+IMAGE_PROD := gcr.io/symbolic-datum-552/gopherbot
+
DOCKER_IMAGE_build0=build0/gopherbot:latest
DOCKER_CTR_build0=gopherbot-build0
@@ -24,14 +29,23 @@
gitlock --update=Dockerfile.0 golang.org/x/build/cmd/gopherbot
docker-prod: Dockerfile gopherbot ca-certificates.crt
- docker build --force-rm --tag=gcr.io/symbolic-datum-552/gopherbot:$(VERSION) .
+ docker build --force-rm --tag=$(IMAGE_PROD):$(VERSION) .
+ docker tag $(IMAGE_PROD):$(VERSION) $(IMAGE_PROD):$(MUTABLE_VERSION)
docker-staging: Dockerfile gopherbot ca-certificates.crt
- docker build --force-rm --tag=gcr.io/go-dashboard-dev/gopherbot:latest .
+ docker build --force-rm --tag=$(IMAGE_STAGING):$(VERSION) .
+ docker tag $(IMAGE_STAGING):$(VERSION) $(IMAGE_STAGING):$(MUTABLE_VERSION)
push-prod: docker-prod
- gcloud docker -- push gcr.io/symbolic-datum-552/gopherbot:$(VERSION)
+ gcloud docker -- push $(IMAGE_PROD):$(MUTABLE_VERSION)
+ gcloud docker -- push $(IMAGE_PROD):$(VERSION)
push-staging: docker-staging
- gcloud docker -- push gcr.io/go-dashboard-dev/gopherbot:latest
+ gcloud docker -- push $(IMAGE_STAGING):$(MUTABLE_VERSION)
+ gcloud docker -- push $(IMAGE_STAGING):$(VERSION)
+
+deploy-prod: push-prod
+ kubectl set image deployment/gopherbot-deployment gopherbot=$(IMAGE_PROD):$(VERSION)
+deploy-staging: push-staging
+ kubectl set image deployment/gopherbot-deployment gopherbot=$(IMAGE_STAGING):$(VERSION)
.PHONY: clean
clean:
diff --git a/cmd/pubsubhelper/Makefile b/cmd/pubsubhelper/Makefile
index 9e2ee11..6672cca 100644
--- a/cmd/pubsubhelper/Makefile
+++ b/cmd/pubsubhelper/Makefile
@@ -2,7 +2,12 @@
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.
-VERSION=v2.0.1
+MUTABLE_VERSION ?= latest
+VERSION ?= $(shell git rev-parse --short HEAD)
+
+IMAGE_STAGING := gcr.io/go-dashboard-dev/pubsubhelper
+IMAGE_PROD := gcr.io/symbolic-datum-552/pubsubhelper
+
DOCKER_IMAGE_build0=build0/pubsubhelper:latest
DOCKER_CTR_build0=pubsubhelper-build0
@@ -24,17 +29,23 @@
gitlock --update=Dockerfile.0 golang.org/x/build/cmd/pubsubhelper
docker-prod: Dockerfile pubsubhelper ca-certificates.crt
- docker build --force-rm --tag=gcr.io/symbolic-datum-552/pubsubhelper:$(VERSION) .
+ docker build --force-rm --tag=$(IMAGE_PROD):$(VERSION) .
+ docker tag $(IMAGE_PROD):$(VERSION) $(IMAGE_PROD):$(MUTABLE_VERSION)
docker-staging: Dockerfile pubsubhelper ca-certificates.crt
- docker build --force-rm --tag=gcr.io/go-dashboard-dev/pubsubhelper:latest .
+ docker build --force-rm --tag=$(IMAGE_STAGING):$(VERSION) .
+ docker tag $(IMAGE_STAGING):$(VERSION) $(IMAGE_STAGING):$(MUTABLE_VERSION)
push-prod: docker-prod
- gcloud docker -- push gcr.io/symbolic-datum-552/pubsubhelper:$(VERSION)
+ gcloud docker -- push $(IMAGE_PROD):$(MUTABLE_VERSION)
+ gcloud docker -- push $(IMAGE_PROD):$(VERSION)
push-staging: docker-staging
- gcloud docker -- push gcr.io/go-dashboard-dev/pubsubhelper:latest
+ gcloud docker -- push $(IMAGE_STAGING):$(MUTABLE_VERSION)
+ gcloud docker -- push $(IMAGE_STAGING):$(VERSION)
deploy-prod: push-prod
- kubectl set image deployment/pubsubhelper-deployment pubsubhelper=gcr.io/symbolic-datum-552/pubsubhelper:$(VERSION)
+ kubectl set image deployment/pubsubhelper-deployment pubsubhelper=$(IMAGE_PROD):$(VERSION)
+deploy-staging: push-staging
+ kubectl set image deployment/pubsubhelper-deployment pubsubhelper=$(IMAGE_STAGING):$(VERSION)
.PHONY: clean
clean: