我的目标是有一个gitlab CI/CD管道来为我构建conda包。对于非常大的项目,conda是如此缓慢,以至于gitlab超时,所以我们使用mamba代替。Gitlab使用Kubernetes runner,我注意到的是,当我在机器上本地构建/运行Docker容器时,它工作得很好,但是当Kubernetes executor运行它时,conda环境由于某种原因没有安装所需的包。
Docker镜像从这个Dockerfile生成:
FROM ubuntu:focal
SHELL ["/bin/bash", "-l", "-c"]
RUN apt-get update && apt-get install -y wget
# Install mamba
RUN wget -q -P /root/ https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Linux-x86_64.sh
RUN sh /root/Mambaforge-Linux-x86_64.sh -b
RUN /root/mambaforge/bin/conda shell.bash hook > /root/activatehook.sh
# Create an environment and install curl and numpy
RUN source /root/activatehook.sh && mamba create -n build-env -y -c conda-forge python=3.9
RUN source /root/activatehook.sh && conda activate build-env && mamba install curl numpy
现在,如果我在本地构建 *,我可以运行sudo docker run <my image> /bin/bash -c "source /root/activatehook.sh && conda activate build-env && mamba info && mamba list"
,我看到(除了其他事情之外):
- 活动环境为
build-env
curl
已安装numpy
已安装
现在我把它移到我的gitlab CI脚本中:
stages:
- test-stage
test-job:
stage: test-stage
tags:
- kubernetes
image: <my-image>
script:
- /bin/bash -c "source /root/activatehook.sh && conda activate build-env && mamba info && mamba list"
当它运行时,gitlab的输出表明:
- 活动环境为
build-env
curl
已安装numpy
* 未安装 *!
我不知道该怎么办。conda环境存在并且处于活动状态,其中一个包已正确安装,但另一个没有安装。此外,当我将镜像拉到本地主机并手动运行相同的命令时,curl
和numpy
都按预期安装了!
同样重要的是:我知道mambaforge的docker镜像。我尝试过这样的东西:
FROM condaforge/mambaforge
RUN mamba create -y --name build-env python=3.9
RUN mamba install -n build-env -y -c conda-forge curl numpy==1.21
在这种情况下,我得到了类似的结果,除了从Kubernetes runner运行时,* 既没有安装curl也没有安装numpy *!如果我把镜像拉到本地主机上,同样,环境很好(两个包都正确安装)。有人能解释一下这种行为吗?
1条答案
按热度按时间zu0ti5jz1#
问题是无法执行“source”命令。要解决这个问题,您可以在Dockerfile中使用ENTRYPOINT。您可以按照以下步骤验证mamba列表中是否存在numpy库。
首先,你可以创建
entrypoint.sh
文件:将入口点文件复制到容器中。(我丰富了Dockerfile的内容)
Dockerfile:
gitlab CI脚本: