在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
参数非常重要,因为它会静默地静音输出。