Skrip pembungkus untuk menjalankan shellcheck pada file yaml ci-config. Format yang saat ini didukung adalah pipa bitbucket, gitlab ci, tindakan github, drone ci, circleci, dan (sangat terbatas) ansible
Membutuhkan Python 3 dengan perpustakaan ruamel.yaml, dan kerang.
$ ./yaml_shellcheck.py -h
usage: yaml_shellcheck.py [-h] [-o OUTDIR] [-k] [-d] [-s SHELL] [-c COMMAND] files [files ...]
run shellcheck on script blocks from .gitlab-ci.yml or bitbucket-pipelines.yml
positional arguments:
files YAML files to read
optional arguments:
-h, --help show this help message and exit
-o OUTDIR, --outdir OUTDIR
output directory (default: create temporary directory)
-k, --keep keep (do not delete) output directory
-d, --debug debug output
-s SHELL, --shell SHELL
default shebang line to add to shell script snippets (default: '#!/bin/sh -e')
-c COMMAND, --command COMMAND
shellcheck command to run (default: shellcheck)
Alat keluar dengan kode keluar dari shellcheck , dari halaman mereka:
ShellCheck uses the follow exit codes:
• 0: All files successfully scanned with no issues.
• 1: All files successfully scanned with some issues.
• 2: Some files could not be processed (e.g. file not found).
• 3: ShellCheck was invoked with bad syntax (e.g. unknown flag).
• 4: ShellCheck was invoked with bad options (e.g. unknown formatter).
# build image
$ docker build . -t yaml_shellcheck:latest
# run image
$ docker run -v ` pwd ` :/app yaml_shellcheck app/ * .yaml lint_yaml_shellcheck :
image :
name : quay.io/mschuette/yaml-shellcheck:latest
entrypoint : [""]
script :
- find . -name *.yaml -or -name *.yml | xargs python3 yaml_shellcheck.py Fungsi utama dari alat ini adalah mengkode elemen mana di dalam data YAML berisi skrip shell. Sejauh ini tiga format didukung.
Menangani file Bitbucket sangat sederhana. File dengan objek pipelines dibaca sebagai file pipa Bitbucket, dan setiap atribut script di dalam dianggap sebagai skrip shell.
GitHub memiliki tindakan (komponen yang dapat digunakan kembali) dan alur kerja (konfigurasi CI nyata yang dapat menjalankan skrip dan/atau tindakan). Alat ini mencoba menangani kedua jenis file dalam fungsi yang sama.
Alur kerja GitHub mirip dengan Bitbucket. File dengan atribut on dan objek jobs dibaca sebagai file github, dan setiap atribut run di dalam dianggap sebagai skrip shell.
Atau file dengan inputs dan objek runs dibaca sebagai file tindakan GitHub.
Sejauh yang saya tahu tindakan Forgejo (seperti yang digunakan misalnya oleh https://codeberg.org/) dengan sengaja menggunakan struktur yang sama dengan tindakan/alur kerja GitHub, jadi ini juga tercakup di sini.
shell tidak didukungsh dan bash dengan garis shebang kananDrone CI memiliki struktur file yang sangat sederhana. Sejauh yang saya tahu itu hanya memiliki kondisi, tetapi tidak ada bersarang atau termasuk. Semua daftar perintah digabungkan dan diperiksa sebagai skrip shell.
Circleci memiliki banyak pilihan, tetapi untungnya bersarang dari jobs.*.steps.run Semua daftar perintah digabungkan dan diperiksa sebagai skrip shell.
shell didukungFile Gitlab CI memiliki lebih banyak struktur, dan kami mencoba mendukung lebih banyak.
script , before_script , after_script : Gitlab tidak memiliki satu, tetapi tiga atribut skrip shell berbeda yang dibaca sebagai tiga skrip independen. Di gitlab before_script dan script dapat digabungkan dan dieksekusi dalam satu proses shell, sedangkan after_script selalu memulai proses shell baru. Ini memiliki beberapa implikasi untuk visibilitas variabel dll dan diabaikan dalam alat ini.include tidak didukung, setiap file YAML diuraikan sendiri. Untuk pipa besar dengan banyak termasuk Anda mungkin ingin menggunakan alat lain untuk menyelesaikan semua termasuk dan kemudian menjalankan YAML_SHELLCHECK pada file YAML yang digabungkan.!referencevariables . shellcheck memeriksa variabel kasus bawah untuk penugasan sebelum penggunaan, tetapi mengasumsikan semua nama variabel kasus atas disediakan secara eksternal. -Pekerjaan CI IMHO Gitlab harus mengikuti konvensi itu dan menggunakan nama variabel kasus atas untuk variabel CI/CD.Dukungan ansible terbatas. Alat ini membaca buku pedoman atau file tugas dengan daftar YAML.
Sejauh ini ia mengenali tiga jenis elemen daftar:
shell (atau ansible.builtin.shell ).tasks .block ) untuk daftar tugas bersarang.{{ ... }} ) diabaikan dan diganti dengan variabel shell placeholder.File dibaca dengan parser YAML, jadi semua jangkar YAML diselesaikan. Tidak ada pemeriksaan tambahan pada tipe atau struktur data.
Mengikuti penggunaan Bitbucket/GitLab, blok skrip dapat berisi string atau array string.