从Jenkinsfile

时间:2018-11-02 01:52:08

标签: python-3.x docker jenkins conda miniconda

我试图在我的Jenkinsfile中激活一个conda环境,该环境是从Dockerbuild创建的,但是我不知道如何在我的Jenkinsfile的shell脚本中激活该环境。

但是此行. /opt/conda/envs/myapp-env/bin/activate无法在我的Jenkinsfile中激活

Dockerfile

FROM continuumio/miniconda3:latest

WORKDIR /tmp/app

COPY environment.yml environment.yml

#missing dependencies

RUN conda config --add channels conda-forge \ 
  && conda env create -n myapp-env -f environment.yml \
  && rm -rf /opt/conda/pkgs/*

ENV PATH /opt/conda/envs/myapp-env/bin:$PATH

RUN echo $PATH
RUN conda env list

Jenkinsfile

try {
        stage('Activate environment & Unit Test') {
            buildImage.inside {

                sh '''
                echo $PATH
                echo $HOME
                . /opt/conda/envs/myapp-env/bin/activate && python -m pytest tests --cov ./server --cov-report term-missing --cov-report xml --junitxml=build/results.xml
                '''
            }
        }

回显$ PATH和$ HOME的结果:

Running shell script
+ echo /opt/conda/envs/dfog-app/bin:/opt/conda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
/opt/conda/envs/myapp-env/bin:/opt/conda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
+ echo /

2 个答案:

答案 0 :(得分:1)

在您的Dockerfile中,无需这样做:

ENV PATH /opt/conda/envs/myapp-env/bin:$PATH

在您的Jenkins文件中,执行以下操作:

source /opt/conda/etc/profile.d/conda.sh
conda activate myapp-env
python -m pytest tests --cov ./server --cov-report term-missing --cov-report xml --junitxml=build/results.xml

答案 1 :(得分:0)

您收到的错误消息可能是

  

CommandNotFoundError:您的外壳尚未正确配置为使用“ conda activate”。

因为continuumio/miniconda3:latest映像仅将所有内容设置为root用户,而不是Jenkins的运行方式。

要激活环境,您需要先source /opt/conda/etc/profile.d/conda.sh

但是,您可能会遇到各种各样的其他权限问题,因为conda不能像其他任何用户一样工作,而Jenkins不能以root用户身份工作。