繁体   English   中英

如何在 .gitlab-ci.yml 中使用 AWS CLI 和 kubectl

[英]How to use AWS CLI and kubectl in .gitlab-ci.yml

我有一个.gitlab-ci.yml文件,我想在其中执行以下操作:

  1. 构建 Docker 镜像并将其推送到 AWS ECR
  2. 重新启动我的 EKS 集群中使用此 Docker 图像的特定部署

构建和推送 Docker 图像工作正常,但我无法连接到我的 EKS 集群。

我的想法是使用aws eks eks 更新我的 kubeconfig 文件,并kubectl重新启动我的部署,但我不知道如何在我的.gitlab-ci.yml文件中使用 AWS CLI 和 Kubectl。

我在我的 CI/CD 变量中定义了AWS_ACCESS_KEY_IDAWS_ACCOUNT_IDAWS_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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM