Commit b643dc1
authored
Feature: Retry with exponential backoff when Octopus Deploy is unavailable (#186)
* Feature: Retry with exponential backoff when Octopus Deploy is unavailable (#186)
When the Octopus Deploy server is unavailable (connection refused, 502/503/504,
DNS failure, timeouts), the TeamCity plugin now retries CLI execution with
exponential backoff instead of failing the build immediately.
- OctopusErrorClassifier: distinguishes transient errors (retry) from permanent
errors (fail fast) by parsing CLI stdout/stderr patterns for both .NET and Go CLIs
- OctopusCliRetryExecutor: retry loop with exponential backoff (5s initial,
2m max per attempt, 15m total timeout), configurable via env vars
(OCTOPUS_RETRY_ENABLED, OCTOPUS_RETRY_TIMEOUT, OCTOPUS_RETRY_INITIAL_DELAY,
OCTOPUS_RETRY_MAX_DELAY)
- CaptureWriter: Output.Writer decorator for capturing CLI output for error
classification in the legacy build process path
- Both legacy (OctopusBuildProcess) and new CLI (CLIBuildProcess) paths use the
shared retry executor
* fix: resolve symlink mismatch in Zip Slip check on macOS
The extractTarGzResource() Zip Slip security check compared
destDir.resolve(entry).normalize() against destDir.toRealPath(). On macOS,
/var is a symlink to /private/var, so toRealPath() resolved to
/private/var/folders/... while the entry path kept /var/folders/...,
causing startsWith() to fail and throw a false-positive Zip Slip error.
Fix: resolve destDir to its real path once upfront, then use the resolved
path consistently for both entry resolution and the security check.
* docs: add code comments explaining retry workflow for debugging
Adds Javadoc and inline comments to the retry infrastructure classes
(OctopusCliRetryExecutor, OctopusErrorClassifier, CaptureWriter) and
both build process integration points (OctopusBuildProcess, CLIBuildProcess)
to help engineers unfamiliar with the codebase understand the retry flow.1 parent 92c75d7 commit b643dc1
9 files changed
Lines changed: 941 additions & 95 deletions
File tree
- octopus-agent/src
- main/java/octopus/teamcity/agent
- cli
- test/java/octopus/teamcity/agent
Lines changed: 58 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
Lines changed: 3 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
140 | 140 | | |
141 | 141 | | |
142 | 142 | | |
| 143 | + | |
143 | 144 | | |
144 | 145 | | |
145 | 146 | | |
| |||
153 | 154 | | |
154 | 155 | | |
155 | 156 | | |
156 | | - | |
| 157 | + | |
157 | 158 | | |
158 | | - | |
| 159 | + | |
159 | 160 | | |
160 | 161 | | |
161 | 162 | | |
| |||
Lines changed: 76 additions & 54 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
39 | 39 | | |
40 | 40 | | |
41 | 41 | | |
42 | | - | |
| 42 | + | |
43 | 43 | | |
44 | | - | |
45 | | - | |
46 | 44 | | |
47 | 45 | | |
| 46 | + | |
| 47 | + | |
48 | 48 | | |
49 | 49 | | |
50 | 50 | | |
| |||
58 | 58 | | |
59 | 59 | | |
60 | 60 | | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
61 | 64 | | |
62 | 65 | | |
63 | 66 | | |
| |||
118 | 121 | | |
119 | 122 | | |
120 | 123 | | |
121 | | - | |
122 | | - | |
123 | | - | |
124 | | - | |
125 | | - | |
126 | | - | |
127 | | - | |
128 | | - | |
129 | | - | |
130 | | - | |
131 | | - | |
132 | | - | |
133 | | - | |
134 | | - | |
135 | | - | |
136 | | - | |
137 | | - | |
138 | | - | |
139 | | - | |
140 | | - | |
141 | | - | |
142 | | - | |
143 | | - | |
144 | | - | |
| 124 | + | |
| 125 | + | |
145 | 126 | | |
146 | | - | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
147 | 134 | | |
148 | | - | |
| 135 | + | |
149 | 136 | | |
150 | | - | |
151 | | - | |
152 | | - | |
153 | | - | |
154 | | - | |
155 | | - | |
156 | 137 | | |
157 | 138 | | |
158 | 139 | | |
159 | 140 | | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
160 | 146 | | |
161 | 147 | | |
162 | 148 | | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
163 | 201 | | |
164 | 202 | | |
165 | 203 | | |
| |||
199 | 237 | | |
200 | 238 | | |
201 | 239 | | |
202 | | - | |
203 | | - | |
204 | | - | |
205 | | - | |
206 | | - | |
207 | | - | |
208 | | - | |
209 | | - | |
210 | | - | |
211 | | - | |
212 | | - | |
213 | | - | |
214 | | - | |
215 | | - | |
216 | | - | |
217 | | - | |
218 | | - | |
219 | | - | |
| 240 | + | |
| 241 | + | |
220 | 242 | | |
221 | | - | |
| 243 | + | |
222 | 244 | | |
223 | 245 | | |
224 | 246 | | |
| |||
0 commit comments