Mình đang việc 1 bitbucket-pipeline để thực hiện upgrade eks cluster bằng eksctl
# This is an example Starter pipeline configuration
# Use a skeleton to build, test and deploy using manual and parallel steps
# -----
# You can specify a custom docker image from Docker Hub as your build environment.
pipelines:
custom:
upgrade-eks:
- variables:
- name: eksClusterName
default: 'eks-nimtechnology'
allowed-values: # optionally restrict variable values
- 'eks-nimtechnology'
- name: regionName
default: 'us-east-2'
allowed-values: # optionally restrict variable values
- 'us-east-2'
- name: upgradeToVersion
default: '1.21'
allowed-values: # optionally restrict variable values
- '1.21'
- step:
name: 'Get Cluster infomations'
deployment: lab-nimtechnology
image: weaveworks/eksctl:latest
script:
- eksctl get cluster --name $eksClusterName --region $regionName --output yaml
- step:
name: 'Upgrade EKS Controller'
image: weaveworks/eksctl:latest
trigger: manual
script:
- eksctl upgrade cluster --name $eksClusterName --region $regionName --version $upgradeToVersion --approve
- step:
name: 'Create New Node Group'
image: weaveworks/eksctl:latest
trigger: manual
script:
- eksctl create nodegroup --cluster $eksClusterName --region $regionName
create-eks:
- variables:
- name: eksVersion
default: '1.20'
allowed-values: # optionally restrict variable values
- '1.20'
- step:
name: 'Creating New EKS Cluster of Nimtechnology'
deployment: lab-nimtechnology
image: weaveworks/eksctl:latest
script:
- echo "Create a new eks cluster..."
- eksctl create cluster --name eks-nimtechnology --region us-east-2 --version $eksVersion
Và mình cũng có chỉ các bạn cách để chúng ta có thể tạo nhiều env theo từng môi trường khác nhau.

Nhưng mà bitbucket-pipeline là không cho phép điều này.
The deployment environment ‘lab-nimtechnology’ in your bitbucket-pipelines.yml file occurs multiple times in the pipeline. Please refer to our documentation for valid environments and their ordering.
Mình cũng có thấy có người đã raise lên với bitbucket.
https://community.atlassian.com/t5/Bitbucket-questions/The-deployment-environment-test-in-your-bitbucket-pipelines-yml/qaq-p/971584
Bà cũng đã có ticket cho vụ này.
https://jira.atlassian.com/browse/BCLOUD-18261
Và chả biết bao giờ xong.
trong topic này thì có một số master đã hiến kế cho chúng ta.
https://stackoverflow.com/questions/68930752/the-deployment-environment-staging-in-your-bitbucket-pipelines-yml-file-occurs
và chúng ta sẽ sử dụng câu answer có nhiều người vote nhất.
The workaround for the issue with reusing Environment Variables without using the deployment clause for more than one steps in a pipeline I have found is to dump ENV VARS to a file and save it as an artifact that will be sourced in the following steps.
steps:
- step: &set-environment-variables
name: 'Set environment variables'
script:
- printenv | xargs echo export > .envs
artifacts:
- .envs
- step: &next-step
name: "Next step in the pipeline"
script:
- source .envs
- next_actions
pipelines:
pull-requests:
'**':
- step:
<<: *set-environment-variables
deployment: my-deployment
- step:
<<: *next-step
name: "Name of the next step being executed"
branches:
staging:
- step:
<<: *set-environment-variables
deployment: my-deployment
- step:
<<: *next-step
name: "Name of the next step being executed"