AWS-CDK和Gitlab返回错误:spawnSync docker ENOENT。

13
我正在尝试通过cdk-synth命令在Gitlab的管道上构建一个AWS-CDK项目。我已经按照在线建议使用了Gitlab runner应该使用的镜像,但我遇到了以下错误:

Error: spawnSync docker ENOENT

我不确定这个错误具体意味着什么,我猜它正在尝试启动docker(被cdk synth命令使用),但未能这样做。再次查找在线信息发现所有建议都是使用我当前拥有的设置。
image: node:16.3.0-alpine

stages:
  - build
  - test
  - .post

cache:
  key: ${CI_COMMIT_REF_SLUG}
  paths:
    - .npm
    - node_modules

build:
  tags:
    - mytag
  environment: ${CI_COMMIT_BRANCH}
  stage: build
  script:
    - npm i
    - cdk synth --no-staging > template.yaml
  artifacts:
    paths:
      - cdk.out
    expire_in: 30 mins

我真的很困惑这个问题,也许答案就在我眼前,但是请问有人能指点一下我吗?为什么我使用的图像本身就是一个Docker容器,却会出现这个错误?

6个回答

23

我之前也遇到了这个问题,但是通过在package.json中将esbuild添加到devDependencies中解决了问题。


4
是的,您可以使用 npm i -D esbuild 简单地完成这个任务。 - Romain Spinelli

6

经过大约十天的在Docker容器内进行各种操作,以及基于其他解决方案的大量尝试和错误,例如 这个

我得出了以下解决方案。

如果你正在使用 NodejsFunction 函数,则似乎需要在 gitlab-ci 模板的 before_script/script 中包含以下内容:

- apk add bash (来源:这里)

- npm i -g esbuild

esbuild 用于将基于JavaScript的Lambda函数代码及其依赖项打包成一个单独的文件。以下是适用于我的解决方案:

cdk_synth:
  image: node:16-alpine
  stage: validate
  before_script:
    - apk add bash
    - npm i -g esbuild
    - npm install
    - npm i -g aws-cdk
    - npm i -g aws-cdk-lib
  script:
    - cdk bootstrap aws://$AWS_ACCOUNT_ID/$AWS_REGION
    - cdk synth

1

0
加入这几行代码解决了我的问题!
  script:
    - apt-get update
    - apt-get install -y ca-certificates curl gnupg lsb-release
    - mkdir -p /etc/apt/keyrings
    - curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    - echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
    - apt-get update
    - apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
    - npm i
    - npm run synth

0

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接