如何在 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
)。
我最好的猜测是我错过了一个关键步骤来确保 ghc
和 stack
在我正在使用的图像上,但我无法弄清楚它是什么.那么,我错过了什么?
编辑:完整错误输出
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
我的 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
)。
我最好的猜测是我错过了一个关键步骤来确保 ghc
和 stack
在我正在使用的图像上,但我无法弄清楚它是什么.那么,我错过了什么?
编辑:完整错误输出
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