Тема: CI в Gitlab и проверка AWS Cloud Formation json файлов
Понадобилось мне тут сделать праверочку для json файлов по которым стартует Cloud Formation в AWS. Поскольку все лежит в Git'e то он подойдет идеально. Я не стал сильно заморачиваться, можно и по красивее, но так как это для себя любимого, то пойдет...
.gitlab-ci.yml
variables:
GIT_SSL_NO_VERIFY: "true"
stages:
- Test JSON
- Test CloudFormation
test:jsonlint:
stage: Test JSON
image: python:latest
before_script:
- pip install demjson
script:
- find ./ -name '*.json' | awk '{print "echo \"-------------------------------------------------\"; python .ci/jsonlint-py -S "$1}' | sh
test:cfn-check:
stage: Test CloudFormation
image: node:latest
before_script:
- npm install -g cfn-check
- ln -s /usr/bin/nodejs /usr/bin/node
script:
- find ./ -name '*.json' | awk '{print "echo \"-------------------------------------------------\"; bash .ci/cfn-check-wrapper.sh "$1}' | sh
.ci/cfn-check-wrapper.sh
#!/bin/bash
OUTPUT=`cfn-check -c $1`
EXITCODE=$?
if [ $EXITCODE -eq 0 ]; then
echo "$1 ok"
else
echo "$1 fail"
echo "$OUTPUT"
fi
exit $EXITCODE
.ci/jsonlint-py
#! /usr/bin/python
# -*- coding: utf-8 -*-
r"A JSON syntax validator and formatter tool. Requires demjson module."
__author__ = "Deron Meranda <http://deron.meranda.us/>"
__homepage__ = "http://deron.meranda.us/python/demjson/"
__date__ = "2014-12-22"
__version__ = "2.2.4"
__credits__ = "Copyright (c) 2006-2015 Deron E. Meranda <http://deron.meranda.us/>"
import sys
try:
import demjson
except ImportError:
sys.stderr.write("Can not import the demjson Python module.\n")
sys.stderr.write("Try running: pip install demjson\n")
sys.exit(1)
if __name__ == '__main__':
lint = demjson.jsonlint( program_name=sys.argv[0] )
rc = lint.main( sys.argv[1:] )
sys.exit(rc)
Что происходит: в момент слияния запросов гит стартует докер контейнер и в нем инсталлирует все что надо для проверки. Два цикла, в первом просто проверяем json на правильность и второй, проверяем на соответствие стандартам cloud formation'а. Можно еще и онлайн проверку добавить, но долго ждать.