运行 helm 命令时的 Gitlab 问题为 - 错误:“helm”的未知命令“sh”

Joy*_*Joy 14 gitlab gitlab-ci

我有一个需要在alpina:helmimage 上运行的 packge 脚本。我以前用过这个,但由于某种原因,这总是给我错误 -Error: unknown command "sh" for "helm"

package:
  <<: *artifacts
  stage: package
  image: alpine/helm
  variables:
    GIT_STRATEGY: none
  script:
    - echo $VERSION
    - helm package ./keycloak --app-version=$VERSION
  artifacts:
    paths: 
    - "*.tgz"
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这里的问题是什么,我不太确定。Helm 命令应该按照我的假设运行,但不确定为什么不运行。

dan*_*elz 30

正如文档中所解释的,gitlab中的运行程序是这样启动的

  • 运行程序启动 中指定的 docker 容器image并使用该容器的入口点
  • 跑步者将自己附着在容器上
  • 运行程序将before_script,scriptafter_script合并到一个脚本中
  • 运行程序将组合脚本发送到容器的 shell

如果您查看alpine/helm图像的入口点,您会发现该入口点是helm,并且当容器启动时,它会运行 helm。gitlab 运行程序不需要入口点,或者入口点设置为启动 shell,因此您会得到 ,Error: unknown command "sh" for "helm"因为没有正在运行的 shell。

通过覆盖入口点,我们确保运行程序在容器中找到可以执行脚本的 shell。

package:
  stage: package
  image: 
    name: alpine/helm
    entrypoint: [""] 
  variables:
    GIT_STRATEGY: none
  script:
    - echo $VERSION
    - helm package ./keycloak --app-version=$VERSION
  artifacts:
    paths: 
    - "*.tgz"
Run Code Online (Sandbox Code Playgroud)

编辑:通过再次阅读文档,我将 docker 17.06 及更高版本的入口点更改为空入口点 ( entrypoint: [""]),因为这更简洁。