Skip to content

Commit

Permalink
ci: cache k3d registry
Browse files Browse the repository at this point in the history
  • Loading branch information
a-cordier committed Nov 7, 2022
1 parent 7d7fb70 commit f3c73c4
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 62 deletions.
38 changes: 37 additions & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -85,15 +85,51 @@ jobs:
- run:
name: Install ginkgo
command: make ginkgo
- restore_cache:
keys:
- k3d-registry.docker
- run:
name: Prepare k3d images registry
command: |
if [ -f k3d-registry.image.tar ]; then
docker load -i k3d-registry.image.tar
tar -xf k3d-registry.volume.tar
docker run --name k3d-graviteeio.docker.localhost \
--net=bridge \
-h k3d-graviteeio.docker.localhost \
-p 12345:12345 \
-e REGISTRY_HTTP_ADDR=:12345 \
-v $(pwd)/var/lib/registry:/var/lib/registry \
-d gko/k3d-registry:latest
echo "export K3D_PULL=apim" >> $BASH_ENV
else
echo "No registry archive found. All images will be pulled from network."
echo "export K3D_PULL=all" >> $BASH_ENV
fi
- run:
name: Start APIM using k3d
command: |
export APIM_IMAGE_REGISTRY=graviteeio.azurecr.io
export APIM_IMAGE_TAG=master-latest
make k3d-apim-init
K3DARGS="--pull=${K3D_PULL}" make k3d-apim-init
- run:
name: Run tests
command: GOTESTARGS="--output-dir=/tmp/junit/reports --junit-report=junit.xml" make test
- run:
name: Archive k3d registry image and volume for caching
command: |
if [ -f k3d-registry.image.tar ]; then
echo "K3d registry already saved on disk. Nothing to do"
else
docker commit k3d-graviteeio.docker.localhost gko/k3d-registry:latest
docker save -o k3d-registry.image.tar gko/k3d-registry:latest
docker run --rm --volumes-from $(docker ps -aqf "name=graviteeio.docker.localhost") -v $(pwd):/backup alpine tar cf /backup/k3d-registry.volume.tar /var/lib/registry
fi
- save_cache:
paths:
- k3d-registry.image.tar
- k3d-registry.volume.tar
key: k3d-registry.docker
- store_test_results:
path: /tmp/junit/reports
- go/save-cache
Expand Down
3 changes: 2 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -124,9 +124,10 @@ test: manifests generate install ## Run tests.
kubectl config use-context k3d-graviteeio
KUBEBUILDER_ASSETS=USE_EXISTING_CLUSTER=true $(GINKGO) $(GOTESTARGS) --timeout 380s --cover --coverprofile=cover.out ./...

K3DARGS ?= ""
.PHONY: k3d-apim-init
k3d-apim-init: ## Init APIM locally using k3d
npx zx ./scripts/k3d.mjs
npx zx ./scripts/k3d.mjs $(K3DARGS)

.PHONY: k3d-apim-start
k3d-apim-start: ## Start exiting APIM node in k3d
Expand Down
100 changes: 40 additions & 60 deletions scripts/k3d.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ async function time(fn) {
await fn();
const end = Date.now();
green(`
Done in ${(end - start) / 1000}s
Done in ${(end - start) / 1000}s
`);
}

Expand Down Expand Up @@ -70,9 +70,9 @@ green("Starting k3d cluster with APIM dependencies...");

blue(`
Installing the latest version of k3d (if not present) ...
Installing the latest version of k3d (if not present) ...
See https://k3d.io/
See https://k3d.io/
`);

await time(installK3d);
Expand All @@ -87,7 +87,7 @@ async function installK3d() {

blue(`
Initializing a local docker images registry for k3d images (if not present) ...
🐳 Initializing a local docker images registry for k3d images (if not present) ...
`);

await time(initRegistry);
Expand All @@ -98,13 +98,13 @@ async function initRegistry() {

magenta(`
K3d images registry ${K3D_IMAGES_REGISTRY_NAME} already exists, skipping.
`);
K3d images registry ${K3D_IMAGES_REGISTRY_NAME} already exists, skipping.
`);
} catch (error) {
magenta(`
Initializing registry ${K3D_IMAGES_REGISTRY_NAME}
`);
Initializing registry ${K3D_IMAGES_REGISTRY_NAME}
`);

await $`k3d registry create ${K3D_IMAGES_REGISTRY_NAME} --port ${K3D_IMAGES_REGISTRY_PORT}`;
}
Expand All @@ -114,54 +114,34 @@ async function initRegistry() {

yellow(`
/!\ Warning /!\
⚠️ WARNING ⚠️
Assuming that host "${K3D_IMAGES_REGISTRY_NAME}" points to 127.0.0.1
Assuming that host "${K3D_IMAGES_REGISTRY_NAME}" points to 127.0.0.1
You might need to edit your /etc/hosts file before going further.
You might need to edit your /etc/hosts file before going further.
`);

await time(initCluster);

async function initCluster() {
blue(`
Deleting K3d cluster ${K3D_CLUSTER_NAME} (if present) ...
Deleting K3d cluster ${K3D_CLUSTER_NAME} (if present) ...
`);

try {
magenta(`
K3d images registry ${K3D_IMAGES_REGISTRY_NAME} already exists, skipping.
`);

await $`k3d registry list | grep -q "${K3D_IMAGES_REGISTRY_NAME}"`;
} catch (error) {
magenta(`
Initializing registry ${K3D_IMAGES_REGISTRY_NAME}
`);

await $`k3d registry create ${K3D_IMAGES_REGISTRY_NAME} --port ${K3D_IMAGES_REGISTRY_PORT}`;
}

try {
await $`k3d cluster list| grep -q "${K3D_CLUSTER_NAME}"`;
await $`k3d cluster delete ${K3D_CLUSTER_NAME}`;
magenta(`
Cluster ${K3D_CLUSTER_NAME} has been deleted
`);
} catch (error) {
magenta(`
no K3d cluster with name ${K3D_CLUSTER_NAME}
No K3d cluster with name ${K3D_CLUSTER_NAME}
`);
}

blue(`
Creating a K3d cluster with name ${K3D_CLUSTER_NAME}
Creating a K3d cluster with name ${K3D_CLUSTER_NAME}
`);

await $`k3d cluster create --wait \
Expand All @@ -177,7 +157,7 @@ async function initCluster() {
if (pullMode !== "none") {
blue(`
Registering docker images to ${K3D_IMAGES_REGISTRY} ...
🐳 Registering docker images to ${K3D_IMAGES_REGISTRY} ...
`);

await time(registerImages);
Expand Down Expand Up @@ -222,22 +202,22 @@ async function registerImages() {

const images = pullMode === "all" ? allImages : apimImages;

$.quote = $NoQuote;

magenta(`
Pulling docker images ...
Pulling docker images ...
`);

await Promise.all(
Array.from(images.keys()).map((image) => $`docker pull ${image}`)
Array.from(images.keys()).map((image) => $`docker pull ${image} > /dev/null`)
);

magenta(`
Tagging docker images ...
Tagging docker images ...
`);

$.quote = $NoQuote;

await Promise.all(
Array.from(images.entries()).map(
([image, tag]) => $`docker tag ${image} ${tag}`
Expand All @@ -246,19 +226,19 @@ async function registerImages() {

magenta(`
Pushing docker images to ${K3D_IMAGES_REGISTRY}
Pushing docker images to ${K3D_IMAGES_REGISTRY}
`);

await Promise.all(
Array.from(images.values()).map((tag) => $`docker push ${tag}`)
Array.from(images.values()).map((tag) => $`docker push ${tag} > /dev/null`)
);

$.quote = $Quote;
}

blue(`
Creating Kubernetes namespace ${K3D_NAMESPACE_NAME} ...
Creating Kubernetes namespace ${K3D_NAMESPACE_NAME} ...
`);

await time(createNamespace);
Expand All @@ -270,13 +250,13 @@ async function createNamespace() {

blue(`
Storing APIM context credentials as a secret ...
Storing APIM context credentials as a secret ...
The following declaration can be used in your management context to reference this secret:
The following declaration can be used in your management context to reference this secret:
secretRef:
name: ${APIM_CONTEXT_SECRET_NAME}
namespace: ${K3D_NAMESPACE_NAME}
secretRef:
name: ${APIM_CONTEXT_SECRET_NAME}
namespace: ${K3D_NAMESPACE_NAME}
`);

await time(createSecret);
Expand All @@ -291,7 +271,7 @@ async function createSecret() {

blue(`
Adding Helm repositories (if not presents) ...
Adding Helm repositories (if not presents) ...
`);

await time(addHelmRepos);
Expand All @@ -303,13 +283,13 @@ async function addHelmRepos() {
}

blue(`
Installing components in namespace ${K3D_NAMESPACE_NAME}
Installing components in namespace ${K3D_NAMESPACE_NAME}
Mongodb ${MONGO_IMAGE_TAG}
Elasticsearch ${ELASTIC_IMAGE_TAG}
Nginx ingress ${NGINX_CONTROLLER_IMAGE_TAG}
Nginx backend ${NGINX_BACKEND_IMAGE_TAG}
Gravitee APIM ${APIM_IMAGE_TAG}
Mongodb ${MONGO_IMAGE_TAG}
Elasticsearch ${ELASTIC_IMAGE_TAG}
Nginx ingress ${NGINX_CONTROLLER_IMAGE_TAG}
Nginx backend ${NGINX_BACKEND_IMAGE_TAG}
Gravitee APIM ${APIM_IMAGE_TAG}
`);

Expand Down Expand Up @@ -361,7 +341,7 @@ helm install \
--set "mongo.dbhost=mongodb" \
--set "mongodb-replicaset=false" \
--set "mongo.rsEnabled=false" \
apim graviteeio/apim3
apim graviteeio/apim3 > /dev/null
`;

const helmInstallMongo = $`
Expand All @@ -378,7 +358,7 @@ helm install \
--set resources.requests.memory=2048Mi \
--set resources.limits.cpu=2000m \
--set resources.requests.cpu=2000m \
mongodb bitnami/mongodb
mongodb bitnami/mongodb > /dev/null
`;

const helmInstallElastic = $`
Expand All @@ -387,7 +367,7 @@ helm install \
--set replicas=1 \
--set "image=${K3D_IMAGES_REGISTRY}/elasticsearch" \
--set "imageTag=${ELASTIC_IMAGE_TAG}" \
elastic elastic/elasticsearch
elastic elastic/elasticsearch > /dev/null
`;

const helmInstallNginxIngress = $`
Expand All @@ -399,7 +379,7 @@ helm install \
--set "defaultBackend.image.repository=nginx" \
--set "image.tag=${NGINX_CONTROLLER_IMAGE_TAG}" \
--set "defaultBackend.image.tag=${NGINX_BACKEND_IMAGE_TAG}" \
nginx-ingress bitnami/nginx-ingress-controller
nginx-ingress bitnami/nginx-ingress-controller > /dev/null
`;

await time(helmInstall);
Expand Down Expand Up @@ -448,5 +428,5 @@ async function waitForApim() {

green(`
Cluster is ready!
🚀 Cluster is ready!
`);

0 comments on commit f3c73c4

Please sign in to comment.