在Jenkins Behind Corporative Proxy中运行Curl命令



在Jenkinsfile的一个步骤中,当它在代理后面工作时,我试图执行CURL命令时遇到了问题。

我在Ubuntu18上工作,我运行Jenkins容器,如下所示:

docker run -d
-u root --privileged 
-v jenkins_home:/var/jenkins_home 
-v /var/run/docker.sock:/var/run/docker.sock 
-v "$HOME":/home
-e JENKINS_OPTS="--prefix=/jenkins" 
--group-add 997
-p 8080:8080 
-p 50000:50000 
--name jenkins 
jenkinsci/blueocean

然后我有一个简单的Jenkinsfile,它从git存储库中克隆代码,制作图像,将其推送到注册表,最后使用curl发送Telegram消息。

pipeline {
agent any
environment {
dockerImage = ''
}
stages {
stage('Testing') {
steps {
echo 'testing'
}
}
stage('Build image') {
steps {
script{
dockerImage = docker.build("registry.***.com.ar/hellonode")
}
}
}
stage('Push image') {
steps{
script {
docker.withRegistry('https://registry.***.com.ar', 'registryCredentials') {
dockerImage.push("${env.BUILD_NUMBER}")
dockerImage.push("latest")
}
}
}
}
stage('Push Notification') {
steps {
script{

withCredentials([string(credentialsId: 'telegramToken', variable: 'TOKEN'),
string(credentialsId: 'telegramChatId', variable: 'CHAT_ID')]) {

sh '''
curl -s -X 
POST https://api.telegram.org/bot${TOKEN}/sendMessage 
-d chat_id=${CHAT_ID} 
-d parse_mode="HTML" 
-d text="🚀  <b>Jenkins CI:</b> <b>Iniciando build $BUILD_DISPLAY_NAME</b> $JOB_NAME"
'''
}
}
}
}
}
}

它在执行curl命令时失败(我得到一个ERROR: script returned exit code 7(。但我认为它应该与Linux或公司代理有关,因为我在没有代理的Windows机器上测试了同样的东西,它也起作用了。

如果我需要补充更多信息,请让我知道,提前谢谢。

由于Jenkins是公司代理的幕后推手,您必须将代理信息传递给curl才能连接到目标服务。

curl man page说,您可以通过--proxy-x(快捷方式(参数传递代理信息。

sh '''
curl -s --proxy <protocol>://<proxy-host>:<proxy-port> -X 
POST https://api.telegram.org/bot${TOKEN}/sendMessage 
-d chat_id=${CHAT_ID} 
-d parse_mode="HTML" 
-d text="🚀  <b>Jenkins CI:</b> <b>Iniciando build $BUILD_DISPLAY_NAME</b> $JOB_NAME"
'''

这也可以通过env varshttp_proxy/https_proxy进行设置。

如果代理需要基本身份验证,则可以像<protocol>://<proxy-username>:<proxy-password@><proxy-host>:<proxy-port>一样传递

最后,在调试curl时,删除-s参数非常重要,因为它会静默地静音输出。

相关内容

  • 没有找到相关文章

最新更新