Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Getting InvalidFileExistsBehaviorException even though fileExistsBehavior is not specified #332

Open
waseemahammed opened this issue Oct 21, 2024 · 1 comment

Comments

@waseemahammed
Copy link

waseemahammed commented Oct 21, 2024

Jenkins and plugins versions report

Getting InvalidFileExistsBehaviorException even though fileExistsBehavior is not specified.

Running the following block on Jenkins pipeline:

      createDeployment(
          applicationName: "${APPLICATION_NAME}",
          deploymentGroupName: "${DEPLOYMENT_GROUP}",
          deploymentConfigName: 'CodeDeployDefault.AllAtOnce',
          description: '${SERVICE_NAME} deployment',
          waitForCompletion: 'true',
          s3Bucket: "${S3_BUCKET}",
          s3Key: "${SERVICE_NAME}/dev/appspec.json",
          s3BundleType: 'JSON'
      )

Getting following error:

com.amazonaws.services.codedeploy.model.InvalidFileExistsBehaviorException: For Lambda, ECS and Kubernetes deployment, fileExistsBehavior can not be specified (Service: AmazonCodeDeploy; Status Code: 400; Error Code: InvalidFileExistsBehaviorException; Request ID: 31fec058-f220-4842-bb9c-bdef9ef4734c; Proxy: null)

What Operating System are you using (both controller, and any agents involved in the problem)?

Running this on jenkins node

Reproduction steps

  1. Install pipeline-aws plugin on Jenkins
  2. Create an Application, Deployment group in AWS Code Deploy.
  3. Create a jenkins pipeline and furnish the details like below.
  4. Run Jenkins pipeline.
  createDeployment(
      applicationName: "${APPLICATION_NAME}",
      deploymentGroupName: "${DEPLOYMENT_GROUP}",
      deploymentConfigName: 'CodeDeployDefault.AllAtOnce',
      description: '${SERVICE_NAME} deployment',
      waitForCompletion: 'true',
      s3Bucket: "${S3_BUCKET}",
      s3Key: "${SERVICE_NAME}/dev/appspec.json",
      s3BundleType: 'JSON'
  )

Expected Results

Code Deploy deployment should be created with appspec provided in reproduction steps.

Actual Results

Jenkins console output:

com.amazonaws.services.codedeploy.model.InvalidFileExistsBehaviorException: For Lambda, ECS and Kubernetes deployment, fileExistsBehavior can not be specified (Service: AmazonCodeDeploy; Status Code: 400; Error Code: InvalidFileExistsBehaviorException; Request ID: 31fec058-f220-4842-bb9c-bdef9ef4734c; Proxy: null)
	at PluginClassLoader for aws-java-sdk-minimal//com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1912)
	at PluginClassLoader for aws-java-sdk-minimal//com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleServiceErrorResponse(AmazonHttpClient.java:1450)
	at PluginClassLoader for aws-java-sdk-minimal//com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1419)
	at PluginClassLoader for aws-java-sdk-minimal//com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1183)
	at PluginClassLoader for aws-java-sdk-minimal//com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:838)
	at PluginClassLoader for aws-java-sdk-minimal//com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:805)
	at PluginClassLoader for aws-java-sdk-minimal//com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:779)
	at PluginClassLoader for aws-java-sdk-minimal//com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:735)
	at PluginClassLoader for aws-java-sdk-minimal//com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:717)
	at PluginClassLoader for aws-java-sdk-minimal//com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:581)
	at PluginClassLoader for aws-java-sdk-minimal//com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:559)
	at PluginClassLoader for aws-java-sdk-codedeploy//com.amazonaws.services.codedeploy.AmazonCodeDeployClient.doInvoke(AmazonCodeDeployClient.java:4389)
	at PluginClassLoader for aws-java-sdk-codedeploy//com.amazonaws.services.codedeploy.AmazonCodeDeployClient.invoke(AmazonCodeDeployClient.java:4356)
	at PluginClassLoader for aws-java-sdk-codedeploy//com.amazonaws.services.codedeploy.AmazonCodeDeployClient.invoke(AmazonCodeDeployClient.java:4345)
	at PluginClassLoader for aws-java-sdk-codedeploy//com.amazonaws.services.codedeploy.AmazonCodeDeployClient.executeCreateDeployment(AmazonCodeDeployClient.java:1609)
	at PluginClassLoader for aws-java-sdk-codedeploy//com.amazonaws.services.codedeploy.AmazonCodeDeployClient.createDeployment(AmazonCodeDeployClient.java:1578)
	at PluginClassLoader for pipeline-aws//de.taimos.pipeline.aws.code.deploy.CreateDeployStep$Execution.run(CreateDeployStep.java:166)
	at PluginClassLoader for pipeline-aws//de.taimos.pipeline.aws.code.deploy.CreateDeployStep$Execution.run(CreateDeployStep.java:141)
	at PluginClassLoader for workflow-step-api//org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:840)
Finished: FAILURE

Anything else?

No response

Are you interested in contributing a fix?

I would be happy to.

We have a check here which can extensively check which platform we are deploying on.

private FileExistsBehavior getFileExistsBehavior(String fileExistsBehavior) {

By default the code has set 'fileExistsBehavior' to 'DISALLOW' which need to be checked based on the platform of deployment and not AWS default value here.

@waseemahammed
Copy link
Author

waseemahammed commented Oct 21, 2024

I have raised a PR for the change : #333

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant