Port of 32098-environments-reusable
What does this MR do?
Port of 32098-environments-reusable https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/15484/diffs
Port of 32098-environments-reusable https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/15484/diffs