2017-06-21 78 views
0

运行CircleCI和Claudia.js以将我的node.js代码部署到AWS Lambda。CircleCI无法运行“克劳迪娅更新”

这里是我的package.json(脚本部分):

"scripts": { 
    "deploy": "claudia create --handler lambda.handler --deploy-proxy-api --region eu-central-1", 
    "update": "claudia update", 
    "generate-proxy": "claudia generate-serverless-express-proxy --express-module server", 
    "test": "./node_modules/.bin/mocha --reporter spec" 
    }, 

当我跑步时:在终端

npm run update 

,我可以更新就好了。但是当我在CircleCI中运行它时失败了。

这里是我的CircleCI配置文件(.circleci/config.yml):

version: 1 
jobs: 
    build: 
    machine: 
     node: 
     version: 6.11 
    working_directory: ~/project 
    steps: 
     - checkout 
     - run: 
      name: install 
      command: npm install 
     - run: 
      name: test 
      command: npm run test 
    build: 
    steps: 
     - run: 
      name: generate-proxy 
      command: npm run generate-proxy 
     - run: 
      name: update 
      command: npm run update 

在CircleCI的错误是:

#!/bin/bash -eo pipefail 
npm run update 

> [email protected] update /home/circleci/project 
> claudia update 

loading Lambda config 
loading Lambda config lambda.getFunctionConfiguration FunctionName=xxx 
loading Lambda config lambda.setupRequestListeners 
{ CredentialsError: Missing credentials in config 
    at IncomingMessage.<anonymous> (/home/circleci/project/node_modules/aws-sdk/lib/util.js:864:34) 
    at emitNone (events.js:91:20) 
    at IncomingMessage.emit (events.js:185:7) 
    at endReadableNT (_stream_readable.js:926:12) 
    at _combinedTickCallback (internal/process/next_tick.js:74:11) 
    at process._tickDomainCallback (internal/process/next_tick.js:122:9) 
    message: 'Missing credentials in config', 
    retryable: false, 
    time: 2017-06-21T08:02:53.894Z, 
    code: 'CredentialsError', 
    originalError: 
    { message: 'Could not load credentials from any providers', 
    retryable: false, 
    time: 2017-06-21T08:02:53.894Z, 
    code: 'CredentialsError' } } 

我有一个名为.aws /凭证文件,其中包含:

[claudia] 
aws_access_key_id = xxxxxxx 
aws_secret_access_key = xxxxxx 

编辑:

改变config.yml相匹配的CircleCI 2.0

version: 2 
jobs: 
    build: 
    working_directory: ~/emailservice 
    docker: 
     - image: circleci/node:4.8.2 
    steps: 
     - checkout 
     - run: 
      name: update-npm 
      command: 'sudo npm install -g [email protected]' 
     - restore_cache: 
      key: dependency-cache-{{ checksum "package.json" }} 
     - run: 
      name: install 
      command: npm install 
     - save_cache: 
      key: dependency-cache-{{ checksum "package.json" }} 
      paths: 
      - ./node_modules 
     - run: 
      name: test 
      command: npm run test 
     - store_artifacts: 
      path: test-results.xml 
      prefix: tests 
     - store_artifacts: 
      path: coverage 
      prefix: coverage 
     - store_test_results: 
      path: test-results.xml 
     - run: 
      name: deploy_update 
      command: npm run update 

一切正常,除了凭证之前。从CircleCI

日志文件:

loading Lambda config 
loading Lambda config lambda.getFunctionConfiguration FunctionName=emailService 
loading Lambda config lambda.setupRequestListeners 
{ [CredentialsError: Missing credentials in config] 
    message: 'Missing credentials in config', 
    code: 'CredentialsError', 
    time: Thu Jun 22 2017 08:11:27 GMT+0000 (UTC), 
    retryable: true, 
    originalError: 
    { message: 'Could not load credentials from any providers', 
    code: 'CredentialsError', 
    time: Thu Jun 22 2017 08:11:27 GMT+0000 (UTC), 
    retryable: true, 
    originalError: 
     { message: 'Connection timed out after 1000ms', 
     code: 'TimeoutError', 
     time: Thu Jun 22 2017 08:11:27 GMT+0000 (UTC), 
     retryable: true } } } 
npm info lifecycle [email protected]~update: Failed to exec update script 
npm ERR! code ELIFECYCLE 
npm ERR! errno 1 
npm ERR! [email protected] update: `claudia update` 
npm ERR! Exit status 1 
npm ERR! 
npm ERR! Failed at the [email protected] update script. 
npm ERR! This is probably not a problem with npm. There is likely additional logging output above. 

npm ERR! A complete log of this run can be found in: 
npm ERR!  /home/circleci/.npm/_logs/2017-06-22T08_11_27_089Z-debug.log 
Exited with code 1 

我一定要在AWS添加凭证地方?我仍然可以使用终端进行部署。

回答

1

这可能与CircleCI如何处理用户有关。

我建议使用环境变量来存储AWS访问密钥和秘密。

您需要添加以下环境变量:

AWS_ACCESS_KEY_ID - 作为一种价值
AWS_SECRET_ACCESS_KEY与您的访问密钥 - 作为一种价值用自己的密钥

更多信息经由环境变量设置键在AWS:

http://docs.aws.amazon.com/cli/latest/userguide/cli-environment.html

更多关于在圈CI ENV变量信息

+0

谢谢,我会去的! –

+0

这似乎工作,但我有一个新问题。将继续搜索该答案。 Thansk! –

+0

有什么问题?随意问,我来自Claudia团队。此外,对于克劳迪娅相关的问题,你应该检查我们的gitter,即。在那里发布stackoverflow链接,然后有人会跳入并尝试回答它。 –

1

您是否将信用存储在您在存储库中提到的文件中?首先,你可能不应该,这是一个安全禁止。如果你是,它需要在~/.aws/credentials。根据您当前的配置,您的整个回购站位于~/emailservice的版本中。您需要创建aws目录,然后使用mv移动信用卡。喜欢的东西:

mkdir ~/.aws 
mv ~/emailservice/my-creds-file ~/.aws/credenials 

另外,我建议不会在你的回购文件,并使用private environment variables。在这种情况下,您需要在CircleCI的网络用户界面中设置变量AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY。 AWS CLI将在运行时查看并使用这些凭据。

的AWS CLI身份验证方法,可以在这里找到:http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html

尊敬,

里卡多ň费利西亚诺
CircleCI开发传播者


原始响应:

我不是100%确切地知道为什么你正在发生的错误正在发生,但它像你一样有更大的问题。该配置文件看起来并不正确。 CircleCI 1.0和2.0的概念和配置语法以不兼容的方式混合使用。我会检查配置语法https://circleci.com/docs/并选择您想使用哪个版本的CircleCI。

之后,无论是在这里还是CircleCI Discuss我们都可以尝试排除故障。

+0

感谢您的快速回答,我将对文档进行检查,如果我没有解决问题,请回复您。 如果出现更多问题,我们是否应该在这里进行讨论?谢谢 –

+0

我已经编辑了我的配置文件,除了原来的问题仍然存在之外,所有的东西都可以工作。凭据错误。 我将用我的新配置文件编辑我的问题。 –