无法运行AWS CodeBuild本地构建脚本

时间:2019-10-27 02:45:57

标签: amazon-web-services docker go aws-codebuild

我正在尝试为golang项目在本地运行CodeBuild。我已拉出docker映像amazon/aws-codebuild-local:latest并运行CodeBuild脚本./codebuild_build.sh -i aws/codebuild/standard:2.0 -s "/project/src",没有任何反应。然后,我捕获了在脚本docker run -it -v //var/run/docker.sock:/var/run/docker.sock -e "IMAGE_NAME=aws/codebuild/standard:2.0" -e "SOURCE=/project/src" -e "INITIATOR=me" amazon/aws-codebuild-local:latest中生成的docker命令。

运行docker命令时,出现以下错误:

Removing network agent-resources_default
Removing volume agent-resources_source_volume
Removing volume agent-resources_user_volume
Creating network "agent-resources_default" with the default driver
Creating volume "agent-resources_source_volume" with local driver
Creating volume "agent-resources_user_volume" with local driver
Pulling build (aws/codebuild/standard:2.0)...
ERROR: The image for the service you're trying to recreate has been removed. If you continue, volume data could be lost. Consider backing up your data before continuing.

Continue with the new image? [yN]y
Pulling build (aws/codebuild/standard:2.0)...
ERROR: pull access denied for aws/codebuild/standard, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

我确定我的码头工人已经登录,不知道下一步该怎么做。

3 个答案:

答案 0 :(得分:7)

使用Ubuntu 18.04和docker image identfier / tag aws/codebuild/standard:3.0的本地构建平台来运行少量python单元测试(见下文)的示例。

1。制作aws/codebuild/standard:3.0

的本地docker映像

在docker中,Ubuntu 18.04平台的identifiedaws/codebuild/standard:3.0一样

# download definition of curated docker codebuild images
git clone https://github.com/aws/aws-codebuild-docker-images.git

# got ubuntu version of intrest
cd aws-codebuild-docker-images/ubuntu/standard/3.0/

# build the image (this will take a time as the final image is > 7GB)
docker build -t aws/codebuild/standard:3.0 .

2。下载codebuild_build.sh

wget https://raw.githubusercontent.com/aws/aws-codebuild-docker-images/master/local_builds/codebuild_build.sh

chmod u+x codebuild_build.sh

3。运行本地构建作业

./codebuild_build.sh -i aws/codebuild/standard:3.0 -a /tmp/artifacts -s ./application/

其中./application/应该更改为要构建的应用程序所在的文件夹。该文件夹应包含您的buildspec.yml。 我的示例buildspec.yml是:

version: 0.2

phases:
  install:
    runtime-versions:
      python: 3.8
  pre_build:
    commands:
      - echo Nothing to do in the pre_build phase...
  build:
    commands:
      - echo Running my python unit tests on `date`
      - python -m unittest test.py  
  post_build:
    commands:
      - echo Build completed on `date`

请注意- python -m unittest test.py,因为我仅在构建阶段执行单元测试。 test.py只是Python文档中的一个示例:https://docs.python.org/3/library/unittest.html#basic-example

./codebuild_build.sh还将在您首次执行时提取Docker映像amazon/aws-codebuild-local

4。输出示例:

Removing agent-resources_build_1 ... done
Removing agent-resources_agent_1 ... done
Removing network agent-resources_default
Removing volume agent-resources_source_volume
Removing volume agent-resources_user_volume
Creating network "agent-resources_default" with the default driver
Creating volume "agent-resources_source_volume" with local driver
Creating volume "agent-resources_user_volume" with local driver
Creating agent-resources_agent_1 ... done
Creating agent-resources_build_1 ... done
Attaching to agent-resources_agent_1, agent-resources_build_1
agent_1  | 2020/01/05 07:50:34 [Customer Config] Couldn't open specified customer config file: open /root/.aws/config: no such file or directory
agent_1  | 2020/01/05 07:50:34 [Customer Config] Error parsing supplied customer config file: invalid argument
agent_1  | [Container] 2020/01/05 07:50:35 Waiting for agent ping
agent_1  | [Container] 2020/01/05 07:50:36 Waiting for DOWNLOAD_SOURCE
agent_1  | [Container] 2020/01/05 07:50:36 Phase is DOWNLOAD_SOURCE
agent_1  | [Container] 2020/01/05 07:50:36 CODEBUILD_SRC_DIR=/codebuild/output/src628986230/src
agent_1  | [Container] 2020/01/05 07:50:36 YAML location is /codebuild/output/srcDownload/src/buildspec.yml
agent_1  | [Container] 2020/01/05 07:50:36 No commands found for phase name: INSTALL
agent_1  | [Container] 2020/01/05 07:50:36 Processing environment variables
agent_1  | [Container] 2020/01/05 07:50:36 Moving to directory /codebuild/output/src628986230/src
agent_1  | [Container] 2020/01/05 07:50:36 Registering with agent
agent_1  | [Container] 2020/01/05 07:50:36 Phases found in YAML: 4
agent_1  | [Container] 2020/01/05 07:50:36  INSTALL: 0 commands
agent_1  | [Container] 2020/01/05 07:50:36  PRE_BUILD: 1 commands
agent_1  | [Container] 2020/01/05 07:50:36  BUILD: 2 commands
agent_1  | [Container] 2020/01/05 07:50:36  POST_BUILD: 1 commands
agent_1  | [Container] 2020/01/05 07:50:36 Phase complete: DOWNLOAD_SOURCE State: SUCCEEDED
agent_1  | [Container] 2020/01/05 07:50:36 Phase context status code:  Message: 
agent_1  | [Container] 2020/01/05 07:50:36 Entering phase INSTALL
agent_1  | [Container] 2020/01/05 07:50:36 Running command echo "Installing Python version 3.8 ..."
agent_1  | Installing Python version 3.8 ...
agent_1  | 
agent_1  | [Container] 2020/01/05 07:50:36 Phase complete: INSTALL State: SUCCEEDED
agent_1  | [Container] 2020/01/05 07:50:36 Phase context status code:  Message: 
agent_1  | [Container] 2020/01/05 07:50:36 Entering phase PRE_BUILD
agent_1  | [Container] 2020/01/05 07:50:36 Running command echo Nothing to do in the pre_build phase...
agent_1  | Nothing to do in the pre_build phase...
agent_1  | 
agent_1  | [Container] 2020/01/05 07:50:36 Phase complete: PRE_BUILD State: SUCCEEDED
agent_1  | [Container] 2020/01/05 07:50:36 Phase context status code:  Message: 
agent_1  | [Container] 2020/01/05 07:50:36 Entering phase BUILD
agent_1  | [Container] 2020/01/05 07:50:36 Running command echo Runing my python unittests on `date`
agent_1  | Runing my python unittests on Sun Jan 5 07:50:36 UTC 2020
agent_1  | 
agent_1  | [Container] 2020/01/05 07:50:36 Running command python -m unittest test.py
agent_1  | ...
agent_1  | ----------------------------------------------------------------------
agent_1  | Ran 3 tests in 0.000s
agent_1  | 
agent_1  | OK
agent_1  | 
agent_1  | [Container] 2020/01/05 07:50:37 Phase complete: BUILD State: SUCCEEDED
agent_1  | [Container] 2020/01/05 07:50:37 Phase context status code:  Message: 
agent_1  | [Container] 2020/01/05 07:50:37 Entering phase POST_BUILD
agent_1  | [Container] 2020/01/05 07:50:37 Running command echo Build completed on `date`
agent_1  | Build completed on Sun Jan 5 07:50:37 UTC 2020
agent_1  | 
agent_1  | [Container] 2020/01/05 07:50:37 Phase complete: POST_BUILD State: SUCCEEDED
agent_1  | [Container] 2020/01/05 07:50:37 Phase context status code:  Message: 
agent-resources_agent_1 exited with code 0
Stopping agent-resources_build_1 ... done
Aborting on container exit...

5。检查构建作业是否成功?

就我而言,我只是想知道test.py中的所有单元测试是否成功。为此,您只需检查codebuild_build.sh

的退出代码
echo ${?}

如果测试成功,则返回0,否则返回1。可以通过修改test.py来验证这一点,以使单元测试失败,然后重新运行codebuild_build.sh。之所以有效,是因为所有测试通过后,python -m unittest test.py会以0的代码退出,否则会以1的退出。

答案 1 :(得分:1)

对于每个https://aws.amazon.com/blogs/devops/announcing-local-build-support-for-aws-codebuild/,您必须git clone包含以下图像定义的GitHub存储库:https://github.com/aws/aws-codebuild-docker-images。 aws / codebuild / standard不是DockerHub存储库或有效的ECR存储库。

答案 2 :(得分:0)

首先按照以下说明构建并标记CodeBuild docker映像:

https://github.com/aws/aws-codebuild-docker-images

然后运行以下命令,确保更新命令中的图像名称和标记:

./codebuild_build.sh -i <image_name>:<image_tag> -a /home/ec2-user/environment/artifacts -s /home/ec2-user/environment/sample-web-app