首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CircleCI无法运行"claudia更新“

CircleCI无法运行"claudia更新“
EN

Stack Overflow用户
提问于 2017-06-21 08:48:49
回答 2查看 589关注 0票数 1

我运行CircleCI和Claudia.js来将我的node.js代码部署到AWS。

下面是我的package.json (脚本部分):

代码语言:javascript
复制
"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"
  },

当我跑步的时候:

代码语言:javascript
复制
npm run update

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

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

代码语言:javascript
复制
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中的错误是:

代码语言:javascript
复制
#!/bin/bash -eo pipefail
npm run update

> xxx@0.1.0 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/凭据的文件,其中包含:

代码语言:javascript
复制
[claudia]
aws_access_key_id = xxxxxxx
aws_secret_access_key = xxxxxx

编辑:

更改config.yml使其与CircleCI 2.0相匹配

代码语言:javascript
复制
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 npm@latest'
      - 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的日志文件:

代码语言:javascript
复制
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 xxx_email_service@0.2.0~update: Failed to exec update script
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! xxx_email_service@0.2.0 update: `claudia update`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the xxx_email_service@0.2.0 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中添加凭据吗?我仍然可以用终端来部署。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-24 14:25:00

这可能与CircleCI处理用户的方式有关。

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

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

AWS_ACCESS_KEY_ID -以您的访问键作为值

AWS_SECRET_ACCESS_KEY -使用您的秘密密钥作为值

有关通过AWS中的环境变量设置键的更多信息:

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

有关循环CI中env变量的更多信息:

https://circleci.com/docs/1.0/environment-variables/

票数 2
EN

Stack Overflow用户

发布于 2017-06-22 02:31:50

您是否将creds存储在存储库中提到的文件中?首先,你可能不应该,这是一个安全-不-不。如果是的话,它需要在~/.aws/credentials。根据您当前的配置,您的整个回购都位于~/emailservice的构建中。您需要创建aws目录,然后用mv移动creds。类似于:

代码语言:javascript
复制
mkdir ~/.aws
mv ~/emailservice/my-creds-file ~/.aws/credenials

或者,我建议不要在您的回购中有一个文件,并使用私有环境变量。在这个场景中,您将在CircleCI的web中设置变量AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY。然后,AWS将在运行时看到并使用这些凭据。

auth方法可以在这里找到:http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html

恕我直言,

里卡多·费利西亚诺

CircleCI开发人员传道者

最初的答复:

我不能百分之百确定你所犯错误的确切原因,但是看起来你有一个更大的问题。该配置文件看起来根本不正确。来自CircleCI 1.0和2.0的概念和配置语法是以一种不兼容的方式混合的。我将检查https://circleci.com/docs/的配置语法,并选择您希望使用的CircleCI版本。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44671126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档