我开始使用node.js应用程序在github上托管我的第一个CodePipeline。我想创建简单的管道如下:
npm test
和npm lint
对于上面的管道,我在.config
目录下创建了.ebextensions
个文件:
npm install --production
用于QA和PROD env,但似乎EC2找不到节点也不能找到npm。我在临时文件夹中检查了日志和EC2触发npm install
,然后在我的第一个脚本上失败,应用程序目录始终为空。
container_commands:
install-dev:
command: "npm install"
test: "[ \"$NODE_ENV\" = \"TEST\" ]"
ignoreErrors: false
install-prod:
command: "npm install --production"
test: "[ \"$NODE_ENV\" != \"TEST\" ]"
ignoreErrors: false
container_commands:
lint:
command: "npm run lint"
test: "[ \"$NODE_ENV\" = \"TEST\" ]"
ignoreErrors: false
test:
command: "npm run test"
test: "[ \"$NODE_ENV\" = \"TEST\" ]"
ignoreErrors: false
我为每个Elastic Beanstalk实例设置了NODE_ENV
。无论每次我的管道由于npm is not recognized
而失败时我都会做什么,但是如果我用node.js运行64位Amazon Linux怎么可能呢?更重要的是,我在AWS Docs中找不到任何关于带有node.js的CodePipeline的示例。提前谢谢!
答案 0 :(得分:2)
如果您将AWS用于CI / CD,则可以使用CodeBuild。但是,Github提供了一个名为Actions的强大功能,用于运行单元测试,我发现它比AWS更简单。无论如何,我将向您介绍两个示例:
使用AWS运行单元测试
基本上,您可以在CodePipeline中创建一个新阶段,并配置CodeBuild以运行单元测试,例如
首先,在您应用的根文件夹中添加一个buildspec.yml文件,以便您可以使用以下示例:
version: 0.2
phases:
install:
runtime-versions:
nodejs: 10
commands:
- echo Installing Mocha globally...
- npm install -g mocha
pre_build:
commands:
- echo Installing dependencies...
- npm install
- npm install unit.js
build:
commands:
- echo Build started on `date`
- echo Run Unit Tests and so on
- npm run test
- npm run lint
post_build:
commands:
- echo Build completed on `date`
# THIS IS OPTIONAL
artifacts:
files:
- app.js
- package.json
- src/app/*
- node_modules/**/*
您可以在BackSpace学院中找到所需的一切,该课程是免费的: AWS DevOps CI/CD - CodePipeline, Elastic Beanstalk and Mocha
使用Github进行单元测试
您可以使用Github创建自定义操作,它会自动在根文件夹中设置所需的所有内容,例如
选择适当的工作流程后,它将自动生成一个文件夹/文件“ .github>工作流程> nodejs.yml”。
所以它看起来像这样:
name: Node CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [8.x, 10.x, 12.x]
steps:
- uses: actions/checkout@v1
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: npm install, build, and test
run: |
npm install
npm run build --if-present
npm test
env:
CI: true
我希望您能在此答案中找到所需的一切。干杯
答案 1 :(得分:1)
您是否已将CodeBuild合并到您的管道中?
你应该
1)创建一个源代码为github帐户的管道。完成设置过程,以便特定分支上的提交触发Codepipeline
2)在Codepipeline中创建一个利用CodeBuild服务的测试阶段。要运行Node测试,您可能需要提供已配置的构建环境。您可能还需要提供一个构建规范文件,指定要运行的测试等。
3)假设测试阶段通过,您可以确定管道是否继续到另一个链接到支持Node平台的elasticbeanstalk应用程序环境的阶段。这些环境纯粹是为了通过测试的工件,所以我认为不需要上面写的.ebextensions命令。
阅读CodeBuild可以做些什么来帮助您运行Node的测试,
祝你好运!