我有一个.gitlab-ci.yml
文件,我想在其中做以下操作:
- 构建Docker镜像并将其推送到AWS ECR
- 重新启动我的EKS集群中使用Docker映像的特定部署
构建和推送Docker映像工作正常,但是我无法连接到我的EKS集群。
我的想法是使用aws eks
更新我的kubecconfig文件,kubectl
重新启动我的部署,但我不知道如何使用AWS CLI和Kubectl在我的.gitlab-ci.yml
文件。
我在CI/CD变量中定义了AWS_ACCESS_KEY_ID
,AWS_ACCOUNT_ID
和AWS_DEFAULT_REGION
。我有以下.gitlab-ci.yml
文件:
stages:
- build
- deploy staging
<build stage omitted for brevity>
staging:
stage: deploy staging
image: bitnami/kubectl:latest
only:
- staging
script: |
# install AWS CLI
apk add --no-cache python3 py3-pip
&& pip3 install --upgrade pip
&& pip3 install awscli
&& rm -rf /var/cache/apk/*
aws eks update-kubeconfig --region eu-west-1 --name my-cluster-name
kubectl rollout restart deployment my-deployment
这个管道失败,报错:
error: unknown command "sh" for "kubectl"
Did you mean this?
set
cp
我已经发现了这个问题和解决方案,但是相应地更改.gitlab-ci.yml
文件会阻止我使用apk
和安装AWS cli:
stages:
- build
- deploy staging
<build stage omitted for brevity>
staging:
stage: deploy staging
image:
name: bitnami/kubectl:latest
entrypoint: [""]
only:
- staging
script: |
# install AWS CLI
apk add --no-cache python3 py3-pip
&& pip3 install --upgrade pip
&& pip3 install awscli
&& rm -rf /var/cache/apk/*
aws eks update-kubeconfig --region eu-west-1 --name my-cluster-name
kubectl rollout restart deployment my-deployment
导致错误:
$ # install AWS CLI # collapsed multi-line command
/bin/bash: line 140: apk: command not found
/bin/bash: line 144: aws: command not found
所以这让我想到了以下问题:我如何在我的.gitlab-ci.yml
文件中使用AWS CLI和Kubectl ?或者是否有另一种更简单的方法允许我重新启动EKS集群中的部署?
我自己解决了。对于未来的读者:使用alpine/k8s图像解决了我的问题。它同时安装了Kubectl和AWScli。