如何在 Jenkins 上激活 conda 环境
How to activate a conda environment on Jenkins
我看到了 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个)。那也没有帮助。我尝试这样做的原因是因为我收到 "Permission denied" 投诉,并且这台机器上的 jenkins
用户不属于这些 Anaconda 文件所在的组。
根据建议 here,我尝试将 #!/bin/bash
添加到我的 Jenkins 脚本的开头,但这没有帮助。
普通的非 Jenkins 用户可以很好地激活这个 conda 环境。我正在尝试让 Jenkins 运行 自动化脚本脱离此环境,但我无法在 Jenkins 作业中激活它。
编辑:如果我不提供 activate
的完整路径,我会收到 "activate: No such file or directory" 投诉。
编辑:activate
被赋予 664(不可执行)的 chmod
的原因在 上说明。 activate
必须是不可执行的并且 运行 通过 source
以便它可以对环境进行更改。
詹金斯版本:2.129-1.1
chmod
664没有给你执行权限。您可以在 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
用户无权访问脚本的父文件夹之一,则可能会出现问题。也尝试为父文件夹设置相同的权限。以下命令来自您在评论中的代码片段:
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 {}
在 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
隐藏不需要的输出:
steps {
sh """
#!/usr/bin/env bash
set +x
source /opt/conda/etc/profile.d/conda.sh
conda activate env-p38
echo $PATH
set -x
"""
}
我看到了 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个)。那也没有帮助。我尝试这样做的原因是因为我收到 "Permission denied" 投诉,并且这台机器上的 jenkins
用户不属于这些 Anaconda 文件所在的组。
根据建议 here,我尝试将 #!/bin/bash
添加到我的 Jenkins 脚本的开头,但这没有帮助。
普通的非 Jenkins 用户可以很好地激活这个 conda 环境。我正在尝试让 Jenkins 运行 自动化脚本脱离此环境,但我无法在 Jenkins 作业中激活它。
编辑:如果我不提供 activate
的完整路径,我会收到 "activate: No such file or directory" 投诉。
编辑:activate
被赋予 664(不可执行)的 chmod
的原因在 activate
必须是不可执行的并且 运行 通过 source
以便它可以对环境进行更改。
詹金斯版本:2.129-1.1
chmod
664没有给你执行权限。您可以在 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
用户无权访问脚本的父文件夹之一,则可能会出现问题。也尝试为父文件夹设置相同的权限。以下命令来自您在评论中的代码片段:
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 {}
在 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
隐藏不需要的输出:
steps {
sh """
#!/usr/bin/env bash
set +x
source /opt/conda/etc/profile.d/conda.sh
conda activate env-p38
echo $PATH
set -x
"""
}