Ich habe nach früheren Themen nach diesem Verhalten nachgefragt, aber alle sind entweder sehr alt oder geben eine genaue Antwort. Deshalb wirke ich also meine eigene Frage. Jenkins erfolgreich, aber der Statuscode, der von der Jenkins -API zurückgegeben wird, ist 403, daher musste ich eine Problemumgehung anwenden, um damit umzugehen, aber ich mag es nicht ... es ist nur eine Temperaturlösung.
Methode: < /p>
public async Task deleteCredential(string credentialId)
{
try
{
string jenkinsCrumb = await getJenkinsCrumb();
if (string.IsNullOrEmpty(jenkinsCrumb))
{
throw new Exception("Unable to retrieve Jenkins crumb.");
}
string jenkinsToken = await getJenkinsToken();
if (string.IsNullOrEmpty(jenkinsToken))
{
throw new Exception("Unable to retrieve Jenkins access token.");
}
using (var handler = new HttpClientHandler { AllowAutoRedirect=true, UseCookies = true, CookieContainer = new CookieContainer() })
using (var client = new HttpClient(handler))
{
string authString = $"{this.jenkinsUser}:{jenkinsToken}";
string base64Auth = Convert.ToBase64String(Encoding.ASCII.GetBytes(authString));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", base64Auth);
string[] crumbParts = jenkinsCrumb.Split(':');
if (crumbParts.Length == 2)
{
client.DefaultRequestHeaders.Add(crumbParts[0], crumbParts[1]);
}
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
string encodedCredentialId = Uri.EscapeDataString(credentialId);
string deleteUrl = $"{this.jenkinsUrl}/credentials/store/system/domain/_/credential/{encodedCredentialId}/doDelete";
logger.LogInformation($"Deleting credential with ID {credentialId}...");
HttpResponseMessage response = await client.PostAsync(deleteUrl, null);
// Check if the initial request was "successful" (even if it's a 403)
if (response.StatusCode == HttpStatusCode.Forbidden)
{
//WORKAROUND: Checking if deletion was successful by performing a HEAD request
//Because Jenkins returns 403 even if the credential was deleted
//Still under analysis and investigation
HttpResponseMessage headResponse = await client.SendAsync(new HttpRequestMessage(HttpMethod.Head, deleteUrl));
if (headResponse.IsSuccessStatusCode || headResponse.StatusCode == HttpStatusCode.NotFound)
{
logger.LogInformation($"Successfully deleted credential with ID {credentialId} (despite initial 403)");
return true;
}
else
{
logger.LogError($"Credential deletion failed to be reflected (HEAD request failed: {headResponse.StatusCode}).");
return false;
}
}
else if (response.IsSuccessStatusCode)
{
logger.LogInformation($"Successfully deleted credential with ID {credentialId}");
return true;
}
else
{
logger.LogError($"DELETE request failed. Status: {response.StatusCode}");
return false;
}
}
}
catch (Exception ex)
{
logger.LogError($"Error deleting credential with ID {credentialId}: {ex.Message}");
return false;
}
}
< /code>
Die Methode authentifiziert sich also über Jenkins Token und es letzt sich auch zurück und dieser Teil ist in Ordnung. Anfrage, um festzustellen, ob die Löschung tatsächlich erfolgreich war oder nicht (nach der ersten Post (Löschen). , aber ich bin mir nicht sicher, ob das der Fall ist.>
Jenkins Rest API gibt 403 zurück, wenn Sie die Anmeldeinformationen mit der C# -Methode löschen ⇐ C#
-
- Similar Topics
- Replies
- Views
- Last post
-
-
Aktionsereignisse aus der Datenbank nicht löschen "löschen" kann nicht löschen
by Anonymous » » in Java - 0 Replies
- 17 Views
-
Last post by Anonymous
-