Как запросить Jenkins API REST за обратным прокси-сервером NGINX как в Docker?

У меня есть Jenkins за обратным прокси-сервером NGINX, оба контейнера докеров находятся в одной сети благодаря docker compose. Единственный вход на сервер Jenkins - через NGINX, который предоставляет 80 портов. Как только запрос достигает контейнера NGINX, он перенаправляется на Jenkins.

Я не получаю успешного ответа, но без обратного прокси-сервера NGINX все работает нормально. Как я могу решить эту проблему?

Кроме того, вы можете найти некоторые дополнительные файлы, такие как nginx default.conf и docker-compose.yml https://github.com/orbismobile/docker.-nginx-jenkins-android

После их настройки:

  1. Базовая авторизация пользователя NGINX: user1 - android (пароль)
  2. Пользователь с правами администратора Jenkins: user2 - ios (пароль)

Я пробовал это

curl -u user1:android http://localhost:8080/api/json?pretty=true
curl -u user2:ios http://localhost:8080/api/json?pretty=true
curl -U user2:ios -u carlos1:android http://localhost:8080/api/json?pretty=true

ДЖЕНКИНС ДОКЕРФАЙЛ

FROM jenkins/jenkins:latest
ENV JENKINS_OPTS="--prefix=/jenkins"

ФАЙЛ ДОКЕРА NGINX

FROM nginx:latest
# Install a password file creation utility to create username-password pairs
RUN apt-get update; apt-get install -y --no-install-recommends apache2-utils
RUN mkdir /etc/apache2; cd /etc/apache2; touch .htpasswd

ДОКЕР-COMPOSE.YAML

version: '3'
services:
  jenkinsservice:
    build: ./jenkins-service
    volumes:
      - jenkinshomevol:/var/jenkins_home  

  nginxservice:
    build: ./nginx-service
    ports:
      - "80:80"
    volumes:
      - ./nginx-service/conf.d:/etc/nginx/conf.d
      - ./nginx-service/html:/usr/share/nginx/html
    depends_on:
      - jenkinsservice

volumes:
  jenkinshomevol:   

Я ожидаю 200 OK HTTP CODE, но фактический результат - 403 FORBIDDEN HTTP CODE от Jenkins с этим телом -> Требуется аутентификация - вы аутентифицированы как: анонимный


person Carlos Leonardo Camilo Vargas    schedule 08.04.2019    source источник


Ответы (1)


Я предполагаю, что вы пробовали форму команд curl внутри контейнера jenkins.

Это работает для меня:

curl -u user2:ios http://127.0.0.1:8080/jenkins/api/json?pretty=true

Я думаю, вы пытаетесь получить доступ к неправильному URL-адресу Jenkins.

person Mihai    schedule 08.04.2019
comment
В вашем сообщении говорится иное - person Mihai; 08.04.2019
comment
Я пробовал тот же ´´´curl -u user2: ios 127.0.0.1: 8080 / jenkins / api / json? Pretty = true ´´´, но я получаю эту ошибку: curl: (7) Не удалось подключиться к порту 127.0.0.1. 8080: В соединении отказано. Я думаю, это связано с тем, что единственный вход в jenkins - через NGINX с открытием порта 80, этот URL-адрес localhost / jenkins . И если я изменю его на это: ´´´curl -u user2: ios 127.0.0.1 / jenkins / api / json? pretty = true ´´´ Я получаю эту ошибку: Требуется аутентификация Вы аутентифицированы как: анонимный ... HTTP 403 запрещен - person Carlos Leonardo Camilo Vargas; 08.04.2019
comment
Вы хоть представляете, что происходит? Запрос достигает сервера Jenkins, но ему нужны учетные данные администратора Jenkins (user1: android), которые по какой-либо причине мой запрос не передает эти значения, распознает только учетные данные для NGINX - person Carlos Leonardo Camilo Vargas; 09.04.2019
comment
Возможно ли, что вы не завершили установку jenkins через веб-интерфейс? Куда вы ставите сгенерированный пароль в логах? Мне кажется, что это может быть проблемой. - person Mihai; 09.04.2019