Как отправить файл с помощью Curl из Jenkins на сервер Go через мост Docker net? - PullRequest
0 голосов
/ 17 февраля 2020

В рамках проекта Jenkins вольным стилем я пытаюсь выполнить следующую команду Post Step shell:

curl -X POST -i -F "SimpleTest=@target/surefire-reports/TEST-junitfaq.SimpleTest.xml" 127.0.0.1:9090/ 

Этот запрос предназначен для следующего простого * Сервер 1007 *:

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

В чем может быть проблема, приводящая к отказу моего соединения?

1 Ответ

2 голосов
/ 17 февраля 2020

В контейнере Jenkins, curl to 127.0.0.1:9090 попытается подключиться к службе внутри того же контейнера, но похоже, что вы запускаете эту службу в другом контейнере. Вы, вероятно, захотите свернуться до foobar:9090

...