【问题标题】:How to activate a conda environment on Jenkins如何在 Jenkins 上激活 conda 环境
【发布时间】:2018-06-29 05:22:56
【问题描述】:

我已经看到this 的问题,但我运行的是 RHEL 7.3,而不是 Windows。

使用这个简单的 Jenkins shell 脚本:

#!/bin/bash
echo $PATH
echo $HOME
source /app/local/anaconda3/bin/activate py35_myenv

我遇到了这个失败:

$ /bin/bash /tmp/jenkins5945453203311093000.sh
/sbin:/usr/sbin:/bin:/usr/bin:/opt/teradata/client/15.10/bin:/app/local/anaconda3/bin:/opt/teradata/client/15.10/bin:/app/local/anaconda3/bin
/home/jenkins
/tmp/jenkins5945453203311093000.sh: line 4: /app/local/anaconda3/bin/activate: Permission denied

我尝试将chmod/app/local/anaconda3/bin/activate 文件设置为 664(最初是 660),但这并没有帮助。也试过chmod -R o+rx /app/local/anaconda3/envs/py35_myenv(那里的可执行文件原来是770,现在是775)。那也没有帮助。我尝试这样做的原因是因为我收到“权限被拒绝”投诉,并且这台机器上的 jenkins 用户不属于这些 Anaconda 文件所在的组。

根据here 的建议,我尝试将#!/bin/bash 添加到我的 Jenkins 脚本的开头,但这没有帮助。

普通的非 Jenkins 用户可以很好地激活这个 conda 环境。我正在尝试让 Jenkins 在此环境之外运行自动化脚本,但我无法在 Jenkins 作业中激活它。

编辑:如果我不提供activate 的完整路径,我会收到“激活:没有这样的文件或目录”的投诉。

编辑:activate 的原因 chmod 为 664(不可执行)在 this answer 中说明。 activate 必须是不可执行的,并且通过 source 运行,以便它可以对环境进行更改。

Jenkins 版本:2.129-1.1

【问题讨论】:

    标签: jenkins conda


    【解决方案1】:

    chmod664 不给你执行权限。您可以在chmod 命令中明确指定要授予或撤消哪些权限。它更具可读性。尝试将您的脚本更改为以下内容:

    #!/bin/bash
    echo $PATH
    echo $HOME
    /app/local/anaconda3/bin/activate py35_myenv
    chmod ug+x /app/local/anaconda3/bin/activate
    

    您可以使用https://chmodcommand.com 来验证该命令是否符合您的预期。

    此外,如果jenkins 用户无权访问脚本的父文件夹之一,这可能是一个问题。尝试为父文件夹设置相同的权限。以下命令来自您在 cmets 中的代码 sn-p:

    sudo find . -perm 770 -exec chmod o+rx {}; \
    sudo find . -perm 750 -exec chmod o+rx {}; \
    sudo find . -perm 660 -exec chmod o+r {}; \
    sudo find . -perm 640 -exec chmod o+r {}
    

    【讨论】:

    • 对,我知道chmod664不给可执行权限。这就是为什么我必须source 调用activate,而不是直接执行activate。根据this answer:“activate 文件故意不可执行,因为它必须有源。它必须有源,因为它需要对环境进行更改。如果它作为脚本运行,它只会对用于运行脚本的子进程的环境。”
    • 如果 jenkins 用户无权访问脚本的父文件夹之一,这也可能是一个问题。尝试为父文件夹设置相同的权限。
    • 谢谢!这是父文件夹权限的问题。以及 Anaconda 安装中的“兄弟”文件夹。修复:(来自 anaconda3 目录)sudo find . -perm 770 -exec chmod o+rx {} \; sudo find . -perm 750 -exec chmod o+rx {} \; sudo find . -perm 660 -exec chmod o+r {} \; sudo find . -perm 640 -exec chmod o+r {} \;
    • 您介意将您的评论移至答案吗?然后我可以接受它
    • 谢谢,我刚做了。另外,如果需要调整,请告诉我。
    【解决方案2】:

    在 Jenkins 的 Executed shell 中添加以下行,因为 bash shell 不支持conda init

    export PATH=/path/to/anaconda3/bin:$PATH # modify this path 
    eval "$(conda shell.bash hook)"
    conda activate your_env # change your_env based on your env name
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-08
      • 2021-01-16
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多