使用 Shell Executor 在 GitLab Config yml 文件中为 CI-CD 激活 Conda 环境

Posted

技术标签:

【中文标题】使用 Shell Executor 在 GitLab Config yml 文件中为 CI-CD 激活 Conda 环境【英文标题】:Activating Conda environment in GitLab Config yml file for CI-CD using Shell Executor 【发布时间】:2021-06-22 23:31:40 【问题描述】:

我想在我的 Gitlab CI-CD 进程中激活 conda 环境。 我在不同于我的工作笔记本电脑的本地机器 (UNIX) 上使用 Shell Executor 注册了 Gitlab 运行器 (v13.10) 我正在尝试通过我的仓库中存在的环境 yml 文件来激活 conda 环境,但它失败并说找不到 conda 命令!

我编辑了 .gitlab-ci.yml 文件,如下所示:

stages:
  - build
build stage:
    stage: build
    before_script:
        - which python
        - export PIP_CACHE_DIR="/opt/cache/pip"
        - conda env create -f environment.yml
        - source activate env_work
    script:
        - echo "Building"
        - cd parent_dir
        - python main.py new_studies/first_study
    artifacts:
        paths:
            - out/
    only:
        - master

我面临的问题是它引发错误:CONDA Command NOT FOUND

Running with gitlab-runner 13.10.0 (5421146)
  on rig ci runner gZzdceA
Preparing the "shell" executor
00:00
Using Shell executor...
Preparing environment
00:00
Running on rig-machine...
Getting source from Git repository
00:04
Fetching changes with git depth set to 50...
Reinitialized existing Git repository in /home/gitlab-runner/builds/gZzdceA/0/company/gg/product/repo/.git/
Checking out 883ga36 as master...
Skipping Git submodules setup
Executing "step_script" stage of the job script
00:00
$ export PIP_CACHE_DIR="/opt/cache/pip"
$ conda env create -f environment.yml
bash: line 120: conda: command not found
Cleaning up file based variables
00:00
ERROR: Job failed: exit status 1

我提到了诸如here 和here 之类的各种问题。另外,我尝试将 anaconda 路径添加到环境路径变量的 bash 文件中。但我不确定我是否做得正确

我的问题是:

    既然它在 shell 执行器上运行,而且我已经在运行 conda,为什么它无法获取它。如何在我的 GitLab 配置文件中解决此问题 我对 docker 镜像的使用有限制,我想坚持使用 Shell 执行器

【问题讨论】:

Conda 通常通过 .bashrc 添加到 PATH 中(默认配置中包含来自 conda init 的代码)。可能需要让 shell 会话在登录模式下运行(-l 标志)或手动添加一行来初始化 Conda(例如,. <path_to_anaconda>/etc/profile.d/conda.sh)。另请注意,conda activate env_work 优于 source activate env_work - 后一种语法是 Conda v4.6 之前的语法。 【参考方案1】:

对我有用的一种方法是使用 conda docker 映像,并执行命令 conda init bashsource ~/.bashrcconda activate env_name。这将是 .gitlab-ci.yml 文件的内容:

image: continuumio/miniconda3

before_script:
    - apt-get update
    # install all required libraries using existing conda environment requirements file:
    - conda env create -f env_name.yml
    - conda init bash
    - source ~/.bashrc
    - conda activate env_name
   
pages:
  stage: deploy
  script:
    # build and publish automated documentation with Sphinx:
    - PYTHONPATH=. sphinx-build -b html . public
  artifacts:
    paths:
    - public
  only:
  - master

【讨论】:

这对我有用,谢谢。 'source' 调用是必要的,但我不知道为什么。

以上是关于使用 Shell Executor 在 GitLab Config yml 文件中为 CI-CD 激活 Conda 环境的主要内容,如果未能解决你的问题,请参考以下文章

Pentaho,R Executor 插入数据库

Spark-shell批量命令执行脚本

spark on yarn container分配极端倾斜

24.command-executor

shell脚本传参执行spark-submit

java 怎么提交应用程序到spark standalone集群中去运行