web-dev-qa-db-ja.com

リンティングスクリプトがエラーを返したときにAzureDevOps Pipelineビルドを失敗させるにはどうすればよいですか?

Azure Pipelines GitHubアドオンを使用して、プルリクエストがリンティングを確実に通過するようにしています。ただし、リンティングに失敗するテストプルリクエストを行ったところですが、Azureパイプラインは成功します。

これが私のAzure-pipelines.ymlです

# Node.js with React
# Build a Node.js project that uses React.
# Add steps that analyze code, save build artifacts, deploy, and more:
# https://docs.Microsoft.com/Azure/devops/pipelines/languages/javascript

trigger:
- master

pool:
  vmImage: 'Ubuntu-16.04'

steps:
- task: NodeTool@0
  inputs:
    versionSpec: '8.x'
  displayName: 'Install Node.js'

- script: |
    npm install
    npm run lint # Mapped to `eslint src` in package.json
    npm run slint # `stylelint src` in package.json
    npm run build
  displayName: 'npm install and build'

そして、これがnpm run lintで失敗することがわかっているブランチの出力(の一部)です。

> [email protected] lint /home/vsts/work/1/s
> eslint src


/home/vsts/work/1/s/src/js/components/CountryInput.js
  26:45  error  'onSubmit' is missing in props validation  react/prop-types
  27:71  error  'onSubmit' is missing in props validation  react/prop-types

✖ 2 problems (2 errors, 0 warnings)

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] lint: `eslint src`
npm ERR! Exit status 1 # Exit status 1, yet the build succeeds?
npm ERR! 
npm ERR! Failed at the [email protected] lint 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/vsts/.npm/_logs/2019-03-16T05_30_52_226Z-debug.log

> [email protected] slint /home/vsts/work/1/s
> stylelint src


> [email protected] build /home/vsts/work/1/s
> react-scripts build

Creating an optimized production build...
Compiled successfully.

# Truncated...

ご覧のとおり、linterは正常に実行され、意図的なエラーをキャッチし(propタイプの検証を削除しました)、コード1で終了します。

しかし、ビルドはその陽気な方法を続けています。

このようなリンティングエラーがトラックでのビルドを停止し、成功を返さないようにするには、何をする必要がありますか?

前もって感謝します。

4
zagd

Npmタスクを使用することもできます。デフォルトでは、エラーが発生するとビルドは失敗します。私は同じ問題を抱えていました、そして以下は私のために働きました:

- task: Npm@1
  displayName: 'Lint'
  inputs:
    command: 'custom'
    customCommand: 'run lint'

タスク のドキュメントから:

- task: string  # reference to a task and version, e.g. "VSBuild@1"
  condition: expression     # see below
  continueOnError: boolean  # 'true' if future steps should run even if this step fails; defaults to 'false'
  enabled: boolean          # whether or not to run this step; defaults to 'true'
  timeoutInMinutes: number  # how long to wait before timing out the task
1
Mike Wright

上記のどちらのアプローチも私の特定のシナリオでは機能しませんでした(Windowsビルドエージェント、カスタムlintingスクリプトを実行したい、package.jsonのスクリプトを使用したくない)

ノードスクリプトからエラーをスローしただけの場合、パイプラインはそれを失敗したステップとして扱います。

パイプラインyml:

  - script: 'node lint-my-stuff'
    displayName: 'Lint my stuff'

lint-my-stuff.js

// run eslint, custom checks, whatever

if (/* conditions aren't met */)
  throw new Error('Lint step failed')

console.log('Lint passed')
0
PersonThing