Verify testbox deploy config and image identity
This commit is contained in:
parent
0490f5d357
commit
0db1a97bc1
@ -21,6 +21,57 @@ compose() {
|
|||||||
docker compose --env-file .env -f docker-compose.infra.yml -f docker-compose.apps.yml "$@"
|
docker compose --env-file .env -f docker-compose.infra.yml -f docker-compose.apps.yml "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
deployment_config_hash() {
|
||||||
|
{
|
||||||
|
sha256sum .env docker-compose.infra.yml docker-compose.apps.yml
|
||||||
|
compose config
|
||||||
|
} | sha256sum | awk '{print $1}'
|
||||||
|
}
|
||||||
|
|
||||||
|
ensure_config_unchanged() {
|
||||||
|
local expected="$1"
|
||||||
|
local phase="$2"
|
||||||
|
local actual
|
||||||
|
|
||||||
|
actual="$(deployment_config_hash)"
|
||||||
|
if [ "$actual" != "$expected" ]; then
|
||||||
|
log "deploy config changed during $phase expected=$expected actual=$actual"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
image_ref_for_service() {
|
||||||
|
case "$1" in
|
||||||
|
chatapp-cron) echo "chatapp-test/chatapp-cron:testbox" ;;
|
||||||
|
*) echo "chatapp-test/$1:testbox" ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
service_image_id() {
|
||||||
|
docker image inspect -f '{{.Id}}' "$(image_ref_for_service "$1")"
|
||||||
|
}
|
||||||
|
|
||||||
|
verify_running_service_image() {
|
||||||
|
local service="$1"
|
||||||
|
local expected_image="$2"
|
||||||
|
local container_id
|
||||||
|
local actual_image
|
||||||
|
|
||||||
|
container_id="$(compose ps -q "$service")"
|
||||||
|
if [ -z "$container_id" ]; then
|
||||||
|
log "service container missing after restart service=$service"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
actual_image="$(docker inspect -f '{{.Image}}' "$container_id")"
|
||||||
|
if [ "$actual_image" != "$expected_image" ]; then
|
||||||
|
log "service image mismatch service=$service expected=$expected_image actual=$actual_image"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
log "service image verified service=$service image=$actual_image"
|
||||||
|
}
|
||||||
|
|
||||||
repo_changed() {
|
repo_changed() {
|
||||||
local dir="$1"
|
local dir="$1"
|
||||||
local url="$2"
|
local url="$2"
|
||||||
@ -170,7 +221,10 @@ build_and_restart_java() {
|
|||||||
local services=("$@")
|
local services=("$@")
|
||||||
local modules=""
|
local modules=""
|
||||||
local compose_services=""
|
local compose_services=""
|
||||||
|
local config_hash
|
||||||
|
local image_manifest
|
||||||
local service
|
local service
|
||||||
|
local image_id
|
||||||
|
|
||||||
[ "${#services[@]}" -gt 0 ] || return 0
|
[ "${#services[@]}" -gt 0 ] || return 0
|
||||||
|
|
||||||
@ -179,6 +233,7 @@ build_and_restart_java() {
|
|||||||
compose_services="$compose_services $service"
|
compose_services="$compose_services $service"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
config_hash="$(deployment_config_hash)"
|
||||||
log "java build services=${services[*]} modules=$modules"
|
log "java build services=${services[*]} modules=$modules"
|
||||||
cd "$java_dir"
|
cd "$java_dir"
|
||||||
if [ -x ./ci/install-private-maven.sh ]; then
|
if [ -x ./ci/install-private-maven.sh ]; then
|
||||||
@ -191,25 +246,56 @@ build_and_restart_java() {
|
|||||||
python3 scripts/import-nacos-configs.py >>"$LOG_FILE" 2>&1
|
python3 scripts/import-nacos-configs.py >>"$LOG_FILE" 2>&1
|
||||||
TESTBOX_APPLY_JAVA_SQL=1 scripts/apply-mysql-baseline.sh >>"$LOG_FILE" 2>&1
|
TESTBOX_APPLY_JAVA_SQL=1 scripts/apply-mysql-baseline.sh >>"$LOG_FILE" 2>&1
|
||||||
compose build "${services[@]}" >>"$LOG_FILE" 2>&1
|
compose build "${services[@]}" >>"$LOG_FILE" 2>&1
|
||||||
|
ensure_config_unchanged "$config_hash" "java image build"
|
||||||
|
image_manifest="$ROOT_DIR/run/deploy-images-java-$$.txt"
|
||||||
|
: >"$image_manifest"
|
||||||
|
for service in "${services[@]}"; do
|
||||||
|
image_id="$(service_image_id "$service")"
|
||||||
|
printf '%s %s\n' "$service" "$image_id" >>"$image_manifest"
|
||||||
|
log "java image built service=$service image=$image_id"
|
||||||
|
done
|
||||||
for service in "${services[@]}"; do
|
for service in "${services[@]}"; do
|
||||||
log "java restart service=$service"
|
log "java restart service=$service"
|
||||||
compose up -d --no-deps --force-recreate "$service" >>"$LOG_FILE" 2>&1
|
compose up -d --no-deps --force-recreate "$service" >>"$LOG_FILE" 2>&1
|
||||||
done
|
done
|
||||||
|
ensure_config_unchanged "$config_hash" "java service restart"
|
||||||
|
while read -r service image_id; do
|
||||||
|
verify_running_service_image "$service" "$image_id"
|
||||||
|
done <"$image_manifest"
|
||||||
|
rm -f "$image_manifest"
|
||||||
compose ps "${services[@]}" | tee -a "$LOG_FILE"
|
compose ps "${services[@]}" | tee -a "$LOG_FILE"
|
||||||
}
|
}
|
||||||
|
|
||||||
build_and_restart_golang() {
|
build_and_restart_golang() {
|
||||||
|
local config_hash
|
||||||
|
local image_id
|
||||||
|
|
||||||
|
config_hash="$(deployment_config_hash)"
|
||||||
log "golang build/restart"
|
log "golang build/restart"
|
||||||
scripts/apply-mysql-baseline.sh >>"$LOG_FILE" 2>&1
|
scripts/apply-mysql-baseline.sh >>"$LOG_FILE" 2>&1
|
||||||
compose build golang >>"$LOG_FILE" 2>&1
|
compose build golang >>"$LOG_FILE" 2>&1
|
||||||
|
ensure_config_unchanged "$config_hash" "golang image build"
|
||||||
|
image_id="$(service_image_id golang)"
|
||||||
|
log "golang image built image=$image_id"
|
||||||
compose up -d --no-deps --force-recreate golang >>"$LOG_FILE" 2>&1
|
compose up -d --no-deps --force-recreate golang >>"$LOG_FILE" 2>&1
|
||||||
|
ensure_config_unchanged "$config_hash" "golang service restart"
|
||||||
|
verify_running_service_image golang "$image_id"
|
||||||
compose ps golang | tee -a "$LOG_FILE"
|
compose ps golang | tee -a "$LOG_FILE"
|
||||||
}
|
}
|
||||||
|
|
||||||
build_and_restart_cron() {
|
build_and_restart_cron() {
|
||||||
|
local config_hash
|
||||||
|
local image_id
|
||||||
|
|
||||||
|
config_hash="$(deployment_config_hash)"
|
||||||
log "cron build/restart"
|
log "cron build/restart"
|
||||||
compose build chatapp-cron >>"$LOG_FILE" 2>&1
|
compose build chatapp-cron >>"$LOG_FILE" 2>&1
|
||||||
|
ensure_config_unchanged "$config_hash" "cron image build"
|
||||||
|
image_id="$(service_image_id chatapp-cron)"
|
||||||
|
log "cron image built image=$image_id"
|
||||||
compose up -d --no-deps --force-recreate chatapp-cron >>"$LOG_FILE" 2>&1
|
compose up -d --no-deps --force-recreate chatapp-cron >>"$LOG_FILE" 2>&1
|
||||||
|
ensure_config_unchanged "$config_hash" "cron service restart"
|
||||||
|
verify_running_service_image chatapp-cron "$image_id"
|
||||||
compose ps chatapp-cron | tee -a "$LOG_FILE"
|
compose ps chatapp-cron | tee -a "$LOG_FILE"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,7 +303,10 @@ build_and_restart_admin() {
|
|||||||
local admin_dir="$1"
|
local admin_dir="$1"
|
||||||
local admin_api_base_url
|
local admin_api_base_url
|
||||||
local admin_oss_url
|
local admin_oss_url
|
||||||
|
local config_hash
|
||||||
|
local image_id
|
||||||
|
|
||||||
|
config_hash="$(deployment_config_hash)"
|
||||||
admin_api_base_url="$(env_value TESTBOX_ADMIN_API_BASE_URL "https://yumi-test-admin.haiyihy.com/console")"
|
admin_api_base_url="$(env_value TESTBOX_ADMIN_API_BASE_URL "https://yumi-test-admin.haiyihy.com/console")"
|
||||||
admin_oss_url="$(env_value TESTBOX_ADMIN_OSS_URL "")"
|
admin_oss_url="$(env_value TESTBOX_ADMIN_OSS_URL "")"
|
||||||
|
|
||||||
@ -228,7 +317,12 @@ build_and_restart_admin() {
|
|||||||
--build-arg "ADMIN_OSS_URL=$admin_oss_url" \
|
--build-arg "ADMIN_OSS_URL=$admin_oss_url" \
|
||||||
-t chatapp-test/admin:testbox \
|
-t chatapp-test/admin:testbox \
|
||||||
"$admin_dir" >>"$LOG_FILE" 2>&1
|
"$admin_dir" >>"$LOG_FILE" 2>&1
|
||||||
|
ensure_config_unchanged "$config_hash" "admin image build"
|
||||||
|
image_id="$(service_image_id admin)"
|
||||||
|
log "admin image built image=$image_id"
|
||||||
compose up -d --no-deps --force-recreate admin >>"$LOG_FILE" 2>&1
|
compose up -d --no-deps --force-recreate admin >>"$LOG_FILE" 2>&1
|
||||||
|
ensure_config_unchanged "$config_hash" "admin service restart"
|
||||||
|
verify_running_service_image admin "$image_id"
|
||||||
compose ps admin | tee -a "$LOG_FILE"
|
compose ps admin | tee -a "$LOG_FILE"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user