{"id":15755680,"url":"https://github.com/woozymasta/pkci","last_synced_at":"2026-04-30T00:09:22.528Z","repository":{"id":148157538,"uuid":"506983010","full_name":"WoozyMasta/pkci","owner":"WoozyMasta","description":"Pumped Kaniko Container Image for Continuous Integration","archived":false,"fork":false,"pushed_at":"2022-10-03T08:15:25.000Z","size":1654,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-31T08:16:51.672Z","etag":null,"topics":["bash","build-tool","busybox","ci","cicd","cosign","crane","docker","gomplate","helm","jq","jsonnet","kaniko","kubectl","notary","pipeline","podman","tanka","tokei","trivy"],"latest_commit_sha":null,"homepage":"","language":"Jinja","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/WoozyMasta.png","metadata":{"files":{"readme":"README-ru.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-06-24T11:19:57.000Z","updated_at":"2022-10-03T08:23:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"a24e3ea4-0299-43a7-a315-f5c983921d2b","html_url":"https://github.com/WoozyMasta/pkci","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/WoozyMasta/pkci","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WoozyMasta%2Fpkci","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WoozyMasta%2Fpkci/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WoozyMasta%2Fpkci/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WoozyMasta%2Fpkci/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/WoozyMasta","download_url":"https://codeload.github.com/WoozyMasta/pkci/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WoozyMasta%2Fpkci/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32448917,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T22:27:22.272Z","status":"ssl_error","status_checked_at":"2026-04-29T22:10:49.234Z","response_time":110,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bash","build-tool","busybox","ci","cicd","cosign","crane","docker","gomplate","helm","jq","jsonnet","kaniko","kubectl","notary","pipeline","podman","tanka","tokei","trivy"],"created_at":"2024-10-04T08:40:20.916Z","updated_at":"2026-04-30T00:09:18.497Z","avatar_url":"https://github.com/WoozyMasta.png","language":"Jinja","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\u003c!--\nPKCI\nPumped Kaniko Container Image for Continuous Integration\n===============================================================================\n\nЛицензия: MIT\nАвторские права 2022 WoozyMasta \u003cme@woozymasta.ru\u003e\n\nДанная лицензия разрешает лицам, получившим копию данного программного\nобеспечения и сопутствующей документации (в дальнейшем именуемыми\n«Программное обеспечение»), безвозмездно использовать Программное\nобеспечение без ограничений, включая неограниченное право на использование,\nкопирование, изменение, слияние, публикацию, распространение,\nсублицензирование и/или продажу копий Программного обеспечения, а также\nлицам, которым предоставляется данное Программное обеспечение, при\nсоблюдении следующих условий:\n\nУказанное выше уведомление об авторском праве и данные условия должны быть\nвключены во все копии или значимые части данного Программного обеспечения.\n\nДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО\nГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ ГАРАНТИИ ТОВАРНОЙ\nПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ\nНАРУШЕНИЙ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ\nПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ, ЗА УЩЕРБ ИЛИ\nПО ИНЫМ ТРЕБОВАНИЯМ, В ТОМ ЧИСЛЕ, ПРИ ДЕЙСТВИИ КОНТРАКТА, ДЕЛИКТЕ ИЛИ ИНОЙ\nСИТУАЦИИ, ВОЗНИКШИМ ИЗ-ЗА ИСПОЛЬЗОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫХ\nДЕЙСТВИЙ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.\n\n===============================================================================\n# Файл был сгенерирован автоматически\n# ⚠️ Не редактируйте его самостоятельно перед публикацией изменений в проекте ⚠️\n\nСгенерировано: 2022-06-30T16:13:36+00:00\n--\u003e\n\n# PKCI\n\nPumped Kaniko Container Image for Continuous Integration\n\n![logo][]\n\n\u003e _**P**umped **K**aniko **C**ontainer **I**mage_ or\n\u003e _**P**umped **K**aniko for **C**ontinuous **I**ntegration_  \n\u003e Прокачанный образ контейнера Kaniko _или_\n\u003e Прокачанная Kaniko для непрерывной интеграции\n\n## Описание\n\nЭто альтернативный образ контейнера [kaniko][], дополненный установленными утилитами [busybox][], [bash][], [jq][] и прочими полезностями.\n\n\u003e [kaniko][] — это инструмент для создания образов контейнеров из `Dockerfile`\n\u003e внутри контейнера или кластера [kubernetes][].\n\u003e\n\u003e kaniko не зависит от демона Docker и выполняет каждую команду в `Dockerfile`\n\u003e полностью в пользовательском пространстве. Это позволяет создавать образы\n\u003e контейнеров в средах, которые не могут легко или безопасно запускать демон\n\u003e Docker, например в стандартном кластере [kubernetes][].\n\nПричина появления **PKCI** — это необходимость выполнить дополнительную логику внутри контейнера при сборке образа. Оригинальный образ kaniko поставляется на основе scratch-образа, а только отладочный контейнер содержит всего лишь один busybox.\n\n![scheme][]\n\nОдного busybox оказалось недостаточно в связи с этим и появился данный контейнер, что решает задачи:\n\n* В оригинальном отладочном контейнере используется устаревший [busybox][] `1.32.0`\n* busybox установлен по пути `/busybox`, что иногда вызывает проблему на некоторых CRI и при использовании ключа `--cleanup` (когда вы создаете больше одного образа), kaniko по умолчанию исключает только каталог `/kaniko`, а все остальные пути исключаются по параметру `VOLUME` в `Dockerfile`. `VOLUME` может быть проигнорирован вашим CRI и проблема решается только использованием ключа `--ignore-path /busybox`, что не очевидно.  \n  В связи с этим все бинарные файлы размещены в каталоге `/kaniko/bin`\n* Когда вы хотите не только собрать контейнер, но еще опубликовать README.md в реестр контейнеров или проверить `Dockerfile` при помощи [hadolint][], вам следует запустить отдельное задание в сборочной линии, а это ожидание создания очередного pod и клонирования репозитория, объединив все необходимые для разработки и публикации контейнеров утилиты в один образ, мы очень хорошо выигрываем в скорости выполнения сборочной линии\n* Как оказалось, многим разработчикам непривычно работать с [busybox][] и его реализацией `sh` (Bourne SHell), что порой вызывает трудности в освоении. По этому в контейнер был добавлен [bash][] (Bourne Again SHell) для большего удобства\n* Контейнер укомплектован статичными версиями утилит, т.е. утилитами которые не имеют динамических зависимостей к библиотекам, благодаря чему удалось сохранить базовый scratch образ. А именно это:\n  * Bash - \u003chttps://github.com/robxu9/bash-static\u003e\n  * OpenSSL - \u003chttps://github.com/ep76/docker-openssl-static\u003e\n  * Curl - \u003chttps://github.com/moparisthebest/static-curl\u003e\n* Довольно частый случай, когда необходимо обратится в какой нибудь API и получить или отправить данные, при этом необходимо удобство в работе с JSON структурами. По этому в образ по умолчанию добавлен знакомый всем [curl][] и [jq][]\n\n## Образы контейнера\n\nСуществует 3 версии контейнера, стандартный, slim и extra.\nСтандартный образ имеет тег latest\n, а альтернативные версии `slim-latest` и `extra-latest`\nсоответственно.\n\nТакже образы доступны из трёх реестров контейнеров:\n* [ghcr.io/woozymasta/pkci][ghcr]  \n  `latest`, `slim-latest`, `extra-latest`\n* [quay.io/woozymasta/pkci][quay]  \n  `latest`, `slim-latest`, `extra-latest`\n* [docker.io/woozymasta/pkci][docker]  \n  `latest`, `slim-latest`, `extra-latest`\n\n### Размер образов\n\n* **pkci:slim** — `19M`\n* **pkci:normal** — `84M`\n* **pkci:extra** — `164M`\n\n## Важно знать\n\n\u003e ⚠️ **Важно**  \n\u003e Ознакомьтесь с этим разделом перед началом использования\n\n### UPX\n\nДля сжатия бинарных файлов в проекте используется [UPX][], это позволяет сократить размер образов в 2.5 раза, но теоретически может помешать вам, по причинам:\n\n- могут быть окружения, в которых самораспаковывающиеся сжатые исполняемые файлы запрещены\n- UPX не поддерживает некоторые платформы\n- есть очень небольшая вероятность того, что сжатый двоичный файл может иметь некоторую форму ошибки, связанной со сжатием\n\n### Bash и утилиты\n\nВ контейнере используется набор утилит из [busybox][] и [bash][] — это не тоже самое, что и [GNU core utilities][coreutils], будьте внимательны при написании скриптов, поведение или параметры привычных утилит таких как `grep`, `sed`, `readlink` и подобных может отличатся от того, что имеется в вашей системе.\n\n### Shebang\n\nСтарайтесь не использовать стандартный [shebang][] (к примеру `#!/usr/bin/env bash`) или запускать сценарии через интерпретатор по стандартному пути (к примеру `/bin/bash script.sh`).\n\nВ контейнере для простоты и удобства существуют символьные ссылки:\n\n  * `/bin/sh` → `/kaniko/bin/sh`\n  * `/bin/bash` → `/kaniko/bin/bash`\n  * `/usr/bin/env` → `/kaniko/bin/env`\n\nНо они размещены за границами исключений, и при выполнении очистки окружения (`--cleanup`) будут удалены. Так как это стандартные системные каталоги, мы не можем исключать их глобально, так как это может нарушить целостность и качество сборки в некоторых случаях.\n\nПросто примите это как правило и используйте shebang вида `#!/kaniko/bin/bash` или вызывайте интерпретатор по пути `/kaniko/bin/bash script.sh`\n\n### Path\n\nПеременная окружения `PATH` по умолчанию установлена в значение `/usr/local/bin:/kaniko/bin:/kaniko`. При этом каталог `/usr/local/bin` не существует в образе, по умолчанию все бинарные файлы будут использоваться из `/kaniko/bin` и `/kaniko` пока не появится `/usr/local/bin`\n\n### Executor\n\nПо умолчанию в стандартном образе бинарный файл kaniko называется `executor` и расположен по пути `/kaniko/executor`. Что бы не нарушать совместимость, это сохранено как есть, но для удобства также создана символическая ссылка `/kaniko/bin/kaniko` ссылающаяся на `/kaniko/executor`\n\n### Docker credential helpers\n\n* [docker-credential-acr-env][]\n* [docker-credential-gcr][]\n* [docker-credential-ecr-login][]\n\nЭти утилиты используются тех же версий и с тем же наименованием как в составе оригинального образа kaniko. Сделано это для соблюдения обратной совместимости, но их расположение перемещено в общий каталог бинарных файлов `/kaniko/bin`. По этому будьте осторожны, вызывайте их по новому абсолютному пути или используйте просто имя для получения их из `$PATH`\n\n* `/kaniko/docker-credential-acr-env`\n  → `/kaniko/docker-credential-acr-env` или `docker-credential-acr-env`\n* `/kaniko/docker-credential-gcr`\n  → `/kaniko/docker-credential-gcr` или `docker-credential-gcr`\n* `/kaniko/docker-credential-ecr-login`\n  → `/kaniko/docker-credential-ecr-login` или `docker-credential-ecr-login`\n\n### Trivy\n\n\u003e ℹ️ **Информация**  \n\u003e Только для `extra` редакции образа. Только в нем используется [trivy][]\n\nКаталог `/contrib` перемещен в `/kaniko/contrib`, по этому при использовании шаблона для формирования отчета указывайте абсолютный путь к файлу, к примеру `/kaniko/contrib/junit.tpl`\n\nКаталог для кеширования также перемещен в `/kaniko/.cache` и установлена переменная окружения `TRIVY_CACHE_DIR=/kaniko/.cache`\n\nОбраз не имеет в себе встроенной [базы уязвимостей][trivy-db] для [trivy][], по этому для больших проектов или команд следует задуматься о развертывании отдельного [сервера][trivy-server] Trivy в общей сети со сборочными агентами или собирать по расписанию (раз в 6-12 часов) образ с дополнительным слоем хранящим базу, [подробнее здесь][trivy-air-gap]\n\n## Как это использовать\n\nОбраз контейнера поставляется в трех редакциях `slim`, `normal` и `extra` в виду того, что предполагается три основных сценария применения.\n\nКонечно же в вашем случае это может быть абсолютно свой уникальный сценарий который решает именно ваши задачи.\n\n### Slim редакция\n\nЭто легковесная версия образа, всего `19M`,\nучитывая то что сама [kaniko][] имеет размер около `34M`. Также здесь имеется еще набор утилит [busybox][], [bash][], [curl][], [jq][], [hadolint][] и [docker-pushrm][], которые привносят большую свободу для автоматизации накладывая при этом скоромный дополнительный объем к размеру образа.\nДа, именно `19M` против `34M` в оригинале, а всё это лагодаря [UPX][] сжатию бинарных файлов.\n\n![scheme-slim][]\n\n\u003e _Проверь, собери и задокументируй_\n\nДанная редакция подойдет для целей:\n\n* Реализовать сценарий автоматики на `bash`/`sh` с использованием утилит из комплекта [busybox]\n* Для работы с JSON и API предоставлены [curl] и [jq], при помощи которых вы можете удобно получить необходимую информацию, к примеру версию зависимости из github API и передать её как ARG в ваш `Dockerfile` не захламляя его лишней логикой или уведомить внешнюю систему о событии вызвав какой нибудь webhook или API запрос.\n* Перед сборкой проанализировать `Dockerfile` при помощи [hadolint][] и отправить отчет с статусом анализа при помощи [curl][] в какую нибудь внешнюю систему, к примеру [sonarqube][]\n* Естественно собрать и опубликовать образ контейнера при помощи [kaniko][], это наша исходная задача\n* И в завершении, после успешной публикации образа контейнера, хорошо будет обновить описание для него. Опубликуем `README.md` или подобный файл в поддерживаемый реестр контейнеров ([dockerhub][], [projectquay][], [quay][] и [harbor][]) при помощи [docker-pushrm][]\n\n\n### Normal редакция\n\nВ отличии от `slim` версии, размер этого образа уже имеет заметные `84M`. Данная в первую очередь редакция имеет набор утилит нацеленных на безопасность, утилиты [cosign][] и [notary-signer][notary] помогут вам [подписать][image signing] ваш образ, а [openssl][] это полноценная криптографическая библиотека которая поможет вам в решении многих задач криптографии.\n\n![scheme-normal][]\n\n\u003e _Шаблонизируй, проверь, собери, подпиши и задокументируй_\n\nДанная редакция подойдет для тех же целей, что и `slim` версия и дополнительно:\n\n* Утилита [crane][] позволит мутировать, анализировать образы и работать с уже опубликованными образами.\n* Для решения криптографических задач вы сможете использовать [cosign][], [notary-signer][notary] и [openssl][]\n* Вы сможете шаблонизировать ваши `Dockerfile` или markdown документы при помощи [templar][], который предоставляет Jinja2 подобный синтаксис\n* Используя утилиту [tokei][] вы сможете проанализировать размер вашего проекта, количество строк кода и комментариев по типам файлов и языкам программирования\n* Утилита [mdtohtml][] позволит вам конвертировать markdown документы в HTML. Это может пригодится к примеру перед публикацией вашего `README.md` написанном используя [GFM][] в реестр контейнеров [projectquay][] или [quay][] который поддерживает только [commonmark][], т.е. такие элементы как таблицы просто не будут отображаться корректно, но опубликовав HTML вы получите ожидаемый результат.\n* Для авторизации в [GCR][], [ACR][] и [ECR][] имеются соответствующие утилиты как и в оригинальном образе kaniko\n\n### Extra редакция\n\nРедакция `extra` — это самая прокачанная версия образа размером аж в `164M`. Да, этот образ действительно получился большой, на столько же большой как и его возможности, а именно это непрерывная интеграция с оркестраторами контейнеров на базе [kubernetes][] и безопасность размещаемых в нем ресурсов.\n\n![scheme-extra][]\n\n\u003e _Шаблонизируй, проверь, собери, подпиши, задокументируй,_\n\u003e _проанализируй и разверни_\n\nВ этой редакции есть всё что было в `normal` и `slim`, а еще:\n\n* Имеется [yq][] — процессор командной строки для работы с YAML, JSON и XML.\n* Для более серьезной шаблонизации проекта вы можете использовать [gomplate][]\n* При помощи [trivy][] вы можете просканировать итоговый собранный образ на наличие CVE, проанализировать git репозиторий проекта на утечку токенов или паролей или даже проверить конфигурацию вашего [kubernetes][] кластера.\n* Перед применением YAML манифестов, [kustomize][] и [helm][]-чартов в кластер [kubernetes][] вы можете предварительно проверить их при помощи утилит [kube-linter][] и [kubesec][]\n* Для доставки приложений в кластер имеется как уже знакомые всем [kubectl][] и [helm][], так и более универсальные инструменты [jsonnet-bundler][] и [tanka][] для описания конфигурации приложений при помощи [jsonnet][]\n\n## Компоненты контейнеров\n\nSlim | Normal _(+Slim)_ | Extra _(+Normal)_\n|-------------------------|-------------------------|-------------------------|\n[kaniko][] `1.8.1` | [cosign][] `1.9.0` | [yq][] `4.25.2`\n[busybox][] `1.34.1` | [notary][] `0.7.0` | [gomplate][] `3.11.1`\n[bash][] `5.1.016-1.2.3` | [openssl][] `3.0.3` | [trivy][] `0.29.2`\n[curl][] `7.83.1` | [crane][] `0.9.0` | [kube-linter][] `0.3.0`\n[jq][] `1.6` | [mdtohtml][] `latest` | [kubesec] `2.11.4`\n[hadolint][] `2.10.0` | [templar][] `0.5.1` | [kubectl][] `1.24.1`\n[docker-pushrm][] `1.8.1` | [tokei][] `12.1.2` | [helm][] `3.9.0`\nУтилиты | [docker-credential-acr-env][]\u003cbr\u003e[docker-credential-gcr][]\u003cbr\u003e[docker-credential-ecr-login][] | [jsonnet-bundler][] `0.5.1`\n\u0026nbsp; | \u0026nbsp; | [tanka][] `0.22.1`\n\n\n\u003c!-- links --\u003e\n\n\u003c!-- assets --\u003e\n[logo]: ./assets/logo.png \"PKCI Logo\"\n[scheme]: ./assets/scheme.png \"PKCI editions scheme\"\n[scheme-slim]: assets/pkci-slim.png \"PKCI slim scheme\"\n[scheme-normal]: assets/pkci-normal.png \"PKCI normal scheme\"\n[scheme-extra]: assets/pkci-extra.png \"PKCI extra scheme\"\n\n\u003c!-- image --\u003e\n[ghcr]: https://github.com/WoozyMasta/pkci/pkgs/container/pkci\n[quay]: https://quay.io/repository/woozymasta/pkci\n[docker]: https://hub.docker.com/r/woozymasta/pkci\n\n\u003c!-- slim --\u003e\n[kaniko]: https://github.com/GoogleContainerTools/kaniko \"Build Container Images In Kubernetes\"\n[busybox]: https://busybox.net \"BusyBox combines tiny versions of many common UNIX utilities into a single small executable.\"\n[bash]: https://www.gnu.org/software/bash/ \"Bash is the GNU Project's shell—the Bourne Again SHell\"\n[hadolint]: https://github.com/hadolint/hadolint \"Dockerfile linter, validate inline bash, written in Haskell \"\n[docker-pushrm]: https://github.com/christian-korneck/docker-pushrm \"Docker plugin to update container repo docs \"\n[jq]: https://stedolan.github.io/jq/ \"jq is a lightweight and flexible command-line JSON processor\"\n[curl]: https://curl.se \"command line tool and library for transferring data with URLs\"\n\n\u003c!-- normal --\u003e\n[cosign]: https://github.com/sigstore/cosign \"Container Signing, Verification and Storage in an OCI registry\"\n[notary]: https://github.com/notaryproject/notary \"Notary signer, which stores private keys for and signs metadata for the Notary server\"\n[openssl]: https://www.openssl.org \"full-featured toolkit for general-purpose cryptography and secure communication\"\n[crane]: https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md \"Crane is a tool for managing container images\"\n[mdtohtml]: https://github.com/gomarkdown/mdtohtml \"Command-line tool to convert markdown\"\n[templar]: https://github.com/proctorlabs/templar/ \"Dynamic rust templating framework\"\n[tokei]: https://github.com/XAMPPRocky/tokei \"Tokei is a program that displays LOC statistics about your code.\"\n[docker-credential-acr-env]: https://github.com/chrismellard/docker-credential-acr-env \"Azure Container Registry credential helpers\"\n[docker-credential-gcr]: https://github.com/GoogleCloudPlatform/docker-credential-gcr \"Google Container Registry credential helpers\"\n[docker-credential-ecr-login]: https://github.com/awslabs/amazon-ecr-credential-helper \"Amazon Elastic Container Registry credential helpers\"\n\n\u003c!-- extra --\u003e\n[yq]: https://github.com/mikefarah/yq \"yq is a portable command-line YAML, JSON and XML processor \"\n[trivy]: https://github.com/aquasecurity/trivy \"Scanner for vulnerabilities in container images\"\n[gomplate]: https://docs.gomplate.ca \"gomplate is a template renderer tool\"\n[kubectl]: https://github.com/kubernetes/kubectl \"Kubernetes command line tool\"\n[helm]: https://github.com/helm/helm \"The package manager for Kubernetes\"\n[jsonnet-bundler]: https://github.com/jsonnet-bundler/jsonnet-bundler \"The jsonnet-bundler is a package manager for Jsonnet\"\n[tanka]: https://github.com/grafana/tanka \"Flexible, reusable and concise configuration for Kubernetes\"\n[kube-linter]: https://github.com/stackrox/kube-linter \"KubeLinter is a static analysis tool that checks Kubernetes YAML files and Helm charts\"\n[kubesec]: https://github.com/controlplaneio/kubesec \"Security risk analysis for Kubernetes resources \"\n\n\u003c!-- other --\u003e\n[shebang]: https://en.wikipedia.org/wiki/Shebang_(Unix) \"shebang is the character sequence consisting of the characters number sign and exclamation mark (#!) at the beginning of a script\"\n[sonarqube]: https://www.sonarqube.org \"Code Quality and Code Security platform\"\n[dockerhub]: https://hub.docker.com \"Docker Hub is the world's largest library and community for container images\"\n[projectquay]: https://www.projectquay.io \"Project Quay builds, stores, and distributes your container images\"\n[quay]: https://quay.io/ \"Quay builds, stores, and distributes your container images\"\n[harbor]: https://goharbor.io \"Harbor is an open source registry that secures artifacts with policies and role-based access control\"\n[image signing]: https://dlorenc.medium.com/notary-v2-and-cosign-b816658f044d\n[GFM]: https://github.github.com/gfm/ \"GitHub Flavored Markdown\"\n[commonmark]: https://commonmark.org \"A strongly defined, highly compatible specification of Markdown\"\n[kubernetes]: https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/ \"Kubernetes is a portable, extensible, open source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation.\"\n[GCR]: https://cloud.google.com/container-registry \"Google Container Registry\"\n[ACR]: https://docs.microsoft.com/azure/container-registry \"Azure Container Registry\"\n[ECR]: https://aws.amazon.com/ecr/ \"Amazon Elastic Container Registry\"\n[trivy-server]: https://aquasecurity.github.io/trivy/latest/docs/references/modes/client-server/\n[trivy-air-gap]: https://aquasecurity.github.io/trivy/latest/docs/advanced/air-gap/\n[trivy-db]: https://aquasecurity.github.io/trivy/latest/docs/vulnerability/examples/db/\n[kustomize]: https://kustomize.io \"Kubernetes native configuration management \"\n[jsonnet]: https://jsonnet.org \"A data templating language for app and tool developers\"\n[coreutils]: https://www.gnu.org/software/coreutils/ \"The GNU Core Utilities are the basic file, shell and text manipulation utilities of the GNU operating system. \"\n[UPX]: https://github.com/upx/upx \"the Ultimate Packer for eXecutables\"\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwoozymasta%2Fpkci","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwoozymasta%2Fpkci","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwoozymasta%2Fpkci/lists"}