Skip to content

Commit fc5d296

Browse files
committed
58750e
1 parent 1103c71 commit fc5d296

2 files changed

Lines changed: 81 additions & 33 deletions

File tree

docs/visualize-demo/ide_expansion.html

Lines changed: 3 additions & 3 deletions
Large diffs are not rendered by default.

docs/visualize-demo/readme-fleet-expansion.cgr

Lines changed: 78 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,107 @@
11
--- Expand README nginx rollout across a fleet ---
22

33
set release_id = "2026.04.15"
4+
set web_names = "web-01,web-02,web-03,web-04,web-05,web-06,web-07,web-08,web-09,web-10,web-11,web-12"
45
set web_hosts = "web-01:deploy@10.0.1.11,web-02:deploy@10.0.1.12,web-03:deploy@10.0.1.13,web-04:deploy@10.0.1.14,web-05:deploy@10.0.1.15,web-06:deploy@10.0.1.16,web-07:deploy@10.0.1.17,web-08:deploy@10.0.1.18,web-09:deploy@10.0.1.19,web-10:deploy@10.0.1.20,web-11:deploy@10.0.1.21,web-12:deploy@10.0.1.22"
56

67
target "control" local:
78

8-
[prepare release bundle]:
9-
skip if $ test -f /tmp/cgr-pages-demo/releases/myapp-${release_id}.tar.gz
10-
run $ mkdir -p /tmp/cgr-pages-demo/releases && printf "myapp %s\n" "${release_id}" > /tmp/cgr-pages-demo/releases/myapp-${release_id}.tar.gz
9+
[build release]:
10+
parallel 3 at a time, if one fails stop all:
11+
[render nginx template]:
12+
run $ mkdir -p /tmp/cgr-pages-demo/build && printf "server template %s\n" "${release_id}" > /tmp/cgr-pages-demo/build/nginx.conf
1113

12-
[smoke test release]:
13-
first [prepare release bundle]
14-
run $ test -s /tmp/cgr-pages-demo/releases/myapp-${release_id}.tar.gz
14+
[compile static assets]:
15+
run $ mkdir -p /tmp/cgr-pages-demo/build && printf "assets %s\n" "${release_id}" > /tmp/cgr-pages-demo/build/assets.txt
16+
17+
[write release notes]:
18+
run $ mkdir -p /tmp/cgr-pages-demo/build && printf "release %s\n" "${release_id}" > /tmp/cgr-pages-demo/build/notes.txt
19+
20+
run $ tar -czf /tmp/cgr-pages-demo/myapp-${release_id}.tar.gz -C /tmp/cgr-pages-demo/build .
21+
22+
[choose artifact mirror]:
23+
first [build release]
24+
25+
race:
26+
[mirror us-east]:
27+
run $ printf "us-east\n" > /tmp/cgr-pages-demo/mirror.txt
28+
29+
[mirror us-west]:
30+
run $ printf "us-west\n" > /tmp/cgr-pages-demo/mirror.txt
31+
32+
[mirror eu-central]:
33+
run $ printf "eu-central\n" > /tmp/cgr-pages-demo/mirror.txt
34+
35+
[preload release to fleet]:
36+
first [choose artifact mirror]
37+
38+
each server in ${web_names}, 4 at a time:
39+
[preload ${server}]:
40+
run $ printf "preloaded ${release_id} for ${server}\n" >> /tmp/cgr-pages-demo/preload.log
41+
42+
[shift traffic]:
43+
first [preload release to fleet]
44+
45+
stage "traffic shift":
46+
phase "canary" 1 from ${web_names}:
47+
[enable ${server} in load balancer]:
48+
run $ printf "enabled canary ${server}\n" >> /tmp/cgr-pages-demo/lb.log
49+
50+
verify "canary ${server} healthy":
51+
run $ printf "healthy ${server}\n"
52+
retry 3x wait 2s
53+
54+
phase "half" 50% from ${web_names}:
55+
each server, 3 at a time:
56+
[enable ${server} in load balancer]:
57+
run $ printf "enabled half ${server}\n" >> /tmp/cgr-pages-demo/lb.log
58+
59+
phase "remaining" rest from ${web_names}:
60+
each server, 6 at a time:
61+
[enable ${server} in load balancer]:
62+
run $ printf "enabled remaining ${server}\n" >> /tmp/cgr-pages-demo/lb.log
1563

1664
each name, addr in ${web_hosts}:
1765
target "${name}" ssh ${addr}:
1866

1967
[install nginx] as root:
20-
first [control/smoke test release]
68+
first [control/choose artifact mirror]
2169
skip if $ command -v nginx
2270
run $ apt-get update && apt-get install -y nginx
2371

24-
[write site config] as root:
72+
[configure and stage ${name}]:
2573
first [install nginx]
26-
content > /etc/nginx/sites-available/myapp:
27-
server {
28-
listen 80;
29-
server_name ${name}.example.com;
30-
root /var/www/myapp;
31-
index index.html;
32-
location / { try_files $uri $uri/ =404; }
33-
}
34-
validate $ nginx -t
35-
36-
[enable site] as root:
37-
first [write site config]
38-
skip if $ test -L /etc/nginx/sites-enabled/myapp
39-
run $ ln -sf /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/myapp
40-
41-
[deploy code]:
42-
first [install nginx]
43-
skip if $ test -f /var/www/myapp/releases/${release_id}/index.html
44-
run $ mkdir -p /var/www/myapp/releases/${release_id} && printf '<h1>Hello from ${name}</h1>\n' > /var/www/myapp/releases/${release_id}/index.html
74+
75+
parallel, if one fails wait for rest:
76+
[write site config] as root:
77+
content > /etc/nginx/sites-available/myapp:
78+
server {
79+
listen 80;
80+
server_name ${name}.example.com;
81+
root /var/www/myapp/current;
82+
index index.html;
83+
location / { try_files $uri $uri/ =404; }
84+
}
85+
validate $ nginx -t
86+
87+
[deploy code]:
88+
skip if $ test -f /var/www/myapp/releases/${release_id}/index.html
89+
run $ mkdir -p /var/www/myapp/releases/${release_id} && printf '<h1>Hello from ${name}</h1>\n' > /var/www/myapp/releases/${release_id}/index.html
90+
91+
[write health endpoint]:
92+
run $ mkdir -p /var/www/myapp/releases/${release_id} && printf 'ok ${name}\n' > /var/www/myapp/releases/${release_id}/health.txt
4593

4694
[activate release] as root:
47-
first [deploy code]
95+
first [configure and stage ${name}]
4896
run $ ln -sfn /var/www/myapp/releases/${release_id} /var/www/myapp/current
4997

5098
[start nginx] as root:
51-
first [enable site], [activate release]
99+
first [activate release]
52100
skip if $ systemctl is-active nginx
53101
run $ systemctl reload-or-restart nginx
54102

55103
verify "site is live on ${name}":
56-
first [start nginx]
104+
first [start nginx], [control/shift traffic]
57105
run $ curl -sf http://localhost/
58106
retry 3x wait 2s
59107

0 commit comments

Comments
 (0)