Definisce un'espressione logica che determina quali agenti possano eseguire
compilazioni di questo progetto. Quest'espressione, se testata sul nome e
sulle etichette di ogni agente disponibile, sarà vera o falsa.
Se l'espressione viene valutata come vera, allora a tale agente sarà
consentito eseguire compilazioni di questo progetto.
Se questo progetto deve essere sempre compilato su un agente specifico, o sul
master Jenkins, è possibile rispettivamente immettere il nome dell'agente, o
master
.
Ciò nonostante, in generale si dovrebbe evitare di utilizzare il nome
di un agente in questo campo e si dovrebbero preferibilmente specificare le
etichette di un agente. Come documentato nella pagina di configurazione
di ogni agente e nella pagina Configura sistema del master, le
etichette possono essere utilizzate per rappresentare il sistema operativo
su cui è in esecuzione l'agente, la sua architettura della CPU, o altre
caratteristiche.
L'utilizzo delle etichette elimina la necessità di riconfigurare l'espressione
per le etichette immessa in questo campo ogni volta che si aggiungono,
rimuovono o rinominano agenti.
Un'espressione etichetta può essere semplice, come una singola etichetta
o un nome agente, ad esempio android-builder
, o
linux-machine-42
.
È anche possibile utilizzare vari operatori per creare espressioni
più complesse.
Operatori supportati
Sono supportati i seguenti operatori in ordine di priorità decrescente:
- (espressione)
-
parentesi — utilizzate per definire esplicitamente l'associatività di un'espressione
- !espressione
-
NOT — negazione; il risultato di espressione non deve essere vero
- a && b
-
AND — entrambe le espressioni a e b devono essere vere
- a || b
-
OR — una delle espressioni a o b può essere vera
- a -> b
-
operatore "implica" — equivalente a !a || b.
Ad esempio, si può pensare a windows -> x64 come a "se viene
utilizzato un agente Windows, allora quell'agente deve essere a 64
bit", consentendo comunque a questo progetto di essere eseguito su un
qualunque agente senza l'etichetta windows,
indipendentemente dal fatto che abbiano anche un'etichetta x64
- a <-> b
-
operatore "se e solo se" — equivalente a a && b ||
!a && !b
Ad esempio, si può pensare a windows <-> dc2 come a "se viene
utilizzato un agente Windows, allora quell'agente deve essere nel
datacenter 2, ma se non viene utilizzato un agente Windows allora
non deve essere nel datacenter 2"
Note
-
Tutti gli operatori sono associativi a sinistra, ossia a -> b -> c
è equivalente a (a -> b) -> c.
-
Le etichette o i nomi degli agenti possono essere posti fra virgolette
doppie se contengono caratteri che entrerebbero in conflitto con la
sintassi degli operatori.
Ad esempio, "osx (10.11)" || "Windows Server".
-
Le espressioni possono essere scritte senza spazi bianchi, ma è
raccomandato includerli per una maggiore leggibilità; Jenkins ignorerà
gli spazi bianchi durante la valutazione delle espressioni.
-
La ricerca di corrispondenze fra etichette o nomi di agenti con caratteri
jolly o espressioni regolari non è supportata.
-
Un'espressione vuota sarà sempre valutata come vero e come
corrispondente a tutti gli agenti.
Esempi
- master
- Le compilazioni di questo progetto possono essere eseguite solo sul master Jenkins
-
- linux-machine-42
-
Le compilazioni di questo progetto possono essere eseguite solo sull'agente
con nome linux-machine-42 (o su una qualsiasi macchina che abbia
l'etichetta linux-machine-42)
- windows && jdk9
-
Le compilazioni di questo progetto possono essere eseguite solo su un
agente Windows che abbia installato il Java Development Kit, versione 9
(assumendo che agli agenti che abbiano il JDK 9 installato sia stata
assegnata l'etichetta jdk9)
- postgres && !vm && (linux || freebsd)
-
Le compilazioni di questo progetto possono essere eseguite solo su un
agente Linux o FreeBSD, a condizione che non siano una macchina
virtuale e che abbiano PostgreSQL installato (assumendo che ogni agente
abbia le etichette appropriate — in particolare, ogni agente eseguito in
una macchina virtuale deve avere l'etichetta vm per far sì che
quest'esempio funzioni come previsto)