@@ -424,11 +424,50 @@ func (r *JobRunner) createEnvironment(ctx context.Context) ([]string, error) {
424424 }
425425
426426 // Write out the job environment to file:
427- // - envShellFile: in k="v" format, with newlines escaped
427+ // - envShellFile: in k="v" format, with newlines escaped. If the
428+ // propagate-agent-vars experiment is enabled, the names of several agent
429+ // config variables are prepended at the top.
428430 // - envJSONFile: as a single JSON object {"k":"v",...}, escaped appropriately for JSON.
429431 // We present only the clean environment - i.e only variables configured
430432 // on the job upstream - and expose the path in another environment variable.
431433 if r .envShellFile != nil {
434+ if experiments .IsEnabled (ctx , experiments .PropagateAgentConfigVars ) {
435+ // Note that some variables in this list might not be defined later,
436+ // when something comes to read the file. See below where they are
437+ // added conditionally, e.g. BUILDKITE_TRACING_BACKEND.
438+ // Docker in particular tolerates undefined vars in an env file
439+ // without complaints.
440+ const agentCfgVars = `BUILDKITE_GIT_CHECKOUT_FLAGS
441+ BUILDKITE_GIT_CLEAN_FLAGS
442+ BUILDKITE_GIT_CLONE_FLAGS
443+ BUILDKITE_GIT_CLONE_MIRROR_FLAGS
444+ BUILDKITE_GIT_FETCH_FLAGS
445+ BUILDKITE_GIT_MIRRORS_LOCK_TIMEOUT
446+ BUILDKITE_GIT_MIRRORS_PATH
447+ BUILDKITE_GIT_MIRRORS_SKIP_UPDATE
448+ BUILDKITE_GIT_SUBMODULES
449+ BUILDKITE_CANCEL_GRACE_PERIOD
450+ BUILDKITE_COMMAND_EVAL
451+ BUILDKITE_LOCAL_HOOKS_ENABLED
452+ BUILDKITE_PLUGINS_ENABLED
453+ BUILDKITE_REDACTED_VARS
454+ BUILDKITE_SHELL
455+ BUILDKITE_SIGNAL_GRACE_PERIOD_SECONDS
456+ BUILDKITE_SSH_KEYSCAN
457+ BUILDKITE_STRICT_SINGLE_HOOKS
458+ BUILDKITE_TRACE_CONTEXT_ENCODING
459+ BUILDKITE_TRACING_BACKEND
460+ BUILDKITE_TRACING_SERVICE_NAME
461+ BUILDKITE_TRACING_TRACEPARENT
462+ BUILDKITE_TRACING_PROPAGATE_TRACEPARENT
463+ BUILDKITE_AGENT_AWS_KMS_KEY
464+ BUILDKITE_AGENT_JWKS_FILE
465+ BUILDKITE_AGENT_JWKS_KEY_ID`
466+ if _ , err := fmt .Fprintln (r .envShellFile , agentCfgVars ); err != nil {
467+ return nil , err
468+ }
469+ }
470+
432471 for key , value := range env {
433472 if _ , err := fmt .Fprintf (r .envShellFile , "%s=%q\n " , key , value ); err != nil {
434473 return nil , err
0 commit comments