drain old web slot before blue-green shutdown
This commit is contained in:
@@ -64,10 +64,11 @@ ROUTING_NETWORK="${BLUE_GREEN_ROUTING_NETWORK:-firstleg-${DEPLOY_ENV}-routing}"
|
||||
HEALTH_TIMEOUT="${DEPLOY_HEALTH_TIMEOUT_SECONDS:-240}"
|
||||
HEALTH_POLL="${DEPLOY_HEALTH_POLL_SECONDS:-5}"
|
||||
STABILIZATION_SECONDS="${BLUE_GREEN_STABILIZATION_SECONDS:-10}"
|
||||
DRAIN_SECONDS="${BLUE_GREEN_DRAIN_SECONDS:-30}"
|
||||
STOP_TIMEOUT="${BLUE_GREEN_STOP_TIMEOUT_SECONDS:-45}"
|
||||
IMAGE="$IMAGE_REPOSITORY/$SERVICE:$IMAGE_TAG"
|
||||
|
||||
for value in "$HEALTH_TIMEOUT" "$HEALTH_POLL" "$STABILIZATION_SECONDS" "$STOP_TIMEOUT"; do
|
||||
for value in "$HEALTH_TIMEOUT" "$HEALTH_POLL" "$STABILIZATION_SECONDS" "$DRAIN_SECONDS" "$STOP_TIMEOUT"; do
|
||||
case "$value" in ''|*[!0-9]*) echo "蓝绿时间参数必须为非负整数: $value" >&2; exit 2 ;; esac
|
||||
done
|
||||
|
||||
@@ -365,6 +366,10 @@ fi
|
||||
|
||||
old_container_stopped=false
|
||||
if [ -n "$active_container" ] && docker inspect "$active_container" >/dev/null 2>&1; then
|
||||
if [ "$DRAIN_SECONDS" -gt 0 ]; then
|
||||
echo "蓝绿切换后连接排空 ${DRAIN_SECONDS}s,旧 Web 实例保持运行: $active_container"
|
||||
sleep "$DRAIN_SECONDS"
|
||||
fi
|
||||
echo "优雅停止旧 Web 实例: $active_container"
|
||||
docker stop --time "$STOP_TIMEOUT" "$active_container" >/dev/null
|
||||
old_container_stopped=true
|
||||
|
||||
@@ -26,6 +26,9 @@ test('all backend business services have blue-green runtime contracts', async ()
|
||||
assert.match(script, /connect_routing_aliases "\$candidate" "\$ROUTING_ALIAS" "\$NACOS_SERVICE"/)
|
||||
assert.match(script, /file,file-service:file/)
|
||||
assert.match(script, /docker stop --time "\$STOP_TIMEOUT" "\$active_container"/)
|
||||
assert.match(script, /DRAIN_SECONDS="\$\{BLUE_GREEN_DRAIN_SECONDS:-30\}"/)
|
||||
assert.match(script, /蓝绿切换后连接排空/)
|
||||
assert.match(script, /sleep "\$DRAIN_SECONDS"/)
|
||||
assert.match(script, /mv -f "\$STATE_FILE\.tmp" "\$STATE_FILE"/)
|
||||
})
|
||||
|
||||
|
||||
@@ -114,6 +114,7 @@ async function runBlueGreen(health) {
|
||||
PATH: `${bin}${delimiter}${process.env.PATH ?? ''}`,
|
||||
BLUE_GREEN_STATE_ROOT: stateRoot,
|
||||
BLUE_GREEN_STABILIZATION_SECONDS: '0',
|
||||
BLUE_GREEN_DRAIN_SECONDS: '0',
|
||||
DEPLOY_HEALTH_TIMEOUT_SECONDS: '2',
|
||||
DEPLOY_HEALTH_POLL_SECONDS: '1',
|
||||
MOCK_LOG: log,
|
||||
|
||||
Reference in New Issue
Block a user