2017-01-18 4 views
0

Я изучаю технологии CI, поэтому я решил создать Drone с Gitlab локально, используя Docker compose. Вот докер-compose.yml:Docker сочиняет с Drone и Gitlab, ошибки Gitlab «Включенный URI перенаправления».

version: "2"  

services: 
    example_gitlab: 
    image: gitlab/gitlab-ce:latest 
    volumes: 
     - ./new-gitlab/srv/gitlab/config:/etc/gitlab 
     - ./new-gitlab/srv/gitlab/logs:/var/log/gitlab 
     - ./new-gitlab/srv/gitlab/data:/var/opt/gitlab 
    ports: 
     - "4443:443" 
     - "8000:80" 
     - "2222:22" 
    example_drone: 
    build: ./drone 
    volumes: 
     - /var/lib/drone/ 
     - /var/run/docker.sock:/var/run/docker.sock 
     - ./drone/sqlite/drone.sqlite:/var/lib/drone/drone.sqlite 
    environment: 
     - DRONE_GITLAB=true 
     - DRONE_GITLAB_URL=http://0.0.0.0:8000 
     - DRONE_GITLAB_CLIENT=4b5292ffbe30e93713b57853c43194aa63d50c176516c8ffaa8b213f1bb1555b 
     - DRONE_GITLAB_SECRET=6088c59102511a418154197d415762a8768e0e2d6c9ad4bb9013f48d1df3b226 
    ports: 
     - "8080:8080" 

Приложения начинают хорошо, и я создал приложение в gitlab с этими настройками:

Name: Drone 
Redirect URI: http://0.0.0.0:8080/authorize 

Я тогда взял идентификатор и секретный и добавили их в среду дронов. Все это прекрасно работает. Однако, когда я пытаюсь войти в gitlab от гула, я получаю:

Ошибка

Перенаправление URI включен не является действительным.

Понятия не имею, почему?

+0

Первое, что выпрыгивает, - это то, что дрон работает по порту 8000 по умолчанию. Поэтому, если вы не выполняете пользовательскую сборку Drone, я ожидал, что drone будет работать на 8000, а не 8080. –

+0

. Вторая вещь, которая выпрыгивает, - это URI переадресации: 'http: // 0.0.0.0/authorize', но вы подверглись воздействию порт 8080. Таким образом, URI переадресации, следовательно, должен быть 'http: //0.0.0.0: 8080/authorize'. Я полагаю, поскольку GitLab перенаправляет пользователя обратно на Drone –

+0

Третье, что вы, возможно, захотите рассмотреть, это то, что drone и gitlab должен будет иметь возможность общаться с eachother через API доступа. Это будет невозможно с помощью 0.0.0.0, потому что 0.0.0.0 всегда относится к отдельному контейнеру. Поэтому, если drone пытается получить доступ к gitlab, используя 0.0.0.0:8000, он будет указывать на контейнер-манипулятор, а не на контейнер gitlab. По этой причине также рекомендуется использовать DNS или реальные IP-адреса. Рекомендуется также рассматривать их как отдельное приложение (и не комбинировать в одном докере). –

ответ

0

Я считаю, что проблема в том, что ваш URL переадресации не включает в себя порт:

Name: Drone 
Redirect URI: http://0.0.0.0/authorize 

Перенаправление URL является URL, к которому Gitlab перенаправляет пользователя после аутентификации. Это должен быть адрес сервера Drone, который должен включать в себя порт:

Name: Drone 
Redirect URI: http://0.0.0.0:8080/authorize 
+0

Извинения, это была опечатка. Я отредактировал, чтобы включить порт. Проблема такая же, хотя :-( –

+1

Я думаю, это связано с тем, что, когда вы не используете общедоступный IP-адрес или доменное имя, drone использует 'localhost' в качестве своего обратного URL-адреса. Поэтому, возможно, попробуйте использовать http: // localhost: 8080/авторизуйтесь в качестве URL-адреса перенаправления.Это должно получить ваше дальнейшее участие в этом процессе, но вы, вероятно, будете иметь проблемы с drone <> gitlab-связью, используя localhost, как указано в других комментариях. –

1

Я была такая же проблема, и я разрешил его с этой конфигурацией:

version: '2' 
    services: 

     #PROXY 
     nginx: 
     image: jwilder/nginx-proxy:latest 
     restart: always 
     ports: 
      - "80:80" 
     volumes: 
      - /var/run/docker.sock:/tmp/docker.sock:ro 
     depends_on: 
      - drone-server 
      - gitlab 
     networks: 
      - drone 
      - gitlab 

     # GITLAB 
     gitlab: 
     image: gitlab/gitlab-ce:latest 
     environment: 
      VIRTUAL_HOST: "gitlab.dev" 
      VIRTUAL_PORT: "8080" 
      GITLAB_HTTPS: "false" 
      SSL_SELF_SIGNED: "false" 

     volumes: 
      - ./gitlab/srv/gitlab/config:/etc/gitlab 
      - ./gitlab/srv/gitlab/logs:/var/log/gitlab 
      - ./gitlab/srv/gitlab/data:/var/opt/gitlab 
     ports: 
      - "4443:443" 
      - "8080:80" 
      - "2222:22" 
     networks: 
      - gitlab 

     # DRONE 
     drone-server: 
     image: drone/drone:0.5 
     ports: 
      - "8000:8000" 
     networks: 
      - drone 
      - gitlab 
     links: 
     - gitlab 
     volumes: 
      - ./drone-data:/var/lib/drone/ 
     environment: 
      VIRTUAL_HOST: "drone.dev" 
      VIRTUAL_PORT: "8000" 
      # DRONE ENV 
      DRONE_SERVER_ADDR: ":8000" 
      DRONE_DEBUG: "true" 
      # CHANGEME: Randomly generate something at least 24 characters long with 
      # a password generator. 
      DRONE_SECRET: "replace-this-with-your-own-random-secret" 
      DRONE_DATABASE_DRIVER: sqlite3 
      DRONE_DATABASE_DATASOURCE: /var/lib/drone/drone.sqlite 
      DRONE_OPEN: "true" 
      # DRONE_ORGS: "" 
      # CHANGEME: Replace with Github username(s) to grant admin privs to. 
      # DRONE_ADMIN: admin,users,here 
      DRONE_ADMIN_ALL: "true" 
      # DRONE GITLAB params 
      DRONE_GITLAB: "true" 
      DRONE_GITLAB_URL: http://gitlab.dev:8080 
      DRONE_GITLAB_CLIENT: a7ee6c568eb1824b9c43bb514fe2eded8142284bf484d587a66ed1713d82cfb7 
      DRONE_GITLAB_SECRET: 786c7f7b84497b00215c3ff2cea6a4d693b378071a162f751e8e5910be46fb08 
      DRONE_GITLAB_SKIP_VERIFY: true 
      # disable SSL 
      DRONE_GITLAB_SKIP_VERIFY: "true" 
     drone-agent: 
     image: drone/drone:0.5 
     command: agent 
     depends_on: 
      - drone-server 
     networks: 
      - drone 
     volumes: 
      - /var/run/docker.sock:/var/run/docker.sock 
     environment: 
      DRONE_SERVER: ws://drone-server:8000/ws/broker 
      DRONE_DEBUG: "true" 
      # CHANGEME: Change this to match the DRONE_SECRET value specified in your 
      # drone-server container above. 
      DRONE_SECRET: "replace-this-with-your-own-random-secret" 

    networks: 
     drone: 
     driver: bridge 
     gitlab: 
     driver: bridge 

вопрос сейчас находится, не регистрирующий клиент. Я не вижу ошибок в журналах:

gitlab_1  | 
    gitlab_1  | ==> /var/log/gitlab/gitlab-rails/production.log <== 
    gitlab_1  | Started POST "/oauth/authorize" for 172.27.0.1 at 2017-01-22 02:48:40 +0000 
    gitlab_1  | Processing by Oauth::AuthorizationsController#create as HTML 
    gitlab_1  | Parameters: {"utf8"=>"✓", "authenticity_token"=>"hWP+9zf36+E8pSPZPJX/MJQ2oddjVniNZFWdrmguP3x28nCmliNRsZzmUNwAtktsltDCNwMJVlrn4YV3DxepzA==", "client_id"=>"a7ee6c568eb1824b9c43bb514fe2eded8142284bf484d587a66ed1713d82cfb7", "redirect_uri"=>"http://drone.dev/authorize", "state"=>"drone", "response_type"=>"code", "scope"=>"api"} 
    gitlab_1  | Redirected to http://drone.dev/authorize?code=f38ce22be01132f1bc9486c5305262400ce36241c9a1de38867030bd0be6bc51&state=drone 
    gitlab_1  | Completed 302 Found in 39ms (ActiveRecord: 15.9ms) 
    gitlab_1  | Started GET "/oauth/authorize?client_id=a7ee6c568eb1824b9c43bb514fe2eded8142284bf484d587a66ed1713d82cfb7&redirect_uri=http%3A%2F%2Fdrone.dev%2Fauthorize&response_type=code&scope=api&state=drone" for 172.27.0.1 at 2017-01-22 02:48:40 +0000 
    gitlab_1  | Processing by Oauth::AuthorizationsController#new as HTML 
    gitlab_1  | Parameters: {"client_id"=>"a7ee6c568eb1824b9c43bb514fe2eded8142284bf484d587a66ed1713d82cfb7", "redirect_uri"=>"http://drone.dev/authorize", "response_type"=>"code", "scope"=>"api", "state"=>"drone"} 
    gitlab_1  | Completed 200 OK in 40ms (Views: 21.2ms | ActiveRecord: 15.1ms) 
    gitlab_1  | 
    gitlab_1  | ==> /var/log/gitlab/gitlab-workhorse/current <== 
    gitlab_1  | 2017-01-22_02:48:40.91198 gitlab.dev:8080 @ - - [2017-01-22 02:48:40.853291066 +0000 UTC] "POST /oauth/authorize HTTP/1.1" 302 178 "http://gitlab.dev:8080/oauth/authorize?client_id=a7ee6c568eb1824b9c43bb514fe2eded8142284bf484d587a66ed1713d82cfb7&redirect_uri=http%3A%2F%2Fdrone.dev%2Fauthorize&response_type=code&scope=api&state=drone" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36" 0.058615 
    gitlab_1  | 2017-01-22_02:48:41.01414 gitlab.dev:8080 @ - - [2017-01-22 02:48:40.968217945 +0000 UTC] "GET /oauth/authorize?client_id=a7ee6c568eb1824b9c43bb514fe2eded8142284bf484d587a66ed1713d82cfb7&redirect_uri=http%3A%2F%2Fdrone.dev%2Fauthorize&response_type=code&scope=api&state=drone HTTP/1.1" 200 13012 "http://gitlab.dev:8080/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36" 0.045840 
    gitlab_1  | 
    gitlab_1  | ==> /var/log/gitlab/nginx/gitlab_access.log <== 
    gitlab_1  | 172.27.0.1 - - [22/Jan/2017:02:48:40 +0000] "POST /oauth/authorize HTTP/1.1" 302 178 "http://gitlab.dev:8080/oauth/authorize?client_id=a7ee6c568eb1824b9c43bb514fe2eded8142284bf484d587a66ed1713d82cfb7&redirect_uri=http%3A%2F%2Fdrone.dev%2Fauthorize&response_type=code&scope=api&state=drone" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36" 
    gitlab_1  | 172.27.0.1 - - [22/Jan/2017:02:48:41 +0000] "GET /oauth/authorize?client_id=a7ee6c568eb1824b9c43bb514fe2eded8142284bf484d587a66ed1713d82cfb7&redirect_uri=http%3A%2F%2Fdrone.dev%2Fauthorize&response_type=code&scope=api&state=drone HTTP/1.1" 200 4526 "http://gitlab.dev:8080/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36" 

Неужели кто-нибудь испытывает эту проблему ???

+1

Я думаю, что нашел проблему, m не уверен, как его решить: 'level = error msg =" не может аутентифицировать пользователя. Ошибка обмена токеном. Сообщение http: // gitlab.dev: 8080/oauth/token: dial tcp 127.0.53.53:8080: getsockopt: connection reject "' –

+0

Эта ошибка указывает на то, что контейнер drone-сервера не может решить 'gitlab.dev'. Является' gitlab.dev', как вы получаете доступ к gitlab из ваш браузер? URL-адрес gitlab, который вы предоставляете drone, должен быть тем же URL-адресом, который вы используете в браузере. Он должен быть общедоступным. –

+0

Помимо этого конкретного сообщения об ошибке, не рекомендуется составлять drone + gitlab в тот же файл. Даже если вы получите эту работу, у вас возникнут проблемы с запуском сборки. Это связано с тем, что drone собирается создавать контейнеры для сборки, а внутри этих контейнеров drone будет пытаться git clone из 'gitlab.dev', что происходит неудача, потому что это внутреннее имя хост-докера. Вот почему нужно настраивать drone с реальными DNS или IP-адресами (независимо от того, какие конечные пользователи помещают в адресную строку браузера) вместо внутренних имен хостов-докеров. –

0

Открыть беспилотный домашнюю страницу, щелкните правой кнопкой мыши на кнопку login with gitlab, выберите copy link address, URL, скопированный с помощью кнопки является redirect url вам нужно установить в gitlab сайте.

Смежные вопросы