How do you use Go to address the following situation?
Say your QAs do some manual exploratory testing in addition
to all the automation. They might want to have the last good build
automatically deployed to their test environment for them every morning so that they don’t have to spend time manually figuring out the last good build and
deploying it.
![]() |
Manual Stage Type |
Simply creating a downstream deployment pipeline won’t do the
trick. For one, it would auto-schedule for every successful upstream build thus
wiping out the previous deployment and any testing in progress. To prevent auto-scheduling, you need to mark the first stage of the downstream pipeline as type manual.

![]() |
A locked pipeline |
Another way to achieve this is to add another manual stage at the end and use automatic pipeline locking. When auto locking is enabled in a multi-stage pipeline, the pipeline will only get scheduled if the previous run is complete.This may sound roundabout compared to simply pausing the pipeline. But it could serve a useful function. The final manual stage could serve as an indicator of successful exploratory testing. You could even treat this a restricted approval privilege. Any pipelines further downstream will now only get scheduled after QAs give the go-ahead.
Finally, we need to consider the agents where stuff gets deployed. It is important to ring-fence the agents by defining an QA-exploratory-testing environment. It is also necessary to instruct all deployment jobs to run on all agents.
Hopefully this illustrates the power of combining a number of Go-primitives to achieve higher order behaviour.