We use several pure json file git repositories in devops for storing & tracking configuration.
Some of these files are directly used by underlying systems (not critical mission tools, but still painful when failing) by web services querying git json files through devops API
Beside taking care of what we commit,
error is human, without an automatic check, you can't ensure that there was no typo or incorrect schema used for pushed json. Even worse, you realize later bringing un-necessary stress & confusion.
Addressing this point shouldn't be un-doable, plenty solutions for validating json & jsonschema exists, and pre-commit hook are supported by git, sounds good, as described in this good article.
Unfortunately, I try to bring json file edition to poweruser (and not IT people) and this solution seems overkill and server side hook in
devops aren't supported.
stackoverflow suggests using branch policy and external validation service, but again overkill for my needs.
OK ! let's do it in devops build pipeline. Ok, what should we used for being as simple as possible to setup & maintains and where I had some experience.
- C# NjsonSchema for C# ecosystem, but same situation as nodejs one
Seeing the amount of extra work & possible future maintenance, I tried another approach on something already supported by devops pipeline : typed
json schema powershell in a search engine. And it was a pretty good idea.
Test-Json cmdlet introduced in powershel core 6.1 allows schema validation. As Microsoft devops supports inline powershell, seems the best no brainer approach .
- All json files are in the same folder
- Schema file (one for all) is located in the same folder
- Validation should scan all json files per default & support exclusion
- All errors should be printed out and not stopped on first one
In a devops build task, add a
powershell task and ensure to select
Use PowerShell Core. If you are managing yourself, your build agent, you might have to install powershell core binaries for supporting
Below script supports 2 environment variables
schema: filename of json schema file
exclude_json(comma separated array) : json file excluded from validation
output if validation fails
pure json parsing error
using msteams devops connector on a channel, close to real time, you could notify of a build failure