Is it possible to preserve environment variables on bamboo specs publish?
Asked by John Smith:

From my understanding would be logical to nullify variables/triggers/permissions for the environment if the one explicitly passed an empty list in specs. No empty list - nothing should be touched. How to combine UI and Specs now? I publish deployment environments. Users modify variables. I publish again and poof - all user settings are gone.


Answers:
author: Marek Parfianowicz
body: > I publish deployment environments. Users modify variables. I publish again and poof - all user settings are gone.

Could you please provide more details how your workflow looks like?

Why users do modify variables in environments using UI, instead of simply updating them in Bamboo Specs?

* What do you gain by this?
* What blocks you from keeping them in Specs?

By maintaining variables in Bamboo Specs and versioning specs in VCS, you gain significant benefits, which is tracking of environment changes, ability to rollback to previous version etc.

> No empty list - nothing should be touched.

Bamboo Specs does not distinguish between "no empty list" and "empty list". Empty simply means no elements in the list. Which means that any existing settings shall be removed. No matter whether it's about variables or any other kind of entity.

comments: author: Marek Parfianowicz
body: PS: there is only one exception. In Plan and Job you can use "noXyz()" methods:

* com.atlassian.bamboo.specs.api.builders.plan.Plan#noDependencies
* com.atlassian.bamboo.specs.api.builders.plan.Plan#noNotifications
* com.atlassian.bamboo.specs.api.builders.plan.Job#noPluginConfigurations
* com.atlassian.bamboo.specs.api.builders.plan.Plan#noPluginConfigurations

They are deprecated and provided only for backward compatibility with **Bamboo 6.0** . Support for dependencies, notifications and plugin configurations was introduced in **Bamboo 6.1**.


author: John Smith
body: We've got different types of users that work with deploy environments: someone maintains it, someone deploys. The deploys are parametrized: which database to use, what to deploy, etc.

An average QA engineer won't use git, won't do commits but rather will use UI to configure some environment parameters for the deploy.

For maintenance it is easier to go for specs, because we can easily do bulk changes, or can easily add a new environment into a list of 100 environments, or can easily merge/split/copy environments across different projects. Doing it with UI is very inconvenient. So we want to use Specs and track it with git, but do not want to mess with parameters configured by other engineers.


author: kiranpatel11
body: [@Marek Parfianowicz](/t5/user/viewprofilepage/user-id/781598)

Bamboo specs secrets encryption is not useful if you have multiple teams using same Bamboo server. One team can steal encrypted secret and use it without the need of decrypting it. Worst is - it is recommended way in your official documentation.

It would be best if we have "Bamboo build plan as code" and manage the **Project level** variables ourside of plan specs. So that specs can be managed via code, but variables- particularly secrets- can be managed outside of code.

I suggest to check the usability of GitLab pipeline. It makes so much sense.


author: Marek Parfianowicz
body: See <https://jira.atlassian.com/browse/BAM-7132>

This will be available in **Bamboo 7.1.0**


Tags: spec