Uploaded image for project: 'Bamboo Data Center'
  1. Bamboo Data Center
  2. BAM-19782

Deleting an artifact definition from a build plan will corrupt any linked deployment plans with artifact download tasks

    XMLWordPrintable

Details

    Description

      Summary

      Deleting an artifact definition from a build plan will corrupt any linked deployment plans with artifact download tasks. Can no longer create or deploy a release, nor delete the deployment project once affected. Source build plan can not be modified.

      Steps to Reproduce

      1. Setup a build plan with 2 shared artifact definitions
      2. Create a deployment project linked to this build plan
      3. Add an environment with an artifact download task
      4. Build the source build plan
      5. Delete one of the artifact definitions
      6. Attempt to create a release off that result

      Expected Results

      Release can be created / deployed
      Deployment project can be deleted
      Source build plan can not be modified

      Actual Results

      The below exception is thrown in the UI as an Internal Server error and logged to the atlassian-bamboo.log when attempting to create a release / delete the project / change the source build plan:

      org.springframework.orm.hibernate5.HibernateSystemException: Cannot instantiate abstract class or interface:  : com.atlassian.bamboo.deployments.projects.persistence.items.AbstractMutableDeploymentProjectItem; nested exception is org.hibernate.InstantiationException: Cannot instantiate abstract class or interface:  : com.atlassian.bamboo.deployments.projects.persistence.items.AbstractMutableDeploymentProjectItem
      	at org.springframework.orm.hibernate5.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:296)
      	at org.springframework.orm.hibernate5.HibernateTemplate.doExecute(HibernateTemplate.java:362)
      	at org.springframework.orm.hibernate5.HibernateTemplate.execute(HibernateTemplate.java:313)
      	at com.atlassian.bamboo.deployments.projects.persistence.DeploymentProjectDaoImpl.getProjectItems(DeploymentProjectDaoImpl.java:206)
      	at sun.reflect.GeneratedMethodAccessor1679.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
      	at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
      	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
      	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
      	at com.sun.proxy.$Proxy89.getProjectItems(Unknown Source)
      	at com.atlassian.bamboo.deployments.versions.service.DeploymentVersionServiceImpl$3.run(DeploymentVersionServiceImpl.java:454)
      	at com.atlassian.bamboo.variable.CustomVariableContextImpl.withVariableSubstitutor(CustomVariableContextImpl.java:174)
      	at com.atlassian.bamboo.deployments.versions.service.DeploymentVersionServiceImpl.getNewDeploymentVersionWithoutName(DeploymentVersionServiceImpl.java:447)
      	at com.atlassian.bamboo.deployments.versions.service.DeploymentVersionServiceImpl.createDeploymentVersionInternal(DeploymentVersionServiceImpl.java:302)
      	at com.atlassian.bamboo.deployments.versions.service.DeploymentVersionServiceImpl.access$000(DeploymentVersionServiceImpl.java:109)
      	at com.atlassian.bamboo.deployments.versions.service.DeploymentVersionServiceImpl$2.apply(DeploymentVersionServiceImpl.java:280)
      	at com.atlassian.bamboo.deployments.versions.service.DeploymentVersionServiceImpl$2.apply(DeploymentVersionServiceImpl.java:277)
      	at com.atlassian.bamboo.core.ScopedExclusionServiceImpl.withLock(ScopedExclusionServiceImpl.java:63)
      	at com.atlassian.bamboo.deployments.versions.service.DeploymentVersionServiceImpl.createDeploymentVersion(DeploymentVersionServiceImpl.java:277)
      	at com.atlassian.bamboo.deployments.versions.actions.AbstractCreateDeploymentVersion.createVersion(AbstractCreateDeploymentVersion.java:117)
      	at com.atlassian.bamboo.deployments.execution.actions.ExecuteManualDeployment.execute(ExecuteManualDeployment.java:210)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      

      Notes

      • The affected deployment plan will display "No shared artifacts found for related plan. Please configure the build plan to publish shared artifacts." despite shared artifacts being configured still on the source build plan.

      Workaround

      1. Create a new plan with an artifact definition. This plan needs no content other than an artifact definition and its sole purpose is to be removed and in the next step.
      2. Remove this new plan created in step 1. This will trigger Bamboo to execute a DB cleanup and removes orphaned Artifact definition records which trigger the bug in affected plans.

      Attachments

        Issue Links

          Activity

            People

              mgardias Marcin Gardias
              jowen@atlassian.com Jeremy Owen
              Votes:
              5 Vote for this issue
              Watchers:
              22 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: