标签: aws-code-deploy-appspec

AWS CodeBuild 和 CodeDeploy 上的 Lerna 未安装本地依赖项

所以我有一个名为 backend 的 Typescript 项目,其 package.json 中具有这样的依赖关系:

"dependencies": {
  "@the-couple-game/helpers": "^1.0.0",
}
Run Code Online (Sandbox Code Playgroud)

助手(也是 Typescript)位于另一个文件夹中,其 package.json 如下所示:

{
    "name": "@the-couple-game/helpers",
}
Run Code Online (Sandbox Code Playgroud)

因此,运行lerna bootstrap应该链接两者,并在后端的 node_modules 中安装@the- Couple-game/helpers,这是在本地执行的。

但是,使用 Codebuild 使用下面的 buildspec.yml 执行相同的操作(使用 --no-ci 因为我不想要 npm ci)不会在后端的 node_modules 中添加 @the- Couple-game/helpers 。因此,如果我运行后端的转换后的index.js,它会抱怨缺少模块。

version: 0.1
phases:
  install:
    commands:
      - npm install -g lerna
  pre_build:
    commands:
      - lerna bootstrap --no-ci --concurrency 4
  build:
    commands:
      - lerna run build --concurrency 4
artifacts:
  files:
    - "**/*"
Run Code Online (Sandbox Code Playgroud)

目前,我必须在部署到 CodeDeploy 后手动执行 lerna 引导程序(使用从 appspec.yml 调用的脚本),以便它安装缺少的模块,但 Codebuild 不应该覆盖该部分吗? …

aws-code-deploy aws-codepipeline lerna aws-codebuild aws-code-deploy-appspec

2
推荐指数
1
解决办法
850
查看次数

CodeDeploy 挂钩在代理安装文件夹中运行脚本

所以,我正在设置我的第一个使用 CodeDeploy (EC2 + S3) 的应用程序,我很难弄清楚如何在安装后运行脚本。

所以我在 AppSpec 文件中定义了一个 AfterInstall 钩子,引用我在项目目录中的 bash 脚本文件。当脚本中的命令运行时,我收到错误消息,指出找不到文件。所以我ls在这一切之前放了一个命令并检查了日志。

我的脚本文件在 CodeDeploy 代理文件夹中运行。我在测试时不小心创建了许多文件,但我希望它们在我的项目根文件夹中。

--Root
----init.sh
----requirements.txt
----server.py
Run Code Online (Sandbox Code Playgroud)

appspec.yml

version: 0.0
os: linux
files:
  - source: ./
    destination: /home/ubuntu/myapp
    runas: ubuntu
hooks:
  AfterInstall:
    - location: init.sh
      timeout: 600
Run Code Online (Sandbox Code Playgroud)

初始化文件

#!/bin/bash

ls
sudo apt install python3-pip
pip3 install -r ./requirements.txt
python3 ./server.py
Run Code Online (Sandbox Code Playgroud)

所以当ls被执行时,它不会列出我的项目根目录中的文件。我也试过 ${PWD} 而不是 ./ 但它没有用。它正在将脚本文件复制到代理文件夹并运行它。

请参阅此https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file-structure-hooks.html

这是写在上述文件的末尾

您在“挂钩”部分中指定的脚本位置相对于应用程序修订包的根目录。在前面的示例中,名为 RunResourceTests.sh 的文件位于名为 Scripts 的目录中。Scripts 目录位于包的根级别。

但显然它仅指 appspec 文件中的路径。

有人可以帮忙吗?这是正确的吗?我必须在脚本文件中使用硬编码的绝对路径吗?

amazon-ec2 amazon-web-services aws-code-deploy aws-code-deploy-appspec

1
推荐指数
1
解决办法
1342
查看次数