How do I get my Azure DevOps Pipeline build to fail when my linting script returns an error?
Solution 1
this means your script "swallows" the exit code and exits normally. you need to add a check to your script that would catch the exit code of your npm run lint
and exit with the same exit code, something like:
- script: |
npm install
npm run lint # Mapped to `eslint src` in package.json
if [ $? -ne 0 ]; then
exit 1
fi
npm run slint # `stylelint src` in package.json
npm run build
Solution 2
You could also use an npm task. The default is to fail the build when there is an error. I had the same problem and the below worked for me:
- task: Npm@1
displayName: 'Lint'
inputs:
command: 'custom'
customCommand: 'run lint'
From the documentation for tasks:
- 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
Solution 3
Neither approach above worked for my specific scenario (windows build agent, wanted to run a custom linting script, didn't want to use a script in package.json)
If you just throw an error from a node script, the pipeline treats it as a failed step.
pipelines 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')
zagd
Updated on June 14, 2022Comments
-
zagd almost 2 years
I am using the Azure Pipelines GitHub add-on to ensure that pull requests pass my linting. However, I have just made a test pull request which fails my linting, but the Azure Pipeline succeeds.
Here is my
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'
And here is (part of) the output on a branch which I know fails on
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...
As you can see, linter runs nicely and catches my intentional error (I removed a prop type validation), and exits with code 1.
However the build just carries on its merry way.
What do I need to do to make such a linting error stop my build in its tracks and not return success?
Thank you in advance.
-
reZach almost 5 yearsCan you please provide a link that can explain the syntax around your following code?
if [ $? -ne 0 ]; then
. -
4c74356b41 almost 5 yearsit's explained in the answer. $? - returns last exit code
-
reZach almost 5 yearsIs that azure-pipelines syntax ($?)? Where does it come from, npm? I'd like to do further reading on this.
-
Michal Ciechan almost 5 years
-
Ε Г И І И О over 3 yearsDoes anybody know a way to report these errors/warnings to the summary tab of the pipeline? (or somewhere else for that matter, other than drilling down)