Pređi na glavni sadržaj

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.

Executorrunner.executor.typeGde se zadatak izvršavaIzdanje
Lokalnilocal (podrazumevano)Podređeni proces na hostu runnera, sa datotekama, alatima i PATH runnera.Community
DockerdockerNovi kontejner na Docker daemonu, uklanja se posle zadatka.Pro
Kubernetesk8sNovi 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 jeKoristite
Alati instalirani na jednoj mašini, pristup njenim datotekama, izlazi workflow-aLokalni
Čisto okruženje za svaki zadatak, različiti alati po šablonu, na jednom ili nekoliko hostovaDocker
Zadaci raspoređeni po klasteru, Kubernetes RBAC i Secrets, bez Docker socketaKubernetes

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.

informacija

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:

  1. 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.
  2. Kloniranje. Kratkotrajni pomoćni (helper) kontejner klonira repozitorijum u /workspace/repo (git clone --depth 1 grane zadatka).
  3. Izvršavanje. Build kontejner se pokreće u /workspace/repo i pokreće aplikaciju: ansible-playbook, terraform/tofu/terragrunt, bash, python3, powershell ili binarni fajl prilagođene aplikacije. Njegov izlazni kod je rezultat zadatka.
  4. Log. Izlaz oba kontejnera se prenosi u log zadatka dok rade.
  5. Čišćenje. Kontejneri, volumeni, Secrets i ConfigMaps zadatka se uklanjaju, bez obzira na to da li je zadatak uspeo, nije uspeo ili je zaustavljen.
KorakDockerKubernetes
Radni prostorImenovani volumen semaphore-workspace-<task>-<random>emptyDir volumen Poda
TajneImenovani volumen semaphore-secrets-<task>-<random>, montiran samo za čitanjeJedan Secret ili ConfigMap po vrsti, montiran samo za čitanje
KloniranjeKontejner semaphore-job-<task>-<random>-cloneInit kontejner git-clone
IzvršavanjeKontejner semaphore-job-<task>-<random>-buildKontejner build Poda semaphore-job-<task>-<random>
Dugme Stopdocker stop sa cleanup_grace_seconds, zatim uklanjanjePod 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​

PutanjaSadržaj
/workspaceRadni prostor u koji se može pisati; ujedno i HOME zadatka.
/workspace/repoKlonirani repozitorijum; radni direktorijum.
/secrets/ssh/<key id>/id_rsaPrivatni 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.jsonDodatne promenljive iz Variable Group plus semaphore_vars, prosleđuju se kao --extra-vars @<path>.
/secrets/inventory/inventory.cfg ili inventory.ymlStatič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:

ImagePodrazumevanoKoristi se zaPotrebno
Build imagesemaphoreui/job:latestPokretanje aplikacije.sh, binarni fajl aplikacije u PATH; za SSH ključeve ssh-agent, ssh-add, setsid.
Helper imagesemaphoreui/helper:latestKloniranje 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:

  • /workspace postoji i u njega može da piše korisnik pod kojim se kontejner pokreće.
  • U /etc/passwd grupa 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 potvrduUključ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 LocalRadni 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 hostaKoristite lokalni executor.
Git istorija pre poslednjeg commitaKlon 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.