ruby-on-rails - 通过 jenkins 和 capistrano 自动部署 rails 应用程序
问题描述
作为第一步,我已使用 Ubuntu 16.04 配置 AWS EC2 实例,并配置 Capistrano 以从本地部署到此 AWS EC2 实例。
现在我正在尝试通过 Jenkins 和 Capistrano 将 GitHub 上的自动部署 rails 应用程序制作到这个 Ubuntu 服务器(AWS EC2)。注意:我是第一次创建自动部署。
我的 rails 应用程序(生产)和 Jenkins 在同一个 Amazon EC2 实例上。当 Jenkins 任务启动时,它会将 repo 克隆到 jenkins 工作区,安装 gems 然后执行:cap production deploy
但现在我无法检查 Capistrano 是否已正确配置以部署到同一服务器的另一个文件夹,因为cap production deploy
执行时我收到此错误:
Net::SSH::AuthenticationFailed: Authentication failed for user jenkins@
我尝试为用户 jenkins 创建 ssh-key 并将其添加到 ubuntu 用户(默认的非 root sudo 用户):
ssh-keygen
ssh-copy-id ubuntu@127.0.0.1
并且总是得到权限被拒绝错误。
有人有什么建议吗?在此先感谢 capistrano 3.11 版
解决方案
您可以在用户jenkin
文件中添加用户。您可以在.public-key
authorized_keys
ubuntu
/home/ubuntu/.ssh/authorized_keys
但是,在我看来,您应该将运行器迁移jenkins
到单独的服务器。
您可以创建一个 VPC 组,并将服务器、生产和 jenkins runner 都放在该单个 VPC 中,并ssh
在同一个 VPC 中公开端口,这样外部的任何人都无法访问它。
然后将服务器的公钥添加jenkins
到生产服务器,就像我上面解释的那样。
推荐阅读
- rust - 让 GtkComboBox 条目为 Pixbuf 或 String
- python - 为什么 os.system('cls') 不清除最近的输出?
- swift - 如何以高性能的方式将可变数组用作字典值?
- javascript - 返回的承诺链上的回调在上述承诺链中的回调之前运行
- mysql - 如何订购我的 mysql 查询以双重标准?
- kubernetes - 如何使用负载均衡器(或直接)从外部访问 pod?
- docusignapi - 有没有办法在 Admin Docusign Sandbox API 上包含禁用多个字段中的数据复制的选项
- python - 如何使用网络刮刀刮取 svg 图像?
- mongodb - Mongoose - 根据某些过滤条件修改 Schema 中的数组属性元素
- python - python api对json对象的响应