我想在我的基础架构中实现Berks API,包括Jenkins,Git服务器和Chef 12 Enterprise服务器。根据Berkshelf的方式,每个食谱都在Git服务器中的自己的回购中。基本上,我只是希望我的顶级Berksfile只包含角色cookbook,然后" let" Berkshelf从我的Git服务器中提取传递依赖项。
我已阅读Berks API README了解服务器安装,但"其中"我要安装食谱吗?我在我的Git服务器上安装它吗?我已经读过Chef服务器已经准备好了Berks API,但是我没有从那里取出我的食谱,我已经"上传"他们在那里。
请帮助我的困惑。
更新2
我能够通过将我的Berksfile中的源代码行从https更改为http来修复我的SSL错误,即
source "http://myserver.domain.com:26200"
更新
我已经通过〜/ .berkshelf / api-server / config.json中的以下config.json文件配置了我的berks-api服务器端点
{
"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时,我得到了
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'
答案 0 :(得分:2)
我建议调查pipeline cookbook。它演示了Jenkins解决方案,我认为您不需要Berkshelf API服务器。
这本食谱创建了一个非常标准的Jenkins作业,它使用Berkshelf下载食谱并上传你的角色,数据包和环境(来自你的chef repo)。这本菜谱的巧妙之处在于它还可以自动为GIT中的烹饪书生成特殊的食谱工作,并运行食品批准和测试厨房等有用的工具。
希望它适合你。
Berkshelf API是一个索引器。如果您决定使用它,那么您需要设置一个额外的Chef服务器/组织来保存cookbook并在Berkshelf API配置中进行配置。然后,您的Jenkins构建服务器会将cookbook更改加载到此Chef服务器中,以便它像您的"已发布的"食谱。
Berkshelf客户端能够从API服务器检索每个食谱的位置,但仍负责实际下载。对我来说这是一个"陷阱"。我的菜谱加载过程的含义是我需要两个配置文件:
berks install -c ~/.berkshelf/config-cookbooks.json
berks upload
默认的berkshelf配置文件指向我的目标厨师服务器,但是我需要第二个配置文件,其中包含持有我的cookbook的厨师服务器的凭据。
更复杂的设置(可能会避免上面的凭证问题)会将Chef服务器换成Chef超市的本地实例。
https://github.com/opscode-cookbooks/supermarket
总之,我并不认为这是你真正想要的。它与我个人使用的工作流程类似,但大多数人认为它过于复杂。