Uploading artifacts to artifactory from a pipeline job returns a 404 error

Article ID:230128248
1 minute readKnowledge base


You are using a Pipeline Job and the Artifactory plugin to upload some files in a repository

def uploadSpec = """{
  "files": [
      "pattern": "bazinga/*froggy*.zip",
      "target": "bazinga-repo/froggy-files"

but the upload fails with a 404 error

[Pipeline] artifactoryUpload
For pattern: bazinga/*froggy*.zip 1 artifacts were found
Deploying artifact: https://artifactory.corp.com:8081/bazinga-repo/froggy-files
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
java.io.IOException: Failed to deploy file: HTTP response code: 404. HTTP response message: Not Found
    at org.jfrog.build.extractor.clientConfiguration.client.ArtifactoryBuildInfoClient.throwHttpIOException(ArtifactoryBuildInfoClient.java:704)
    at org.jfrog.build.extractor.clientConfiguration.client.ArtifactoryBuildInfoClient.uploadFile(ArtifactoryBuildInfoClient.java:584)
    at org.jfrog.build.extractor.clientConfiguration.client.ArtifactoryBuildInfoClient.deployArtifact(ArtifactoryBuildInfoClient.java:282)
    at org.jfrog.hudson.generic.GenericArtifactsDeployer$FilesDeployerCallable.deploy(GenericArtifactsDeployer.java:206)
    at org.jfrog.hudson.generic.GenericArtifactsDeployer$FilesDeployerCallable.invoke(GenericArtifactsDeployer.java:178)
    at org.jfrog.hudson.generic.GenericArtifactsDeployer$FilesDeployerCallable.invoke(GenericArtifactsDeployer.java:122)



With using Pipeline and the upload information, you need to add the / in the end of the target to indicate that the deployment is done to a folder.

In the previous sample you need to replace "target": "bazinga-repo/froggy-files" by "target": "bazinga-repo/froggy-files/".

When there is no / in the end, the file name is actually being changed to the one that you have specified in the target: bazinga-repo/froggy-files.

This can also cause issues if you already have a folder with that name.