开发者问题收集

doctl 在 gitlab-ci 中不可用

2022-11-16
531

我正在构建一个 Gitlab-CI 管道,将 Spring Boot 应用程序部署到托管在 DigitalOcean 上的 Kubernetes 集群。 幸运的是,我才刚刚开始做这件事,所以几乎没有什么臃肿之处,而且我认为在继续构建一些疯狂的东西之前,我应该先测试一下是否所有东西都连接正确。

本质上,我有一个 Gitlab-CI 作业,它会提取此映像: digitalocean/doctl:1.87.0 ,然后我尝试在作业的 script 部分运行多个 doctl 命令。这个非常简单的“部署”脚本的结果:

deploy-to-kubernetes:
  stage: deploy
  image: digitalocean/doctl:1.87.0
  script:
    - doctl --help

看起来像这样:

Error: unknown command "sh" for "doctl"
Run 'doctl --help' for usage.
Cleaning up project directory and file based variables 00:00
ERROR: Job failed: exit code 255

经过一番挖掘和谷歌搜索以及绞尽脑汁之后,我偶然发现了这个 帖子 ,并认为它可能也适用于 doctl 图像,因此我将我的 Gitlab-CI 作业更新为:

deploy-to-kubernetes:
  stage: deploy
  image:
    name: digitalocean/doctl:1.87.0
    entrypoint: [""]
  script:
    - doctl --help

结果如下:

$ doctl --help
/bin/bash: line 128: doctl: command not found
Cleaning up project directory and file based variables 00:00
ERROR: Job failed: exit code 1

我很确定我做了一些绝对愚蠢的事情,但我不知道那是什么,所以如果有人能帮忙非常感谢,如果您需要更多信息,请告诉我。

仅供参考:这是我在 StackOverflow 上发布的第一个问题,因此非常感谢您对我需要更改、改进等方面的任何反馈!

谢谢!

3个回答

$PATH 包含此图像中的默认值。但 doctl 可在 /app/doctl 中使用。因此您可以这样使用它: /app/doctl %command% (例如, /app/doctl 版本

Fr3nzy
2022-12-02

我遇到了同样的问题,并选择只使用常规的 alpine 容器并自行安装 doctl 工具。不过,这是一种解决方法。

deploy-to-kubernetes:
  stage: deploy
  image: debian:11.6-slim
  before_script:
    - apt update && apt -y upgrade && apt-get install -y curl
    - curl -Lo doctl.tar.gz https://github.com/digitalocean/doctl/releases/download/v1.91.0/doctl-1.91.0-linux-amd64.tar.gz && tar xf doctl.tar.gz
    - chmod u+x doctl
    - mv doctl /usr/local/bin/doctl
  script:
    - doctl --help
shrumm
2022-12-21

我遇到了同样的问题,下面这个工作对我有用:

"Deploy to DigitalOcean":
  image:
    name: digitalocean/doctl:latest
    entrypoint: [""]
  stage: deploy
  needs:
    - job: "Test Docker image"
  script:
    - /app/doctl auth init
    - /app/doctl apps create-deployment $DIGITALOCEAN_STUDENT_BACKEND_ID
  only:
    - master

但是它还需要 DIGITALOCEAN_ACCESS_TOKEN 变量 DigitalOcean 令牌

Mateusz
2023-01-21