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

`built-in`
  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)