在Jenkins Pipeline中使用Squid代理的问题及解决方案

60次阅读
没有评论

问题描述

在配置了Squid代理后,发现在将以下环境变量添加到客户机的/home/user/.bashrc文件后,似乎在客户机上工作。注意:已配置SSL Bump,自签名证书已添加到/etc/ssl/certs并且证书被信任。

export http_proxy=http://172.12.1.100:3128/
export https_proxy=http://172.12.1.100:3128/

例如,当用户运行以下命令时:

user@squid-client:$ echo $http_proxy
http://172.12.1.100:3128/
user@squid-client:/tmp$ wget https://google.com

用户将Linux实例连接到Jenkins Master作为Unix Slave(通过SSH),并运行一个包含相同wget命令的简单流水线脚本。但是,Squid访问日志和Jenkins控制台输出都没有显示与Squid代理相关的任何信息。

用户提供了来自Jenkins作业的控制台输出部分:

+ wget google.com
--2021-08-17 09:26:39--  http://google.com/
Resolving google.com (google.com)... 142.251.40.78, ...
Connecting to google.com (google.com)|142.251.40.78|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://www.google.com/ [following]
--2021-08-17 09:26:39--  http://www.google.com/
Resolving www.google.com (www.google.com)... 142.250.68.164, ...
Connecting to www.google.com (www.google.com)|142.250.68.164|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html.4’

用户尝试在流水线中使用”printenv”命令,但也没有显示出$http_proxy变量。用户希望自己的作业能够通过Squid代理服务器下载软件包和文件。

解决方案

以下是解决此问题的几种方法:

方案1:使用withEnv包装步骤

在Jenkins Pipeline中,为了设置环境变量,通常需要使用withEnv包装步骤。这样可以确保步骤中的命令能够正确地访问环境变量。

以下是一个示例的Pipeline脚本,展示了如何使用withEnv包装步骤来设置环境变量并运行wget命令:

pipeline {
    agent any

    stages {
        stage('Download via Squid Proxy') {
            steps {
                // 设置http_proxy和https_proxy环境变量
                withEnv(['http_proxy=http://172.12.1.100:3128/', 'https_proxy=http://172.12.1.100:3128/']) {
                    sh 'wget https://google.com'
                }
            }
        }
    }
}

在上面的示例中,我们在withEnv块内设置了http_proxyhttps_proxy环境变量,然后在其中执行了wget命令。这将确保wget命令能够正确地使用Squid代理进行下载。

方案2:使用”Prepare an environment for the run”选项

另一种方法是在Jenkins作业配置中使用”Prepare an environment for the run”选项来设置环境变量。

  1. 在Jenkins作业配置页面,找到”Build Environment”部分。
  2. 勾选”Prepare an environment for the run”选项。
  3. 在”Properties Content”文本框中添加要设置的环境变量,如下:
http_proxy=http://172.12.1.100:3128/
https_proxy=http://172.12.1.100:3128/
  1. 保存配置。

使用这种方法,Jenkins将在每次作业运行前设置指定的环境变量,以便命令能够正确地使用Squid代理。

方案3:检查Pipeline脚本中的错误

用户提到了他们在Pipeline中运行的wget命令不起作用。可能原因是在Pipeline脚本中有其他问题。用户应该仔细检查Pipeline脚本中的语法错误或逻辑错误,确保所有步骤都正确设置了环境变量,并且命令正确执行。

总结

在Jenkins Pipeline中使用Squid代理时,用户可以通过使用withEnv包装步骤来设置环境变量,或者使用”Prepare an environment for the run”选项来确保作业能够正确地通过Squid代理下载软件包和文件。同时,用户也应该仔细检查Pipeline脚本中的错误,以确保所有步骤都按预期运行。

请注意,以上解决方案可能根据Jenkins版本或配置的不同而略有差异,请根据实际情况进行适当的调整。

========================文章结束====================================

正文完