node.js - 无法在 bitbucket 管道中的 node.js 图像中执行 bash 脚本

标签 node.js npm continuous-integration bitbucket-pipelines

我正在为 React 应用程序 - CRA 的 CI/CD 使用标准 bitbucket 管道模板。

我在 React App 中设置了 postbuild 步骤来运行简单的 bash 脚本,该脚本仅更改构建文件夹中的文件结构。

在 package.json 中:

"postbuild": "postbuild.sh"

bitbucket-pipelines.yml:

#  Template React Deploy

#  This template allows you to deploy your React app to an AWS S3 bucket and invalidate the old AWS Cloudfront distribution.
#  The workflow allows running tests, code linting and security scans on feature branches (as well as master).
#  The react app will be validated, deployed to S3 and trigger an AWS Cloudfront distribution invalidation to refresh the CDN caches after the code is merged to master.

# Prerequisites: $AWS_ACCESS_KEY_ID, $AWS_SECRET_ACCESS_KEY setup in the Deployment variables.
# For advanced cases, please, follow examples from the pipe's:
# README https://bitbucket.org/atlassian/aws-s3-deploy/src/master/README.md
# README https://bitbucket.org/atlassian/aws-cloudfront-invalidate/src/master/README.md

image: node:10.15.3

# Workflow Configuration

pipelines:
  default:
    - parallel:
      - step:
          name: Build and Test
          caches:
            - node
          script:
            - npm install
            # CI=true in default variables for Bitbucket Pipelines https://support.atlassian.com/bitbucket-cloud/docs/variables-in-pipelines/
            - npm test
      - step:
          name: Lint the node package
          script:
            # Run your linter of choice here
            - npm install eslint
            - npx eslint src
          caches:
            - node
  branches:
    master:
      - parallel:
        - step:
            name: Build and Test
            caches:
              - node
            script:
              - npm install
              # CI=true in default variables for Bitbucket Pipelines https://support.atlassian.com/bitbucket-cloud/docs/variables-in-pipelines/
              - npm test
              - chmod +x ./postbuild.sh
              - npm run build
            artifacts:
              - build/**
        - step:
            name: Security Scan
            script:
              # Run a security scan for sensitive data.
              # See more security tools at https://bitbucket.org/product/features/pipelines/integrations?&category=security
              - pipe: atlassian/git-secrets-scan:0.4.3
      - step:
          name: Deploy to Production
          deployment: Production
          trigger: manual
          clone:
            enabled: false
          script:
            # sync your files to S3
            - pipe: atlassian/aws-s3-deploy:0.4.4
              variables:
                AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
                AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
                AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION
                S3_BUCKET: 'my-bucket-name'
                LOCAL_PATH: 'build'
            # triggering a distribution invalidation to refresh the CDN caches
            - pipe: atlassian/aws-cloudfront-invalidate:0.1.1
              variables:
                AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
                AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
                AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION
                DISTRIBUTION_ID: '123xyz'

build 一切正常,但稍后在 postbuild 中我遇到了此错误:

> @plutora/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e487888d818a90a4d4cad5cad4" rel="noreferrer noopener nofollow">[email protected]</a> postbuild /opt/atlassian/pipelines/agent/build
> postbuild.sh
sh: 1: postbuild.sh: not found
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn
npm ERR! @plutora/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="11727d78747f6551213f203f21" rel="noreferrer noopener nofollow">[email protected]</a> postbuild: `postbuild.sh`
npm ERR! spawn ENOENT
npm ERR! 
npm ERR! Failed at the @plutora/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="583b34313d362c186876697668" rel="noreferrer noopener nofollow">[email protected]</a> postbuild 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!     /root/.npm/_logs/2020-11-11T12_04_22_330Z-debug.log

最佳答案

我通过在 /bin/bash 中运行脚本解决了问题:

...
script:
  - npm install
  - npm test
  - chmod +x ./postbuild.sh
  - npm run build
  - /bin/bash postbuild.sh
...

This有帮助。

关于node.js - 无法在 bitbucket 管道中的 node.js 图像中执行 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64786416/

相关文章:

java - Java web项目持续集成使用什么软件

node.js - Foursquare Api 在无用户身份验证的 `venue/photos` 端点上仅返回 1 个结果

typescript - 使用 npm run build 时如何删除 Typescript 断言?

javascript - npm 错误 : cb() never called, 我该怎么办?

javascript - 如何在 Angular 4 上使用带有 ChartJS 的插件

continuous-integration - Gitlab CI .gitlab-ci.yml 只测试某些分支

mercurial - 如何在 Jenkins/Hudson 工作中手动触发 Mercurial 的拉动?

python - Subprocess.Popen Stdout 等待程序完成

node.js - 如何启动新的nodejs进程

node.js - sails.js Assets 版本控制