[ArgoCD] Fail: Status code 400 is not in the accepted range: 100:399


이전에 작성했던 ArgoCD를 API로 조작하던 중, 특정 Application을 sync하거나 수정할 때에 위의 에러를 많이 마주해왔다.

hudson.AbortException: Fail: Status code 400 is not in the accepted range: 100:399 while calling https://example-argocd.com/api/v1/applications/argoapp/spec?appNamespace=argocd
	at jenkins.plugins.http_request.HttpRequestExecution.responseCodeIsValid(HttpRequestExecution.java:470)
	at jenkins.plugins.http_request.HttpRequestExecution.processResponse(HttpRequestExecution.java:480)
	at jenkins.plugins.http_request.HttpRequestExecution.authAndRequest(HttpRequestExecution.java:376)
	at jenkins.plugins.http_request.HttpRequestExecution.call(HttpRequestExecution.java:284)
Also:   org.jenkinsci.plugins.workflow.actions.ErrorAction$ErrorId: 70b721d3-a434-48b5-b24a-9f7feecfd331
Caused: java.lang.IllegalStateException
	at jenkins.plugins.http_request.HttpRequestExecution.call(HttpRequestExecution.java:287)
	at jenkins.plugins.http_request.HttpRequestExecution.call(HttpRequestExecution.java:80)
	at hudson.remoting.LocalChannel.call(LocalChannel.java:47)
	at jenkins.plugins.http_request.HttpRequestStep$Execution.run(HttpRequestStep.java:404)
	at jenkins.plugins.http_request.HttpRequestStep$Execution.run(HttpRequestStep.java:383)
	at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)
Finished: FAILURE

에러를 보면 400 응답값을 받은 것으로 보인다.

하지만 400 응답코드는 흔히 말하는 400 Bad Request인데, 이를 연관짓기가 쉽지 않았다.

특히나 다른 Application에는 똑같은 코드로도 API가 정상응답이 오고, 특정 Application에만 400응답이 오는게 너무 미심쩍었다.




사실 위의 에러 코드를 보게되면 대부분의 사람들이 해당 Application의 이상이 없는지 확인할 것이다.

바로 그것이 해결법이였다.

ArgoCD에서 해당 Application을 들어가보면 Error가 떠있었다.


해당 Error를 확인해보니

Failed to load target state: failed to generate manifest for source 1 of 1: rpc error: code = Unknown desc = `helm pull --destination /tmp/26b0c310-d049-4709-a87b-a691f2375493 --version 0.1.0-6 --repo http://helm-repo.com exam-app` failed exit status 1: Error: chart "exam-app" version "0.1.0-6" not found in http://helm-repo.com repository

내가 만든 ChartMuseum에 해당 Chart의 버전이 없었다.

위의 에러는 예제로 만들기위해 임의 값을 넣어 에러를 발생시킨거지만, 실제로는 다양한 이유로 Application에 에러가 발생할 수 있다.

이를 해결한 뒤에 똑같은 API로 ArgoCD를 조작해보면 정상적으로 작동한다.


매번 느끼는 하나의 법칙이 있는데, 글에도 언급했다시피 풀리지 않는 어려운 문제일수록 되게 간단한 실수로 인해 발생되는 경우가 많다.

여태까지 매번 그래왔고 앞으로도 그럴 것 같지만…. 나만의 법칙을 늘 되새기면서 업무를 해야겠다.