Executori
Executor određuje gde runner pokreće proces zadatka. Runner i dalje proverava server, prima zadatak i šalje log nazad; menja se samo mesto na kome se pokreće Ansible, Terraform ili shell proces.
| Executor | runner.executor.type | Gde se zadatak izvršava | Izdanje |
|---|---|---|---|
| Lokalni | local (podrazumevano) | Podređeni proces na hostu runnera, sa datotekama, alatima i PATH runnera. | Community |
| Docker | docker | Novi kontejner na Docker daemonu, uklanja se posle zadatka. | Pro |
| Kubernetes | k8s | Novi Pod u Kubernetes namespace-u, briše se posle zadatka. | Enterprise |
Executor je podešavanje runnera, a ne servera ili šablona. Sam Semaphore server uvek izvršava zadatke lokalno; da biste izvršavali zadatke u kontejnerima, pokrenite runner i usmerite šablone na njega pomoću oznake runnera.
Izbor executora
| Potrebno vam je | Koristite |
|---|---|
| Alati instalirani na jednoj mašini, pristup njenim datotekama, izlazi workflow-a | Lokalni |
| Čisto okruženje za svaki zadatak, različiti alati po šablonu, na jednom ili nekoliko hostova | Docker |
| Zadaci raspoređeni po klasteru, Kubernetes RBAC i Secrets, bez Docker socketa | Kubernetes |
Podešavanje executora
Dodajte blok executor u sekciju runner konfiguracione datoteke runnera:
{
"web_host": "https://semaphore.example.com",
"runner": {
"token_file": "/var/lib/semaphore/runner_token.txt",
"executor": {
"type": "docker"
}
}
}
Ili postavite promenljivu okruženja:
SEMAPHORE_RUNNER_EXECUTOR_TYPE=docker # or k8s
Svaka opcija ima promenljivu okruženja; kompletne liste su na stranicama Docker i Kubernetes. Restartujte runner posle promene executora.
Kontejnerski executori su deo Pro verzije runnera. Koristite image
semaphoreui/runner ili zvanični binarni fajl semaphore. Image
semaphoreui/runner-community je izgrađen bez njih i pri pokretanju beleži
docker executor is only available in the proprietary build.
Kako se izvršava kontejnerski zadatak
Oba kontejnerska executora izvršavaju zadatak na isti način:
- Priprema. Runner kreira zajednički radni prostor i postavlja tajne zadatka (SSH ključeve, vault lozinke, dodatne promenljive, statički inventar) tamo gde ih kontejneri mogu pročitati.
- Kloniranje. Kratkotrajni pomoćni (helper) kontejner klonira repozitorijum u
/workspace/repo(git clone --depth 1grane zadatka). - Izvršavanje. Build kontejner se pokreće u
/workspace/repoi pokreće aplikaciju:ansible-playbook,terraform/tofu/terragrunt,bash,python3,powershellili binarni fajl prilagođene aplikacije. Njegov izlazni kod je rezultat zadatka. - Log. Izlaz oba kontejnera se prenosi u log zadatka dok rade.
- Čišćenje. Kontejneri, volumeni, Secrets i ConfigMaps zadatka se uklanjaju, bez obzira na to da li je zadatak uspeo, nije uspeo ili je zaustavljen.
| Korak | Docker | Kubernetes |
|---|---|---|
| Radni prostor | Imenovani volumen semaphore-workspace-<task>-<random> | emptyDir volumen Poda |
| Tajne | Imenovani volumen semaphore-secrets-<task>-<random>, montiran samo za čitanje | Jedan Secret ili ConfigMap po vrsti, montiran samo za čitanje |
| Kloniranje | Kontejner semaphore-job-<task>-<random>-clone | Init kontejner git-clone |
| Izvršavanje | Kontejner semaphore-job-<task>-<random>-build | Kontejner build Poda semaphore-job-<task>-<random> |
| Dugme Stop | docker stop sa cleanup_grace_seconds, zatim uklanjanje | Pod se briše sa cleanup_grace_seconds |
Zadatak zaustavljen iz korisničkog interfejsa završava se statusom Stopped, kao i kod lokalnog executora.
Unutar build kontejnera
| Putanja | Sadržaj |
|---|---|
/workspace | Radni prostor u koji se može pisati; ujedno i HOME zadatka. |
/workspace/repo | Klonirani repozitorijum; radni direktorijum. |
/secrets/ssh/<key id>/id_rsa | Privatni SSH ključ repozitorijuma ili inventara. Učitava se u ssh-agent pre pokretanja aplikacije. |
/secrets/vault/<name> | Ansible vault lozinka, prosleđuje se kao --vault-id=<name>@<path>. |
/secrets/extra-vars/values.json | Dodatne promenljive iz Variable Group plus semaphore_vars, prosleđuju se kao --extra-vars @<path>. |
/secrets/inventory/inventory.cfg ili inventory.yml | Statički inventar sačuvan u Semaphore-u. Inventari tipa File se čitaju iz repozitorijuma. |
Kontejner dobija fiksan skup promenljivih okruženja, navedenih u
Promenljive okruženja zadatka.
Sopstveni env_vars, forwarded_env_vars, PATH i putanje apps.* runnera se ne
prosleđuju u kontejner.
Image-i
U svakom zadatku učestvuju dva image-a:
| Image | Podrazumevano | Koristi se za | Potrebno |
|---|---|---|---|
| Build image | semaphoreui/job:latest | Pokretanje aplikacije. | sh, binarni fajl aplikacije u PATH; za SSH ključeve ssh-agent, ssh-add, setsid. |
| Helper image | semaphoreui/helper:latest | Kloniranje repozitorijuma (Docker ga koristi i za popunjavanje volumena tajni). | sh, git, ssh-agent, ssh-add. |
semaphoreui/job je Debian sa Ansible 9 (ansible-core 2.16–2.17), Python 3,
OpenSSH, Git, Terraform, OpenTofu i Terragrunt. Pokreće se kao korisnik nobody, grupa 0.
Build image se podešava po runneru (image) i može se zameniti po šablonu poljem
Executor image, pogledajte
Executor image.
Helper image se podešava samo po runneru.
Izgradnja prilagođenog image-a
Proširite semaphoreui/job kada su vašim zadacima potrebne dodatne Ansible kolekcije,
Python paketi ili alati. Kontejnerski executori ne instaliraju requirements.yml iz
repozitorijuma, pa kolekcije i role ugradite u image:
FROM semaphoreui/job:latest
USER root
RUN pip3 install --no-cache-dir --break-system-packages hvac boto3 \
&& ansible-galaxy collection install -p /usr/share/ansible/collections \
community.general amazon.aws
USER nobody:0
docker build -t registry.example.com/semaphore/job-aws:1.0 .
docker push registry.example.com/semaphore/job-aws:1.0
Ako image gradite od nule, zadržite ova svojstva semaphoreui/job:
/workspacepostoji i u njega može da piše korisnik pod kojim se kontejner pokreće.- U
/etc/passwdgrupa može da piše (chmod g=u /etc/passwd). Kontejner pokrenut sa nasumičnim UID-om (OpenShift) tada dobija unos u passwd, koji su potrebni OpenSSH-u i Git-u. - Image-u nije potreban poseban entrypoint: executor pokreće svoju skriptu pomoću
sh -c.
Ograničenja
U poređenju sa lokalnim executorom, kontejnerski executori trenutno:
| Nije podržano | Šta uraditi umesto toga |
|---|---|
| Kredencijali inventara tipa Login with password (SSH lozinka ili become lozinka) | Koristite SSH ključ. Zadatak sa takvim ključem ne uspeva sa inventory login_password authentication is not supported. |
| Terraform zadaci koji čekaju ručnu potvrdu | Uključite Auto approve u šablonu ili pokrećite samo plan zadatke. U suprotnom zadatak ne uspeva sa terraform manual approval is not supported. |
| Repozitorijumi tipa Local | Radni prostor ostaje prazan; koristite Git repozitorijum. |
Instaliranje requirements.yml (Galaxy role i kolekcije) | Ugradite ih u image. |
Izlazi workflow-a (SEMAPHORE_OUTPUTS_FILE) | Koristite lokalni executor za zadatke čije izlaze čita workflow. |
| Kredencijali po hostu iz konfiguracije hosta | Koristite lokalni executor. |
| Git istorija pre poslednjeg commita | Klon je plitak (--depth 1). |
SSH ključevi hostova se ne proveravaju: kloniranje prihvata nov ključ hosta, a Ansible
se pokreće sa ANSIBLE_HOST_KEY_CHECKING=False.
Povezane stranice
- Docker executor: podešavanje, konfiguracija, bezbednost, rešavanje problema.
- Kubernetes executor: RBAC, raspoređivanje runnera, konfiguracija, rešavanje problema.
- Runneri: registracija i pokretanje runnera.
- Opcije konfiguracije: sve opcije
runner.executor.*.