作为Jenkins
自由式项目的一部分,我试图执行以下 Post Step shell命令:
curl -X POST -i -F "SimpleTest=@target/surefire-reports/TEST-junitfaq.SimpleTest.xml" 127.0.0.1:9090/
该请求针对以下简单的
Go
服务器:package main
import (
"fmt"
"github.com/gorilla/mux"
"log"
"net/http"
)
func main() {
router := mux.NewRouter()
router.
Path("/").
Methods("POST").
HandlerFunc(UploadFile)
fmt.Println("Starting...")
log.Fatal(http.ListenAndServe(":9090", router))
}
func UploadFile(w http.ResponseWriter, r *http.Request) {
(w).Header().Set("Access-Control-Allow-Origin", "*")
err := r.ParseForm()
if err != nil {
w.Write([]byte(err.Error()))
return
}
file, _, err := r.FormFile("SimpleTest")
defer file.Close()
if err != nil {
w.Write([]byte(err.Error()))
return
}
bytes := make([]byte, 100)
n, err := file.Read(bytes)
if err != nil {
w.Write([]byte(err.Error()))
return
}
fmt.Printf("%d bytes: %s\n", n, string(bytes[:n]))
}
Jenkins
和Go
服务器都在使用以下Docker
文件创建的Docker-compose
容器中运行:version: '3'
services:
foobar:
container_name: foobar
image: foobar:latest
hostname: foobar
build:
context: .
dockerfile: Dockerfile
networks:
- foobar-net
ports:
- 9090:9090
labels:
kompose.service.type: LoadBalancer
jenkins:
container_name: jenkins
image: jenkinsci/blueocean
restart: always
hostname: foobar
ports:
- 7070:8080
networks:
- foobar-net
depends_on:
- foobar
links:
- foobar
volumes:
- $PWD/data/jenkins:/var/jenkins_home
networks:
foobar-net:
driver: bridge
当我执行此作业时,
Curl
命令失败,并返回以下结果:curl -X POST -i -F 'SimpleTest=@target/surefire-reports/TEST-junitfaq.SimpleTest.xml' 127.0.0.1:9090/
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0curl: (7) Failed to connect to 127.0.0.1 port 9090: Connection refused
Build step 'Execute shell' marked build as failure
是什么原因导致我的连接被拒绝?
最佳答案
在Jenkins容器中,curl to 127.0.0.1:9090
将尝试连接到同一容器中的服务,但是看起来您正在另一个容器中运行此服务。您可能会想要 curl 到foobar:9090
关于docker - 如何使用Curl从Jenkins通过Docker网桥将文件发布到Go服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60268352/