如何在 GitLab 的持续集成上添加 Stack 和 GHC?

How to add Stack and GHC on GitLab's Continuous Integration?

我的 CI 找不到堆栈,我不知道为什么。我正在使用以下 .gitlab-ci.yml 文件为 Haskell Stack 项目设置 gitlab-CI。我从 this other question that claims it worked.

拿来的
image: haskell:8.6.5

cache:
  paths:
    - .stack
    - .stack-work
    - target

test:
  stage: test
  script:
    - ghc --version
    - stack --system-ghc build
    - stack test

然而它失败并报告(下面的完整输出):

bash: line 96: ghc: command not found
ERROR: Job failed: exit status 1

很明显,ghc 不见了,但我认为它出现在图像上 haskell:8.6.5 不是吗?

我已经尝试过 image: fpco/stack-build:lts-11.15 等替代图像,但没有成功(报告 bash: line 96: stack: command not found)。

我最好的猜测是我错过了一个关键步骤来确保 ghcstack 在我正在使用的图像上,但我无法弄清楚它是什么.那么,我错过了什么?

编辑:完整错误输出

Running with gitlab-runner 13.2.2 (a998cacd)
  on karson: Ubuntu 20.04 LTS Shared q_B8_V-j
Preparing the "shell" executor
00:00
Using Shell executor...
Preparing environment
00:00
Running on karson...
Getting source from Git repository
00:01
Fetching changes with git depth set to 50...
Initialized empty Git repository in /var/lib/gitlab-runner/builds/q_B8_V-j/0/fromager/cheesecloth/MicroRAM/.git/
Created fresh repository.
Checking out 4d7e065d as 39-continuous-integration...
Skipping Git submodules setup
Restoring cache
00:00
Checking cache for default...
Runtime platform                                    arch=amd64 os=linux pid=4053876 revision=a998cacd version=13.2.2
No URL provided, cache will not be downloaded from shared cache server. Instead a local version of cache will be extracted. 
Successfully extracted cache
Executing "step_script" stage of the job script
00:00
$ ghc --version
bash: line 96: ghc: command not found
ERROR: Job failed: exit status 1

从输出日志来看,您正在使用 shell executor rather than the docker 执行器,这就是 image 标签在这里不起作用的原因。


要解决的选项是:

  • 如果您可以访问 运行ner 的服务器,请重新安装 运行ner 作为 docker 执行器 (https://docs.gitlab.com/runner/install/docker.html),并确保您使用 tags 来指定哪个 运行ner 用于该工作。 (您可能不一定需要重新安装 运行ner,但只需将 运行ner 与 shell 运行ner 一起安装,但您需要确保正确使用 tags 是否要使用 shell 运行ner 或 docker 运行ner).

  • 运行 docker 手动命令为 shell(尽管这个不太理想)。


更新:确保您为工作选择正确的 运行ner:

registering 是 运行ner 时,在第 5 步,您可以提供与 运行ner 关联的标签。如果您有足够的权限,还可以更改 GitLab UI 中的标签:

gitlab.com -> group -> settings -> CI/CD -> runner settings

请注意,运行ner 标签在 config.toml 文件中不可更改。

你现在可以,例如,用 docker-internal 标记你的 运行ner,然后只在这个 运行ner 上为 运行 工作添加标签:- docker-internal 在你的 gitlab-ci.yml 文件中:

test:
  stage: test
  script:
    - ghc --version
    - stack --system-ghc build
    - stack test
  tags:
    - docker-internal