首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >自托管的GitLab运行程序大约有一半时间无法识别PowerShell命令。

自托管的GitLab运行程序大约有一半时间无法识别PowerShell命令。
EN

Stack Overflow用户
提问于 2022-09-21 21:08:25
回答 1查看 70关注 0票数 0

我们有一个运行在Windows2016机箱上的GitLab跑步者。在大多数情况下,它运行良好。然而,当我尝试启动和运行一个新的管道时,我经常会遇到一个问题,那就是运行者似乎在一半的时间里忘记了这一点。

GitLab Runner的config.toml如下所示:

代码语言:javascript
运行
复制
concurrent = 1
check_interval = 0
log_level = "debug"

[session_server]
  session_timeout = 1800

[[runners]]
  name = "Application Template"
  url = "https://my-gitlab-instance.com"
  token = "mYt0k3n"
  executor = "shell"
  shell = "powershell"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]

每次我添加一个新的运行程序时,我都必须手动将shell = "pwsh"行更改为shell = "powershell",否则根本无法工作。

我目前正在开发一个新的管道,其中包括这个部署作业:

代码语言:javascript
运行
复制
deploy-job:
  stage: deploy
  dependencies: 
    - build-job
  environment: production
  script:
    - 'Remove-Item -Path "$env:DEPLOY_PATH\*.*"'
    - 'xcopy /y /s ".\public\*.*" "$env:DEPLOY_PATH"'

当管道运行时,至少有50%的时间是这样的:

看到了第24行是怎么写Remove-Item: command not found的吗?这就是我一直遇到的问题。问题是,如果我重新运行这份工作几次,它最终会工作,而我没有改变任何东西。

我怀疑这个问题与以下事实有关:第24行以bash开头,表明运行程序试图使用Bash (没有安装在服务器上)来执行脚本。当作业成功运行时,输出将丢失bash

但是为什么运行者有时会使用Bash来执行脚本呢?我已经在config.toml中明确告诉它使用PowerShell。为什么它有时使用Bash而有时不使用?

EN

回答 1

Stack Overflow用户

发布于 2022-09-21 21:08:25

在我突然想起自己很久以前就想出了答案之前,我就写了整个问题,但我想无论如何我还是会把答案连同答案一起贴出来,以防它对其他人有帮助(可能几个月后就会包括我)。

TL;DR:禁用GitLab项目中CI/CD的共享运行程序。

出现此问题的原因是,默认情况下,GitLab中的新项目为CI/CD启用了共享运行程序。由于我们的GitLab实例中存在的共享运行程序从未进行过其他配置(而且由于我们的自托管GitLab实例运行在Linux服务器上),它使用PowerShell执行作业,而PowerShell不理解PowerShell命令。当我运行我的管道时,无论GitLab是使用配置良好的GitLab运行程序还是使用具有默认配置的共享运行程序来执行作业,都是很幸运的。当它使用共享跑步者的时候,我的工作失败了。很有道理。

解决办法很简单。在GitLab项目中,转到设置> CI/CD >运行程序并禁用共享运行程序。或者,您可以根据需要配置共享运行程序,但在我的示例中,简单地禁用共享运行程序要简单得多!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73806951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档