fix(ci): join service to runner network (#1)
This commit is contained in:
@@ -158,11 +158,8 @@ jobs:
|
|||||||
port_suffix="$(( ${GITHUB_RUN_ID:-$$} % 10000 ))"
|
port_suffix="$(( ${GITHUB_RUN_ID:-$$} % 10000 ))"
|
||||||
export RENDEZVOUS_HTTP_HOST_PORT="$(( 20000 + port_suffix ))"
|
export RENDEZVOUS_HTTP_HOST_PORT="$(( 20000 + port_suffix ))"
|
||||||
export RENDEZVOUS_UDP_HOST_PORT="$(( 40000 + port_suffix ))"
|
export RENDEZVOUS_UDP_HOST_PORT="$(( 40000 + port_suffix ))"
|
||||||
export RENDEZVOUS_HTTP_BIND_ADDRESS="0.0.0.0"
|
runner_network="$(docker inspect "$HOSTNAME" | jq -er \
|
||||||
runner_host_gateway="$(docker inspect "$HOSTNAME" | jq -er \
|
'.[0].NetworkSettings.Networks | keys[0]')"
|
||||||
'.[0].NetworkSettings.Networks | to_entries[0].value.Gateway')"
|
|
||||||
export RENDEZVOUS_SMOKE_HTTP_URL="http://${runner_host_gateway}:${RENDEZVOUS_HTTP_HOST_PORT}/"
|
|
||||||
export RENDEZVOUS_SMOKE_UDP_ENDPOINT="${runner_host_gateway}:${RENDEZVOUS_UDP_HOST_PORT}"
|
|
||||||
runner_workspace_source="$(docker inspect "$HOSTNAME" | jq -er \
|
runner_workspace_source="$(docker inspect "$HOSTNAME" | jq -er \
|
||||||
--arg destination "$GITHUB_WORKSPACE" \
|
--arg destination "$GITHUB_WORKSPACE" \
|
||||||
'.[0].Mounts[] | select(.Destination == $destination) | .Source')"
|
'.[0].Mounts[] | select(.Destination == $destination) | .Source')"
|
||||||
@@ -174,6 +171,12 @@ jobs:
|
|||||||
docker compose -f "$compose_file" up --no-build --detach
|
docker compose -f "$compose_file" up --no-build --detach
|
||||||
container_id="$(docker compose -f "$compose_file" ps -q rendezvous)"
|
container_id="$(docker compose -f "$compose_file" ps -q rendezvous)"
|
||||||
test -n "$container_id"
|
test -n "$container_id"
|
||||||
|
docker network connect "$runner_network" "$container_id"
|
||||||
|
service_ip="$(docker inspect "$container_id" | jq -er \
|
||||||
|
--arg network "$runner_network" \
|
||||||
|
'.[0].NetworkSettings.Networks[$network].IPAddress')"
|
||||||
|
export RENDEZVOUS_SMOKE_HTTP_URL="http://${service_ip}:8080/"
|
||||||
|
export RENDEZVOUS_SMOKE_UDP_ENDPOINT="${service_ip}:9050"
|
||||||
test "$(docker inspect --format '{{.Config.User}}' "$container_id")" = "1654:1654"
|
test "$(docker inspect --format '{{.Config.User}}' "$container_id")" = "1654:1654"
|
||||||
test "$(docker inspect --format '{{.HostConfig.ReadonlyRootfs}}' "$container_id")" = "true"
|
test "$(docker inspect --format '{{.HostConfig.ReadonlyRootfs}}' "$container_id")" = "true"
|
||||||
test "$(docker inspect --format '{{range .Mounts}}{{if eq .Destination "/app/appsettings.Production.json"}}{{.RW}}{{end}}{{end}}' "$container_id")" = "false"
|
test "$(docker inspect --format '{{range .Mounts}}{{if eq .Destination "/app/appsettings.Production.json"}}{{.RW}}{{end}}{{end}}' "$container_id")" = "false"
|
||||||
|
|||||||
@@ -126,11 +126,8 @@ jobs:
|
|||||||
port_suffix="$(( ${GITHUB_RUN_ID:-$$} % 10000 ))"
|
port_suffix="$(( ${GITHUB_RUN_ID:-$$} % 10000 ))"
|
||||||
export RENDEZVOUS_HTTP_HOST_PORT="$(( 20000 + port_suffix ))"
|
export RENDEZVOUS_HTTP_HOST_PORT="$(( 20000 + port_suffix ))"
|
||||||
export RENDEZVOUS_UDP_HOST_PORT="$(( 40000 + port_suffix ))"
|
export RENDEZVOUS_UDP_HOST_PORT="$(( 40000 + port_suffix ))"
|
||||||
export RENDEZVOUS_HTTP_BIND_ADDRESS="0.0.0.0"
|
runner_network="$(docker inspect "$HOSTNAME" | jq -er \
|
||||||
runner_host_gateway="$(docker inspect "$HOSTNAME" | jq -er \
|
'.[0].NetworkSettings.Networks | keys[0]')"
|
||||||
'.[0].NetworkSettings.Networks | to_entries[0].value.Gateway')"
|
|
||||||
export RENDEZVOUS_SMOKE_HTTP_URL="http://${runner_host_gateway}:${RENDEZVOUS_HTTP_HOST_PORT}/"
|
|
||||||
export RENDEZVOUS_SMOKE_UDP_ENDPOINT="${runner_host_gateway}:${RENDEZVOUS_UDP_HOST_PORT}"
|
|
||||||
runner_workspace_source="$(docker inspect "$HOSTNAME" | jq -er \
|
runner_workspace_source="$(docker inspect "$HOSTNAME" | jq -er \
|
||||||
--arg destination "$GITHUB_WORKSPACE" \
|
--arg destination "$GITHUB_WORKSPACE" \
|
||||||
'.[0].Mounts[] | select(.Destination == $destination) | .Source')"
|
'.[0].Mounts[] | select(.Destination == $destination) | .Source')"
|
||||||
@@ -138,6 +135,14 @@ jobs:
|
|||||||
export RENDEZVOUS_SECRET_SOURCE="$runner_workspace_source/deploy/compose/secrets/signing-key"
|
export RENDEZVOUS_SECRET_SOURCE="$runner_workspace_source/deploy/compose/secrets/signing-key"
|
||||||
export RENDEZVOUS_IMAGE="git.finalfactory.de/heikyu/rendezvous:${RENDEZVOUS_VERSION}"
|
export RENDEZVOUS_IMAGE="git.finalfactory.de/heikyu/rendezvous:${RENDEZVOUS_VERSION}"
|
||||||
docker compose -f deploy/compose/compose.yaml up --detach --no-build
|
docker compose -f deploy/compose/compose.yaml up --detach --no-build
|
||||||
|
container_id="$(docker compose -f deploy/compose/compose.yaml ps -q rendezvous)"
|
||||||
|
test -n "$container_id"
|
||||||
|
docker network connect "$runner_network" "$container_id"
|
||||||
|
service_ip="$(docker inspect "$container_id" | jq -er \
|
||||||
|
--arg network "$runner_network" \
|
||||||
|
'.[0].NetworkSettings.Networks[$network].IPAddress')"
|
||||||
|
export RENDEZVOUS_SMOKE_HTTP_URL="http://${service_ip}:8080/"
|
||||||
|
export RENDEZVOUS_SMOKE_UDP_ENDPOINT="${service_ip}:9050"
|
||||||
for attempt in {1..100}; do
|
for attempt in {1..100}; do
|
||||||
curl --fail --silent "${RENDEZVOUS_SMOKE_HTTP_URL%/}/health/ready" >/dev/null 2>&1 && break
|
curl --fail --silent "${RENDEZVOUS_SMOKE_HTTP_URL%/}/health/ready" >/dev/null 2>&1 && break
|
||||||
if (( attempt == 100 )); then
|
if (( attempt == 100 )); then
|
||||||
|
|||||||
@@ -33,5 +33,5 @@ services:
|
|||||||
- ${RENDEZVOUS_CONFIG_SOURCE:-./appsettings.Production.json}:/app/appsettings.Production.json:ro
|
- ${RENDEZVOUS_CONFIG_SOURCE:-./appsettings.Production.json}:/app/appsettings.Production.json:ro
|
||||||
- ${RENDEZVOUS_SECRET_SOURCE:-./secrets/signing-key}:/run/secrets/rendezvous-signing-key:ro
|
- ${RENDEZVOUS_SECRET_SOURCE:-./secrets/signing-key}:/run/secrets/rendezvous-signing-key:ro
|
||||||
ports:
|
ports:
|
||||||
- "${RENDEZVOUS_HTTP_BIND_ADDRESS:-127.0.0.1}:${RENDEZVOUS_HTTP_HOST_PORT:-8080}:8080/tcp"
|
- "127.0.0.1:${RENDEZVOUS_HTTP_HOST_PORT:-8080}:8080/tcp"
|
||||||
- "${RENDEZVOUS_UDP_HOST_PORT:-9050}:9050/udp"
|
- "${RENDEZVOUS_UDP_HOST_PORT:-9050}:9050/udp"
|
||||||
|
|||||||
@@ -49,9 +49,9 @@ Compose, then point `RENDEZVOUS_SMOKE_HTTP_URL` and
|
|||||||
and production-advertised service ports remain 8080/9050. Sibling-container CI
|
and production-advertised service ports remain 8080/9050. Sibling-container CI
|
||||||
runners may also set `RENDEZVOUS_CONFIG_SOURCE` and
|
runners may also set `RENDEZVOUS_CONFIG_SOURCE` and
|
||||||
`RENDEZVOUS_SECRET_SOURCE` to host-visible absolute bind-source paths; local
|
`RENDEZVOUS_SECRET_SOURCE` to host-visible absolute bind-source paths; local
|
||||||
operators should normally keep the checked-in relative defaults. Those runners
|
operators should normally keep the checked-in relative defaults. CI attaches
|
||||||
may set `RENDEZVOUS_HTTP_BIND_ADDRESS=0.0.0.0` and target their Docker host
|
the service to the ephemeral job network for smoke traffic; it does not widen
|
||||||
gateway; do not widen the default loopback HTTP binding on an ordinary host.
|
the default loopback HTTP publication.
|
||||||
|
|
||||||
`deploy/compose/appsettings.Production.json` is a local/private-bridge smoke
|
`deploy/compose/appsettings.Production.json` is a local/private-bridge smoke
|
||||||
profile, not an Internet template: TCP is published only on host loopback, the
|
profile, not an Internet template: TCP is published only on host loopback, the
|
||||||
|
|||||||
@@ -169,7 +169,6 @@ public sealed class ReleaseCompatibilityTests
|
|||||||
{
|
{
|
||||||
string root = FindRepositoryRoot();
|
string root = FindRepositoryRoot();
|
||||||
string compose = File.ReadAllText(Path.Combine(root, "deploy/compose/compose.yaml"));
|
string compose = File.ReadAllText(Path.Combine(root, "deploy/compose/compose.yaml"));
|
||||||
Assert.Contains("${RENDEZVOUS_HTTP_BIND_ADDRESS:-127.0.0.1}", compose, StringComparison.Ordinal);
|
|
||||||
Assert.Contains("${RENDEZVOUS_HTTP_HOST_PORT:-8080}:8080/tcp", compose, StringComparison.Ordinal);
|
Assert.Contains("${RENDEZVOUS_HTTP_HOST_PORT:-8080}:8080/tcp", compose, StringComparison.Ordinal);
|
||||||
Assert.Contains("${RENDEZVOUS_UDP_HOST_PORT:-9050}:9050/udp", compose, StringComparison.Ordinal);
|
Assert.Contains("${RENDEZVOUS_UDP_HOST_PORT:-9050}:9050/udp", compose, StringComparison.Ordinal);
|
||||||
Assert.Contains("${RENDEZVOUS_CONFIG_SOURCE:-./appsettings.Production.json}", compose, StringComparison.Ordinal);
|
Assert.Contains("${RENDEZVOUS_CONFIG_SOURCE:-./appsettings.Production.json}", compose, StringComparison.Ordinal);
|
||||||
@@ -179,8 +178,9 @@ public sealed class ReleaseCompatibilityTests
|
|||||||
{
|
{
|
||||||
string workflow = File.ReadAllText(Path.Combine(root, ".gitea/workflows", workflowName));
|
string workflow = File.ReadAllText(Path.Combine(root, ".gitea/workflows", workflowName));
|
||||||
Assert.Contains("GITHUB_RUN_ID", workflow, StringComparison.Ordinal);
|
Assert.Contains("GITHUB_RUN_ID", workflow, StringComparison.Ordinal);
|
||||||
Assert.Contains("runner_host_gateway", workflow, StringComparison.Ordinal);
|
Assert.Contains("runner_network", workflow, StringComparison.Ordinal);
|
||||||
Assert.Contains("RENDEZVOUS_HTTP_BIND_ADDRESS", workflow, StringComparison.Ordinal);
|
Assert.Contains("docker network connect", workflow, StringComparison.Ordinal);
|
||||||
|
Assert.Contains("service_ip", workflow, StringComparison.Ordinal);
|
||||||
Assert.Contains("RENDEZVOUS_HTTP_HOST_PORT", workflow, StringComparison.Ordinal);
|
Assert.Contains("RENDEZVOUS_HTTP_HOST_PORT", workflow, StringComparison.Ordinal);
|
||||||
Assert.Contains("RENDEZVOUS_UDP_HOST_PORT", workflow, StringComparison.Ordinal);
|
Assert.Contains("RENDEZVOUS_UDP_HOST_PORT", workflow, StringComparison.Ordinal);
|
||||||
Assert.Contains("RENDEZVOUS_SMOKE_HTTP_URL", workflow, StringComparison.Ordinal);
|
Assert.Contains("RENDEZVOUS_SMOKE_HTTP_URL", workflow, StringComparison.Ordinal);
|
||||||
|
|||||||
Reference in New Issue
Block a user