docker - 为什么找不到chmod和doctl?

标签 docker drone

我创建了一个具有以下内容的 docker 镜像:

FROM ubuntu:20.10

RUN apt-get update
RUN apt-get install -y curl
RUN apt-get install -y git

RUN curl -L https://github.com/digitalocean/doctl/releases/download/v1.43.0/doctl-1.43.0-linux-amd64.tar.gz  | tar xz
RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
RUN curl -L https://github.com/argoproj/argo-cd/releases/download/v1.5.5/argocd-linux-amd64 -o argocd
RUN curl -L https://get.helm.sh/helm-v3.2.1-linux-amd64.tar.gz | tar xz


RUN chmod +x ./argocd
RUN chmod +x ./kubectl
RUN chmod +x ./linux-amd64/helm

RUN mv ./argocd /usr/local/bin/
RUN mv ./kubectl /usr/local/bin/
RUN mv ./doctl /usr/local/bin/
RUN mv ./linux-amd64/helm /usr/local/bin/

WORKDIR /sh

COPY test.sh /sh
RUN chmod +x /sh/test.sh

然后,如果图像可以正常工作,我会在计算机上本地测试图像:
docker pull hub.databaker.io/devops/argcd-cli:0.1.22
docker run -it --rm hub.databaker.io/devops/argcd-cli:0.1.22
root@76db905a83c6:/sh# pwd
/sh
root@76db905a83c6:/sh# doctl version
doctl version 1.43.0-release
Git commit hash: 1b6d0b8

如您所见,我可以在容器内调用doctl,它显示了预期的结果。

我使用Drone CI构建管道,并在以下管道上遇到麻烦:
kind: pipeline
type: docker
name: DEV build, push and deploy

steps:
  - name: DEV deployment
    image: hub.databaker.io/devops/argcd-cli:0.1.22
    pull: if-not-exists
    environment:
      DO_AC:
        from_secret: do_ac
      K8S_CLUSTER:
        from_secret: k8s_cluster
      ARGO_SERVER:
        from_secret: argo_server
      ARGO_USERNAME:
        from_secret: argo_username
      ARGO_PW:
        from_secret: argo_pw
      IMAGE_VERSION: ${DRONE_SEMVER_SHORT}
      USER:
        from_secret: gituser
      PW:
        from_secret: gitpw
      GIT_URL: gitlab.com/databaker.io/gitops.git
      PATH: keycloak-svc
      NAMESPACE: dev
    commands:
      - cd /sh
      - pwd
      - doctl version

trigger:
  event:
    - tag

image_pull_secrets:
  - dockerconfig

它显示以下错误消息:
/bin/sh: 5: chmod: not found
/bin/sh: 24: doctl: not found
+ cd /sh
+ pwd
/sh
+ doctl version

我也尝试过:
commands:
  - ls -la
  - cd /usr/local/bin/
  - ls -la
  - /bin/bash -c doctl version
  - /bin/bash -c pwd
  - doctl version

并得到:
/bin/sh: 5: chmod: not found
2 /bin/sh: 18: ls: not found
3 + ls -la

为什么在管道中找不到doctlchmod?我忘了激活管道上的东西吗?

最佳答案

在您的Drone环境变量中PATH被覆盖

您的PATH变量看起来并不打算保存可执行路径(PATH: keycloak-svc)。我建议使用其他名称。

如果在更改环境变量名称后发现/usr/local/bin/不在Drone的PATH上,则可以按照Drone docs中的说明将其添加到commands部分中。

注意:

我想在找到someone else's failed build的日志之后再看PATH,然后偷看a change they committed around the same time

关于docker - 为什么找不到chmod和doctl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61951369/

相关文章:

docker - 将所有主机环境变量传递给 docker 容器的最简单方法

docker - 在存储库 docker.io/library/golang 中找不到标签 1.10.3 AS base

docker - 我可以查询OpenShift Docker存储库是否给定镜像_exists_而不拉出它吗?

docker - 在.drone.yml中为Docker插件传递构建参数

docker - python3-onbuild docker中的Java

amazon-web-services - 在AWS托管的集群(不是EKS)上的Kubernetes:基础架构复制逻辑在哪里?

docker - Drone.io无效或丢失的图像

kubernetes - 在k8s上的drone.io。 letsencrypt无法提供安全的连接

docker - Snakemake + Docker卷- “Missing Rule Exception”