开发者问题收集

任何管道都会解析错误:“executor”的未知命令“sh”,运行“executor --help”查看用法

2023-05-25
2108

现在我正在尝试在 GitLab 上学习 CI/CD。不幸的是,我无法在我的项目上运行一个简单的管道。运行器似乎无法正常工作。 这是项目的图像: 包含图像、.gitignore、.gitlab-ci.yml 和 README.md 的文件列表

我在我的 .gitlab-ci.yml 文件中写了这个:

build-job:
  stage: build
  script:
    - echo "Hello, $GITLAB_USER_LOGIN!"

test-job1:
  stage: test
  script:
    - echo "This job tests something"

test-job2:
  stage: test
  script:
    - echo "This job tests something, but takes more time than test-job1."
    - echo "After the echo commands complete, it runs the sleep command for 20 seconds"
    - echo "which simulates a test that runs 20 seconds longer than test-job1"
    - sleep 20

deploy-prod:
  stage: deploy
  script:
    - echo "This job deploys something from the $CI_COMMIT_BRANCH branch."
  environment: production

这只是 GitLab 教程中用于创建简单管道的原始代码。

不幸的是,我之后收到此错误:

Using docker image sha256:7053f62a27a84985c6ac886fcb5f9fa74090edb46536486f69364e3360f7c9ad for gcr.io/kaniko-project/executor:debug with digest gcr.io/kaniko-project/executor@sha256:fcccd2ab9f3892e33fc7f2e950c8e4fc665e7a4c66f6a9d70b300d7a2103592f ...
Error: unknown command "sh" for "executor"
Run 'executor --help' for usage

我正在使用 GitLab 的共享运行器来运行管道。 任何帮助都将不胜感激!

2个回答

该作业正在尝试使用图像 gcr.io/kaniko-project/executor - 但此图像定义了一个指向 /kaniko/executor 二进制文件的 ENTRYPOINT ,因此不适合用作 GitLab CI 中的作业图像。请参阅 此答案以了解为什么会出现问题 。基本上,gitlab 正在尝试向作业容器发送命令,但意外地调用了 executor 二进制文件,这会导致来自 /kaniko/executor 的错误消息。

Error: unknown command "sh" for "executor"
Run 'executor --help' for usage

因为您的 .gitlab-ci.yml 配置中没有任何内容会导致使用此图像,所以这可能是由您使用的运行器的配置导致的,当没有 image: 键时,该配置将此指定为默认图像。

您可以指定其他图像来解决此问题:

image: alpine  # as a global key default

build-job:
  stage: build
  image: alpine # or on a per-job basis

如果您确实想使用这个特定的图像(您几乎肯定不会),您需要覆盖入口点:

build-job:
  stage: build
  image:
    name: gcr.io/kaniko-project/executor
    entrypoint: [""]

如果您管理 GitLab 运行器配置,则应将默认的 image 配置更改为一个可用的图像。

sytech
2023-05-25

尝试 gcr.io/kaniko-project/executor:debug

对我来说效果很好: https://gitlab.freedesktop.org/joel.winarske/docker-containers/-/blob/main/.gitlab-ci.yml#L2

J. Winarske
2024-01-19