-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
33 changed files
with
2,487 additions
and
1,756 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -47,12 +47,52 @@ | |
} | ||
] | ||
} | ||
} | ||
}, | ||
"requirements": [ | ||
{ | ||
"ExistsAny": [ | ||
"/usr/bin/upx", | ||
"~/.local/bin/upx" | ||
] | ||
} | ||
] | ||
} | ||
``` | ||
|
||
В составе Реестров каждое Действие и каждый Пайплайн являются значениями в словаре с ключом `info` (например, `"[email protected]": { ... }`). Таким образом их можно быстро редактировать, выводить на экран содержимое, добавлять в Пайплайны и проекты. | ||
|
||
Для каждого Действия в составе Пайплайна можно назначить список требований `requirements`. Они будут проверяться перед каждым запуском Пайплайнов, и если хотя бы одно требование не будет удовлетворено, Пайплайн не будет выполнен. Требование можно задать тремя способами: | ||
|
||
```json,ignore | ||
[ | ||
{ | ||
// если один из этих путей будет найден, требование будет считаться удовлетворённым | ||
"ExistsAny": [ | ||
"path-1", | ||
"path-2" | ||
] | ||
}, | ||
{ | ||
// если данный путь существует, требование считается удовлетворённым | ||
"Exists": "path" | ||
}, | ||
{ | ||
// если данная проверка будет пройдена, требование будет считаться удовлетворённым (подробности см. ниже - Действие `Check`) | ||
"CheckSuccess": { | ||
"command": { | ||
"bash_c": "/usr/bin/python -V", | ||
"ignore_fails": true, | ||
"show_success_output": false, | ||
"show_bash_c": false, | ||
"only_when_fresh": false | ||
}, | ||
"success_when_found": "Python 3.", | ||
"success_when_not_found": null | ||
} | ||
} | ||
] | ||
``` | ||
|
||
Существует 3 категории основных Действий и 7 дополнительных видов Действий: | ||
|
||
1. Действия сборки (`PreBuild`, `Build`, `PostBuild` и `Test`) | ||
|
@@ -63,7 +103,7 @@ | |
6. Действие принудительной синхронизации готовых артефактов `ForceArtifactsEnplace` | ||
7. Действие с кастомной командой `Custom` | ||
8. Действие проверки вывода кастомной команды `Check` | ||
9. Действие добавления контента из хранилища Деплойера `UseFromStorage` | ||
9. Действия добавления контента в хранилище Деплойера `AddToStorage` и использования этого контента `UseFromStorage` | ||
10. Действие применения патча `Patch` | ||
|
||
Основополагающим является концепт кастомной команды - команды для оболочки терминала. Действия `Custom`, `Observe` и три основные категории Действий содержат внутри одну или больше кастомных команд. | ||
|
@@ -121,7 +161,7 @@ | |
} | ||
``` | ||
|
||
`replacements` содержит список замен плейсхолдеров в команде на указанные артефакты или переменные. Следует заметить, что одна и та же команда может выполняться несколько раз для разных наборов переменных, даже если указана в Действии один раз: | ||
`replacements` содержит список замен плейсхолдеров в команде на указанные артефакты или [переменные](#other-entities). Следует заметить, что одна и та же команда может выполняться несколько раз для разных наборов переменных, даже если указана в Действии один раз: | ||
|
||
```json | ||
{ | ||
|
@@ -301,7 +341,7 @@ | |
} | ||
``` | ||
|
||
#### 1.5. Действие добавления контента `UseFromStorage` и действие применения патча `Patch` | ||
#### 1.5. Действия добавления контента `AddToStorage`, использования контента `UseFromStorage` и применения патча `Patch` | ||
|
||
Часто проекты могут быть достаточно шаблонными, чтобы одни и те же файлы копировались между проектами, но не изменялись и требовались только при сборке или развёртывании. Такие файлы могут быть расположены в специальной папке с сохранением относительных путей и добавлены в хранилище Деплойера: | ||
|
||
|
@@ -325,6 +365,28 @@ deployer new content | |
|
||
В итоге при выполнении Пайплайна в папку сборки будет добавляться нужный вам контент. | ||
|
||
Раз за разом вы начнёте замечать, что некоторые проекты переиспользуются в других проектах как зависимости, и их необходимо где-то публиковать. Для этого как нельзя лучше подходят репозитории пакетов, но если вы не хотите публиковать свой проект, то можете добавлять его в хранилище Деплойера в качестве контента. Более того, добавлять его можно автоматически - при помощи Действия `AddToStorage`: | ||
|
||
```json | ||
{ | ||
"title": "Add content", | ||
"desc": "", | ||
"info": "[email protected]", | ||
"tags": [], | ||
"action": { | ||
"AddToStorage": { | ||
"short_name": "my-project", | ||
"auto_version_rule": { | ||
"plain_file": "file-with-current-version.txt" | ||
} | ||
} | ||
} | ||
} | ||
``` | ||
|
||
- `short_name` - строковое обозначение контента, которое будет использовано для размещения в хранилище и каждый раз при использовании | ||
- `auto_version_rule` - способ автоматического определения версии контента (либо `plain_file` - файл, в котором будет указана только версия и больше ничего, либо `cmd_stdout` - команда, которая выведет на экран только версию и больше ничего) | ||
|
||
Однако иногда файл нужно каким-то образом редактировать - и не столько даже добавляемый контент из хранилища Деплойера, сколько, например, различные файлы в зависимостях сборки, например, вручную делать форки библиотек Python для добавления нужной функциональности и т.д. и т.п. Причём, как правило, хочется делать это без создания форков и синхронизации изменений с `main`-репозиторием! Одними патчами `git`'а не обойтись. | ||
|
||
Для этого Деплойер использует для патчей библиотеку [`smart-patcher`](https://github.com/impulse-sw/smart-patcher). Такие патчи позволяют изменять исходные тексты, сложные документы и даже бинарные файлы, позволяя искать необходимые включения в содержимом на базе отсеивающих правил и даже используя скрипты на таких языках, как Python, Lua и Rhai. Например, в репозитории `smart-patcher` есть пример с патчем для документа Microsoft Word - и много других примеров. | ||
|
@@ -593,6 +655,60 @@ deployer new content | |
|
||
Помимо этого, если ваши Пайплайны должны управлять конфликтующими версиями кэша (например, при сборке проекта под разные целевые архитектуры), то вы можете указать эксклюзивную метку сборки в поле `exclusive_exec_tag`. Например, укажите `x86_64` при добавлении Пайплайна сборки для одной архитектуры, а `aarch64` - для другой. Тогда Пайплайны будут собираться в разных папках, и информация о кэше будет сохранена в обоих случаях. | ||
|
||
### <a id="other-entities">3. Другие сущности</a> | ||
|
||
Одной из самых важных сущностей являются переменные. Они одновременно являются и хранителями ваших секретов, и теми самыми динамическими сущностями, которые могут поменять исход выполнения Пайплайна. Пример простой переменной: | ||
|
||
```json | ||
{ | ||
"title": "deployer artifact location", | ||
"is_secret": false, | ||
"value": { | ||
"Plain": "target/release/deployer" | ||
} | ||
} | ||
``` | ||
|
||
- `title` - название переменной (то, как она будет отображаться в TUI) | ||
- `is_secret` - является ли переменная секретом (если является, то команда, которая её содержит, не будет показана на экране) | ||
- `value` - само значение переменной или же информация о том, откуда и как это значение брать | ||
|
||
Есть три поддерживаемых сейчас типа переменных: | ||
|
||
1. `Plain` - содержимое строки и есть переменная | ||
2. `FromEnvFile` - переменная будет взята из указанного `env`-файла с указанным ключом | ||
3. `FromHCVaultKv2` - переменная будет взята из HashiCorp Vault KV2-хранилища с указанными `mount_path` и `secret_path` | ||
|
||
Примеры: | ||
|
||
```json | ||
{ | ||
"title": "Grafana token", | ||
"is_secret": false, | ||
"value": { | ||
"FromEnvFile": { | ||
"env_file_path": ".env", | ||
"key": "GRAFANA_TOKEN" | ||
} | ||
} | ||
} | ||
``` | ||
|
||
```json | ||
{ | ||
"title": "target/release/deployer", | ||
"is_secret": false, | ||
"value": { | ||
"FromHCVaultKv2": { | ||
"mount_path": "The mount path where your KV2 secrets engine is mounted", | ||
"secret_path": "Path to your secret" | ||
} | ||
} | ||
} | ||
``` | ||
|
||
Заметьте, что вы должны перед использованием `FromHCVaultKv2`-переменных указать две переменные окружения: `DEPLOYER_VAULT_ADDR` (URL-адрес Vault) и `DEPLOYER_VAULT_TOKEN` (токен Vault). | ||
|
||
## Описание утилиты CLI | ||
|
||
Деплойер, в первую очередь, - CLI-утилита. По любой команде Деплойера можно посмотреть справку, указав опцию `-h`. Приведём примеры самых распространённых команд: | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# `deployer`'s TODO list | ||
|
||
- [ ] make `pub(crate)` methods `pub` (for library and server) | ||
- [ ] make `deployer docker-build` command for running build-like actions inside Docker | ||
- [ ] make `remote` module to allow remote pipeline execution |
Oops, something went wrong.