Docker 中执行 CI 脚本时系统调用失败

Docker 中执行 CI 脚本时系统调用失败

我目前正在设置 GitLab CI/CD。Runner 安装在运行 Docker Engine 的 Windows Server 2019 VM 上。它gitlab-ci.yml看起来像这样:

variables:
  GIT_STRATEGY: clone
  GIT_DEPTH: 0

stages:
  - export

export:
  stage: export
  image: mcr.microsoft.com/dotnet/core/sdk:3.1
  tags:
    - myrunner
  script:
    - COPY . ./
    - 'curl --location --output artifacts.zip --header "JOB-TOKEN: $CI_JOB_TOKEN" "https://git.myinstance.de/api/v4/projects/1234/jobs/artifacts/master/download?job=backend"'
    - tar -xf artifacts.zip
    - publish.bat

但在脚本开始执行之前,就会显示以下错误消息:

ERROR: Job failed (system failure): Error response from daemon: container abc123 encountered an error during hcsshim::System::CreateProcess: failure in a Windows system call: The system cannot find the file specified.

它还打印出大量额外信息,其中最有用的可能是:

"CommandLine":"powershell -NoProfile -NoLogo -InputFormat text -OutputFormat text -NonInteractive -ExecutionPolicy Bypass -Command -"

我从中得到的是 Runner 尝试在容器内启动 Powershell,但失败了。这并不奇怪,因为在 .Net Core 3.1-Image 中,必须使用命令启动 Powershell pwsh。我查看了yaml 参考对于gitlab-ci.yml文件,但找不到更改脚本执行的 shell 的方法。更令人困惑的是:当我在 Dockerfile 中复制脚本并在 Runner 上手动构建它时,它运行完美,因为它使用 CMD 而不是 Powershell 来运行指令。

我真的不知道该从哪个角度来看待这个问题。我没有尝试从我的脚本启动 Powershell,我没有使用 Powershell 独有的命令,我也不能告诉 Runner 不要使用 Powershell。

笔记:我不太确定这个问题是属于 Server Fault 还是 Super User,因为我在专业环境中使用免费软件。但似乎相关标签在这个网站上有更多问题和关注者,所以我在这里试试运气。

相关内容