我正在尝试让我们的CI机器(运行Teamcity)在完成所有测试后上传和推广Chef cookbook,使其成为我们部署管道的适当部分.
但是,客户端无权上传cookbook,但我无法弄清楚如何调整ACL设置以使其工作.
$ sudo bundle exec knife spork upload teamcity --environment production ERROR: You authenticated successfully to https://api.opscode.com/organizations/as ci but you are not authorized for this action Response: missing create permission
我试过了(但失败了同样的错误):
给ci
在Opscode公司管理客户机的读取权限.
使用验证器用户上传cookbook.
进行非Spork上传(sudo bundle exec knife upload cookbooks/teamcity
),但失败了403
我也试过只列出客户端(sudo bundle exec knife client list
),但是失败了Response: missing create permission
.
客户端和验证器密钥位于/etc/chef
,但我有一个Knife配置
(我正在尝试从上传
).
我猜我需要设置一些权限,但是在新旧Opscode管理界面中进行了调整之后,我已经没有线索了.
是什么赋予了?
注意:我们使用的是Opscode Enterprise Chef版本.
根据Chef支持,执行此操作的首选方法是创建新用户并使用它从CI节点与Chef Server进行交互:
用户更恰当地称为"Chef Server API的任何用户,而不是运行chef-client程序的节点"
如果您想避免上述必须为客户端分配管理员权限的问题,您可以创建一个新用户,该用户将用于从构建服务器进行上载.允许所有用户上传cookbook,而无需成为Admins组的成员.
所以,总结一下:
在Opscode管理员中创建一个新用户
使用户的密钥(.pem
)在CI节点上可用.
确保(1)中的用户用于所有刀具命令(参见--user
和--key
刀具选项),例如knife upload cookbook <name> --user ci_user --key .chef/ci_user.pem