我想保存在亚马逊EC2注册神器码头工人的形象,通过封隔器(和ansible)内置
我的限制: 构建需要由Bitbucket管道触发。因此,构建步骤需要在Bitbucket管道本身或AWS EC2实例/容器中执行。
这是因为并非所有开发机器都必须具有从其本地环境构建的权限/软件包。我只希望将这些图像作为自动CI过程的结果来构建。
我曾尝试:
使用帕克,我能够远程建立的AMI。我可以使用Packer构建Docker镜像(本地构建并远程推送到Amazon ECR)。
但是,在Docker容器中执行构建步骤的Bitbucket管道已经无法访问docker守护进程'docker run'。
我在到位桶管道收到错误:
+ packer build ${BITBUCKET_CLONE_DIR}/build/pipelines_builder/template.json
docker output will be in this color.
==> docker: Creating a temporary directory for sharing data...
==> docker: Pulling Docker image: hashicorp/packer
docker: Using default tag: latest
docker: latest: Pulling from hashicorp/packer
docker: 88286f41530e: Pulling fs layer
...
...
docker: 08d16a84c1fe: Pull complete
docker: Digest: sha256:c093ddf4c346297598aaa13d3d12fe4e9d39267be51ae6e225c08af49ec67fc0
docker: Status: Downloaded newer image for hashicorp/packer:latest
==> docker: Starting docker container...
docker: Run command: docker run -v /root/.packer.d/tmp/packer-docker426823595:/packer-files -d -i -t hashicorp/packer /bin/bash
==> docker: Error running container: Docker exited with a non-zero exit status.
==> docker: Stderr: docker: Error response from daemon: authorization denied by plugin pipelines: Command not supported..
==> docker: See 'docker run --help'.
==> docker:
Build 'docker' errored: Error running container: Docker exited with a non-zero exit status.
Stderr: docker: Error response from daemon: authorization denied by plugin pipelines: Command not supported..
See 'docker run --help'.
==> Some builds didn't complete successfully and had errors:
--> docker: Error running container: Docker exited with a non-zero exit status.
Stderr: docker: Error response from daemon: authorization denied by plugin pipelines: Command not supported..
See 'docker run --help'.
==> Builds finished but no artifacts were created.
下面引用了一切(从link拍摄):
其他命令,如搬运工来看,目前禁止对于我们的共享构建基础结构中的 安全原因。
所以,我知道为什么会发生以下情况。这是我面临的限制。我知道我需要找到一个替代方案。
一种可能的解决方案: 我能想到的此刻,一个到位桶管道使用具有terraform和ansible安装在图像中,包含以下的唯一解决方案:
ansible本地:
- terraform申请(旋转加速从AMI实例/容器ansible和封隔器安装)
ansible远程(上述的实例)
- 克隆DEVOPS与封隔器构建脚本回购它
- 执行封隔器生成命令(建立命令取决于ansible,版本会创建EC2容器注册表图像)
ansible本地
- terraform破坏
上述解决方案是否可行?有替代品吗? Packer不能运行命令并从ECS中远程运行的容器提交?
我的长期解决方案是只使用bitbucket管道来触发AWS中的lambda函数,这将在我们的EC2容器注册表中启动容器并在那里执行构建。更多的控制,我们可以让开发人员从他们的机器触发lambda函数(具有更多的定制动态变量)。
我已经成功地使用了Bitbucket Pipelines中的打包器和terraform(具有权限和所有设置)。只是在包装器template.json有一个类型为'docker'的构造器出现问题时,因为后台Packer实际上执行了docker run命令。我正在寻找一种方式让Packer在Bitbucket Pipelines环境之外构建Docker镜像(例如在EC2实例或容器中,以便它可以成功执行docker run命令,谢谢你的输入。) –
显示详细信息错误第一 – BMW
我编辑错误日志的问题:) –