Skip to content

Commit a71635d

Browse files
authored
Merge pull request #432 from donbobka/add-metadata-key-prefix
Add metadata key prefix to support builds with independent clusters/registries
2 parents 9122f6a + 61b3c2b commit a71635d

File tree

5 files changed

+37
-19
lines changed

5 files changed

+37
-19
lines changed

commands/push.sh

+7-5
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ if plugin_read_list_into_result BUILDKITE_PLUGIN_DOCKER_COMPOSE_BUILD; then
2626
build_services=("${result[@]}")
2727
fi
2828

29+
prebuilt_image_namespace="$(plugin_read_config PREBUILT_IMAGE_NAMESPACE 'docker-compose-plugin-')"
30+
2931
# Then we figure out what to push, and where
3032
for line in $(plugin_read_list PUSH) ; do
3133
IFS=':' read -r -a tokens <<< "$line"
@@ -37,7 +39,7 @@ for line in $(plugin_read_list PUSH) ; do
3739
elif in_array "${service_name}" "${build_services[@]}"; then
3840
echo "~~~ :docker: Service was built in this step, using that image"
3941
service_image="$(default_compose_image_for_service "${service_name}")"
40-
elif prebuilt_image="$(get_prebuilt_image "$service_name")"; then
42+
elif prebuilt_image="$(get_prebuilt_image "$prebuilt_image_namespace" "$service_name")"; then
4143
echo "~~~ :docker: Using pre-built image ${prebuilt_image}"
4244

4345
# Only pull it down once
@@ -63,15 +65,15 @@ for line in $(plugin_read_list PUSH) ; do
6365
if [[ ${#tokens[@]} -eq 1 ]] ; then
6466
echo "${group_type} :docker: Pushing images for ${service_name}" >&2;
6567
retry "$push_retries" run_docker_compose push "${service_name}"
66-
set_prebuilt_image "${service_name}" "${service_image}"
68+
set_prebuilt_image "${prebuilt_image_namespace}" "${service_name}" "${service_image}"
6769
target_image="${service_image}" # necessary for build-alias
6870
# push: "service-name:repo:tag"
6971
else
7072
target_image="$(IFS=:; echo "${tokens[*]:1}")"
7173
echo "${group_type} :docker: Pushing image $target_image" >&2;
7274
plugin_prompt_and_run docker tag "$service_image" "$target_image"
7375
retry "$push_retries" plugin_prompt_and_run docker push "$target_image"
74-
set_prebuilt_image "${service_name}" "${target_image}"
76+
set_prebuilt_image "${prebuilt_image_namespace}" "${service_name}" "${target_image}"
7577
fi
7678
done
7779

@@ -82,5 +84,5 @@ for service_alias in $(plugin_read_list BUILD_ALIAS) ; do
8284
exit 1
8385
fi
8486

85-
set_prebuilt_image "$service_alias" "${target_image}"
86-
done
87+
set_prebuilt_image "${prebuilt_image_namespace}" "$service_alias" "${target_image}"
88+
done

commands/run.sh

+3-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ while read -r name ; do
3535
fi
3636
done <<< "$(plugin_read_list PULL)"
3737

38+
prebuilt_image_namespace="$(plugin_read_config PREBUILT_IMAGE_NAMESPACE 'docker-compose-plugin-')"
39+
3840
# A list of tuples of [service image cache_from] for build_image_override_file
3941
prebuilt_service_overrides=()
4042
prebuilt_services=()
@@ -45,7 +47,7 @@ for service_name in "${prebuilt_candidates[@]}" ; do
4547
if [[ -n "$prebuilt_image_override" ]] && [[ "$service_name" == "$run_service" ]] ; then
4648
echo "~~~ :docker: Overriding run image for $service_name"
4749
prebuilt_image="$prebuilt_image_override"
48-
elif prebuilt_image=$(get_prebuilt_image "$service_name") ; then
50+
elif prebuilt_image=$(get_prebuilt_image "$prebuilt_image_namespace" "$service_name") ; then
4951
echo "~~~ :docker: Found a pre-built image for $service_name"
5052
fi
5153

lib/metadata.bash

100644100755
+20-8
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ function plugin_check_metadata_exists() {
77

88
# Read agent metadata for the plugin
99
function plugin_get_metadata() {
10-
local key="docker-compose-plugin-$1"
10+
local namespace="$1"
11+
local key="$2"
12+
13+
key="$namespace$key"
14+
1115
if plugin_check_metadata_exists "$key"; then
1216
plugin_prompt buildkite-agent meta-data get "$key"
1317
buildkite-agent meta-data get "$key"
@@ -18,8 +22,12 @@ function plugin_get_metadata() {
1822

1923
# Write agent metadata for the plugin
2024
function plugin_set_metadata() {
21-
local key="docker-compose-plugin-$1"
22-
local value="$2"
25+
local namespace="$1"
26+
local key="$2"
27+
local value="$3"
28+
29+
key="$namespace$key"
30+
2331
plugin_prompt_and_must_run buildkite-agent meta-data set "$key" "$value"
2432
}
2533

@@ -44,13 +52,17 @@ function prebuilt_image_meta_data_key() {
4452

4553
# Sets a prebuilt image for a service name
4654
function set_prebuilt_image() {
47-
local service="$1"
48-
local image="$2"
49-
plugin_set_metadata "$(prebuilt_image_meta_data_key "$service")" "$image"
55+
local namespace="$1"
56+
local service="$2"
57+
local image="$3"
58+
59+
plugin_set_metadata "$namespace" "$(prebuilt_image_meta_data_key "$service")" "$image"
5060
}
5161

5262
# Gets a prebuilt image for a service name
5363
function get_prebuilt_image() {
54-
local service="$1"
55-
plugin_get_metadata "$(prebuilt_image_meta_data_key "$service")"
64+
local namespace="$1"
65+
local service="$2"
66+
67+
plugin_get_metadata "$namespace" "$(prebuilt_image_meta_data_key "$service")"
5668
}

plugin.yml

100644100755
+2
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ configuration:
7878
type: boolean
7979
pre-run-dependencies:
8080
type: boolean
81+
prebuilt-image-namespace:
82+
type: string
8183
propagate-environment:
8284
type: boolean
8385
propagate-uid-gid:

tests/metadata.bats

+5-5
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,19 @@ load '../lib/metadata'
3636
# Only expect the 'exists' command to be called, not the 'get'
3737
stub buildkite-agent "meta-data exists docker-compose-plugin-built-image-tag-test : exit 1"
3838

39-
run get_prebuilt_image "test"
40-
39+
run get_prebuilt_image "docker-compose-plugin-" "test"
40+
4141
assert_failure
4242
unstub buildkite-agent
4343
}
4444

4545
@test "Only get prebuilt image from metadata if 'exists' check returns true" {
4646
stub buildkite-agent \
4747
"meta-data exists docker-compose-plugin-built-image-tag-test : exit 0" \
48-
"meta-data get docker-compose-plugin-built-image-tag-test : exit 0"
48+
"meta-data get docker-compose-plugin-built-image-tag-test : exit 0"
49+
50+
run get_prebuilt_image "docker-compose-plugin-" "test"
4951

50-
run get_prebuilt_image "test"
51-
5252
assert_success
5353
assert_output --partial "buildkite-agent meta-data get docker-compose-plugin-built-image-tag-test"
5454
unstub buildkite-agent

0 commit comments

Comments
 (0)