in network/gitlab.go [555:617]
func (n *GitLabClient) RequestJob(
ctx context.Context,
config common.RunnerConfig,
sessionInfo *common.SessionInfo,
) (*common.JobResponse, bool) {
request := common.JobRequest{
Info: n.getRunnerVersion(config),
Token: config.Token,
SystemID: config.SystemIDState.GetSystemID(),
LastUpdate: n.getLastUpdate(&config.RunnerCredentials),
Session: sessionInfo,
}
var response common.JobResponse
//nolint:bodyclose
result, statusText, httpResponse := n.doMeasuredJSON(
ctx,
config.Log(),
config.RunnerCredentials.ShortDescription(),
config.SystemIDState.GetSystemID(),
apiEndpointRequestJob,
doJSONParams{
credentials: &config.RunnerCredentials,
method: http.MethodPost,
uri: "jobs/request",
statusCode: http.StatusCreated,
headers: RunnerTokenHeader(config.Token),
request: &request, response: &response,
},
)
defer func() { n.handleResponse(ctx, httpResponse, false) }()
switch result {
case http.StatusCreated:
config.Log().WithFields(logrus.Fields{
"job": response.ID,
"repo_url": response.RepoCleanURL(),
}).Println("Checking for jobs...", "received")
resolveFullChain := config.IsFeatureFlagOn(featureflags.ResolveFullTLSChain)
tlsData, err := n.getResponseTLSData(&config.RunnerCredentials, resolveFullChain, httpResponse)
if err != nil {
config.Log().
WithError(err).Errorln("Error on fetching TLS Data from API response...", "error")
}
addTLSData(&response, tlsData)
return &response, true
case http.StatusForbidden:
config.Log().WithField("status", statusText).Errorln("Checking for jobs...", "forbidden")
return nil, false
case http.StatusNoContent:
config.Log().WithField("status", statusText).Debug("Checking for jobs...", "no content")
return nil, true
case clientError:
config.Log().WithField("status", statusText).Errorln("Checking for jobs...", "client error")
return nil, false
default:
config.Log().WithField("status", statusText).Warningln("Checking for jobs...", "failed")
return nil, true
}
}