Я пытаюсь создать задание GitLab CI / CD, которое берет сценарий bash из файла YAML и проверяет, правильный ли синтаксис.
У меня есть файл YAML .gitlab-ci.template.yml
со следующим содержимым:
image: node:10.15.3-alpine
stages:
- deploy
deploy:
stage: deploy
script:
- apk_install
- yarn_install
- build
- deploy
.bash: &bash |
function apk_install() {
apk add jq git curl grep
}
function yarn_install() {
yarn
}
function build() {
echo "Build"
if [ -f ".gitlab-ci.template.yml" ]; then
echo "Just a dumb test for more lines"
fi
}
function deploy() {
echo "Deploy"
}
before_script:
- *bash
Я бы хотел принять участие в тестировании bash
. Я установил shyaml
, чтобы получить значения из файла YAML, например:
FILE=`cat .gitlab-ci.template.yml | shyaml get-value before_script`
Содержимое $FILE
будет:
- "function apk_install() {\n apk add jq git curl grep\n}\n\nfunction yarn_install()\ \ {\n yarn\n}\nfunction build() {\n echo \"Build\"\n \n if [ -f \".gitlab-ci.template.yml\"\ \ ]; then\n echo \"Just a dumb test for more lines\"\n fi\n}\n\nfunction deploy()\ \ {\n echo \"Deploy\"\n}\n"
Затем с помощью следующей команды я снова пытаюсь получить действительный файл:
echo $FILE | xargs -0 printf '%b\n' | sed 's/\\[[:space:]]\\[[:space:]]/ /g' | sed 's/\\"/"/g' | sed 's/\\[[:space:]]//g'
Теперь я могу удалить некоторые символы с начала и до конца. Но мне было интересно, есть ли лучший / более простой способ?