Как настроить сервер API Berks?

Я хочу внедрить API Berks в мою инфраструктуру, состоящую из Jenkins, сервера Git и сервера Chef 12 Enterprise. Каждая кулинарная книга находится в своем собственном репо на сервере Git, в соответствии с Berkshelf. По сути, я просто хочу, чтобы мой Berksfile верхнего уровня содержал ТОЛЬКО кулинарные книги ролей, а затем "позволил" Berkshelf извлечь транзитивные зависимости с моего сервера Git.

Я прочитал README Berks API для установки сервера, но "где" мне установить кулинарную книгу? Я устанавливаю это на моем сервере Git? Я читал, что сервер Chef готов к использованию Berks API, но я НЕ вытаскиваю оттуда свои кулинарные книги, я их "загружаю" туда.

Пожалуйста, помогите в моем замешательстве.

Обновление 2

Я смог исправить ошибки SSL, изменив исходную строку в моем Berksfile с https на http, то есть

source "http://myserver.domain.com:26200"

Обновить

Я настроил конечные точки моего сервера berks-api через следующий файл config.json в ~/.berkshelf/api-server/config.json

{
  "endpoints": [
    {
      "type": "chef_server",
       "options": {
       "url": "https://myserver.domain.com/organizations/berks-api",
       "client_name": "jenkins",
       "client_key": "/etc/berkshelf/api-server/jenkins.pem",
       "ssl_verify" : false
      }
    }
  ]
}

Затем я запускаю berks-api и вижу эти первые несколько строк на моем терминале, так что я знаю, что он работает

[2015-04-14T18:49:12.737950 #10033] INFO -- : Cache manager starting...
I, [2015-04-14T18:49:12.738207 #10033] INFO -- : Loading save from /root/.berkshelf/api-server/cerch
W, [2015-04-14T18:49:12.739368 #10033] WARN -- : Endpoints in config have changed - invalidating cache
I, [2015-04-14T18:49:12.739465 #10033] INFO -- : Cache contains 0 items
I, [2015-04-14T18:49:12.740341 #10033] INFO -- : Cache Builder starting...
I, [2015-04-14T18:49:12.846975 #10033] INFO -- : REST Gateway listening on 0.0.0.0:26200
I, [2015-04-14T18:49:12.887143 #10033] INFO -- : Processing chef_server: https://myserver.domain.com/organizations/berks-api
I, [2015-04-14T18:49:12.963418 #10033] INFO -- : Found 25 cookbooks from chef_server: https://myserver.domain.com/organizations/berks-api
I, [2015-04-14T18:49:12.964527 #10033] INFO -- : Processing metadata for 25 cookbooks with 0 remaining on chef_server: https://myserver.domain.com/organizations/berks-api

Berksfile на одной из моих кулинарных книг содержит эту строку

source "https://myserver.domain.com:26200"

Однако когда я выполняю установку Berks на одной из моих рабочих станций Chef, я получаю

Fetching cookbook index from https://myserver.domain.com:26200...
/opt/chef/embedded/lib/ruby/2.1.0/net/http.rb:920:in `connect': SSL_connect SYSCALL returned=5 errno=0 state=SSLv2/v3 read server hello A (Faraday::SSLError)
from /opt/chef/embedded/lib/ruby/2.1.0/net/http.rb:920:in `block in connect'
from /opt/chef/embedded/lib/ruby/2.1.0/timeout.rb:91:in `block in timeout'
from /opt/chef/embedded/lib/ruby/2.1.0/timeout.rb:101:in `call'
from /opt/chef/embedded/lib/ruby/2.1.0/timeout.rb:101:in `timeout'
from /opt/chef/embedded/lib/ruby/2.1.0/net/http.rb:920:in `connect'
from /opt/chef/embedded/lib/ruby/2.1.0/net/http.rb:863:in `do_start'
from /opt/chef/embedded/lib/ruby/2.1.0/net/http.rb:852:in `start'
from /opt/chef/embedded/lib/ruby/2.1.0/net/http.rb:1369:in `request'
from /opt/chef/embedded/lib/ruby/2.1.0/net/http.rb:1128:in `get'
from /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/faraday-0.9.1/lib/faraday/adapter/net_http.rb:80:in `perform_request'
from /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/faraday-0.9.1/lib/faraday/adapter/net_http.rb:40:in `block in call'
from /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/faraday-0.9.1/lib/faraday/adapter/net_http.rb:87:in `with_net_http_connection'
from /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/faraday-0.9.1/lib/faraday/adapter/net_http.rb:32:in `call'
from /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/faraday-0.9.1/lib/faraday/request/retry.rb:110:in `call'
from /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/faraday-0.9.1/lib/faraday/response.rb:8:in `call'
from /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/faraday-0.9.1/lib/faraday/response.rb:8:in `call'
from /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/faraday-0.9.1/lib/faraday/rack_builder.rb:139:in `build_response'
from /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/faraday-0.9.1/lib/faraday/connection.rb:377:in `run_request'
from /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/faraday-0.9.1/lib/faraday/connection.rb:140:in `get'
from /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/berkshelf-api-client-1.2.1/lib/berkshelf/api_client/connection.rb:62:in `universe'
from /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/berkshelf-3.2.3/lib/berkshelf/source.rb:22:in `build_universe'
from /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/berkshelf-3.2.3/lib/berkshelf/installer.rb:21:in `block (2 levels) in build_universe'

1 ответ

Решение

Я бы предложил исследовать кулинарную книгу по трубопроводу. Он демонстрирует решение Jenkins, которое, как мне кажется, доказывает, что вам не нужен сервер Berkshelf API.

Кулинарная книга создает довольно стандартную работу Дженкинса, которая использует Berkshelf для загрузки кулинарных книг и загрузки ваших ролей, пакетов данных и окружения (из репозитория от шеф-повара). Что делает кулинарную книгу умной, так это то, что она также автоматически генерирует специальные рабочие места для ваших кулинарных книг в GIT и запускает полезные инструменты, такие как foodcritic и тестирует кухню.

Надеюсь, это работает для вас.

Обновить

Berkshelf API является индексатором. Если вы решили использовать его, вам потребуется настроить дополнительный сервер / организацию Chef для хранения поваренных книг и настроить это в конфигурации API Berkshelf. Затем ваш сервер сборки Jenkins загрузит изменения поваренной книги в этот сервер Chef, чтобы он действовал как двоичный репозиторий для ваших "выпущенных" поваренных книг.

Клиент Berkshelf может получить с сервера API местоположение каждой поваренной книги, но по-прежнему отвечает за фактическую загрузку. Для меня это было "Гоча". В результате процесса загрузки поваренной книги мне потребовалось два файла конфигурации:

berks install -c ~/.berkshelf/config-cookbooks.json
berks upload 

Файл конфигурации berkshelf по умолчанию указывает на мой целевой chef-сервер, но мне нужен второй файл конфигурации с учетными данными для chef-сервера, на котором хранятся мои поваренные книги.

Более сложной настройкой (которая может избежать проблемы с учетными данными выше) будет замена сервера Chef на локальный экземпляр супермаркета Chef.

https://github.com/opscode-cookbooks/supermarket

В заключение я не думал, что это то, чего вы действительно хотели. Это похоже на рабочий процесс, который я лично использую, но большинство сочло бы его слишком сложным.

Другие вопросы по тегам