Definisce un'espressione logica che determina quali agenti possano eseguire
le compilazioni di questo progetto. Quest'espression, se testata con il
nome e le etichette di ogni agente disponibile, sarà valutata come
true o false. Se l'espressione viene valutata come true,
allora a tale agente sarà consentito eseguire le compilazioni di questo
progetto.
Se questo progetto dovrebbe essere sempre compilato su un agente specifico,
o sul nodo master Jenkins, allora si dovrebbe immettere semplicemente,
rispettivamente, il nome dell'agente o master
.
Ciò nonostante, si dovrebbe generalmente evitare di usare il nome di
un agente in questo campo, preferendo le etichette di un agente.
Come documentato sulla pagina di configurazione di ogni agente e sulla
pagina Configura sistema del nodo master, è possibile utilizzare
etichette per rappresentare il sistema operativo su cui è in esecuzione
l'agente, la sua architettura CPU o un qualunque numero di altre
caratteristiche.
L'utilizzo delle etichette fa venir meno la necessità di riconfigurare
l'espressione etichetta immessa in questo campo ogni volta che si aggiungono,
rimuovono o ridenominano agenti.
Un'espressione etichetta può essere semplicemente una singola
etichetta o nome agente, ad esempio
android-builder
o linux-machine-42
.
È possibile inoltre utilizzare svariati operatori per creare
espressioni più complesse.
Operatori supportati
Sono supportati i seguenti operatori in ordine di precedenza decrescente:
- (espressione)
-
parentesi — utilizzate per definire esplicitamente l'associatività
di un'espressione
- !espressione
-
NOT — negazione; il risultato di espressione non
dev'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 ad !a || b.
Ad esempio, windows -> x64 può essere interpretato come "se
viene utilizzato un agente Windows, allora tale agente deve
essere a 64 bit", consentendo comunque l'esecuzione su qualunque agente
che non abbia l'etichetta windows, a prescindere dal
fatto che abbia l'etichetta x64
- a <-> b
-
operatore "se e solo se" — equivalente a a && b ||
!a && !b
Ad esempio, windows <-> dc2 può essere interpretato come
"se viene utilizzato un agente Windows, allora tale agente deve
essere nel datacenter 2, ma se viene utilizzato un agente non Windows,
allora non deve essere nel datacenter 2"
Note
-
Tutti gli operatori sono associativi a sinistra, ossia
a -> b -> c è equivalente ad (a -> b) -> c.
-
Le etichette o i nomi degli agenti possono essere racchiusi da
virgolette doppie se contengono caratteri che andrebbero in conflitto con
la sintassi degli operatori.
Ad esempio, "osx (10.11)" || "Windows Server".
-
Le espressioni possono essere scritte senza spazi bianchi, ma includerli
è raccomandato per questioni di leggibilità; Jenkins ignorerà gli spazi
bianchi durante la valutazione delle espressioni.
-
La ricerca di corrispondenze fra etichette o nomi agenti con
espressioni con caratteri jolly o espressioni regolari non è supportata.
-
Un'espressione vuota verrà sempre valutata come true e
corrisponderà a tutti gli agenti.
Esempi
- master
-
Le compilazioni di questo progetto possono eseguite solo sul nodo
master di Jenkins
- linux-machine-42
-
Le compilazioni di questo progetto possono essere eseguite solo
sull'agente denominato linux-machine-42 (o su qualunque sistema
che abbia un'etichetta denominata linux-machine-42)
- windows && jdk9
-
Le compilazioni di questo progetto possono essere eseguite solo su un
qualunque agente Windows che abbia installata la versione 9 del Java
Development Kit (assumendo che agli agenti su cui sia installato JDK 9
sia stata assegnata l'etichetta jdk9)
- postgres && !vm && (linux || freebsd)
-
Le compilazioni di questo progetto possono essere eseguite solo su
qualunque agente Linux o FreeBSD fintantoché non siano una
macchina virtuale e abbiano PostgreSQL installato (assumendo che ogni
agente abbia le etichette appropriate — in particolare, ogni agente in
esecuzione in una macchina virtuale deve avere l'etichetta vm
affinché quest'esempio funzioni come atteso)