Risoluzione dei problemi
Il runner mostra l'errore 404
Come risolvere
Getting 401 error code from Runner
Problema di Gathering Facts per localhost
Il problema può verificarsi su Semaphore UI installato tramite Snap o Docker.
4:10:16 PM
TASK [Gathering Facts] *********************************************************
4:10:17 PM
fatal: [localhost]: FAILED! => changed=false
Perché succede
Per maggiori informazioni sull'uso di localhost in Ansible, leggere questo articolo: Implicit 'localhost'.
Ansible tenta di raccogliere i fact in locale, ma Ansible si trova in un container isolato e limitato che non lo consente.
Come risolvere
Esistono due modi:
- Disabilitare la raccolta dei fact:
- hosts: localhost
gather_facts: False
roles:
- ...
- Impostare esplicitamente il tipo di connessione su ssh:
[localhost]
127.0.0.1 ansible_connection=ssh ansible_ssh_user=your_localhost_user
panic: pq: SSL is not enabled on the server
Significa che il proprio Postgres non funziona tramite SSL.
Come risolvere
Aggiungere l'opzione sslmode=disable al file di configurazione:
"postgres": {
"host": "localhost",
"user": "postgres",
"pass": "pwd",
"name": "semaphore",
"options": {
"sslmode": "disable"
}
},
fatal: bad numeric config value '0' for 'GIT_TERMINAL_PROMPT': invalid unit
Significa che si sta tentando di accedere tramite HTTPS a un repository che richiede l'autenticazione.
Come risolvere
- Andare nella schermata Key Store.
- Creare una nuova chiave di tipo
Login with password. - Specificare il proprio login per GitHub/BitBucket/ecc.
- Specificare la password. Per GitHub/BitBucket non è possibile usare la password dell'account: è necessario usare un Personal Access Token (PAT) al suo posto. Maggiori informazioni qui.
- Dopo aver creato la chiave, andare nella schermata Repositories, trovare il proprio repository e specificare la chiave.
Il clone o il pull di Git fallisce a intermittenza
I log delle attività possono mostrare messaggi come Git pull failed (...), retrying in 2s, seguiti da un esito positivo oppure da un fallimento definitivo dopo diversi tentativi.
Perché succede
Il server git (GitHub, GitLab, Bitbucket o un'istanza self-hosted) era temporaneamente irraggiungibile, ha restituito un errore HTTP transitorio, oppure la rete tra Semaphore e il server ha subito una breve interruzione. Semaphore ritenta automaticamente le operazioni di clone e pull prima di far fallire l'attività.
Come risolvere
- Interruzioni transitorie: di solito si risolvono da sole. Semaphore ritenta fino a
git_attemptsvolte (predefinito 4) con backoff esponenziale tra i tentativi. - Fallimenti frequenti: aumentare il numero di tentativi nella configurazione:
{
"git_attempts": 8
}
Oppure con una variabile d'ambiente:
export SEMAPHORE_GIT_ATTEMPTS=8
- Fallimenti immediati e costanti: i nuovi tentativi non saranno d'aiuto. Controllare l'URL del repository, il nome del branch, le chiavi di accesso e la connettività di rete dal server Semaphore o dall'host del runner.
Vedere Operazioni Git per i dettagli su git_client e git_attempts.
L'output dello script Bash è mancante o incompleto
Un'attività Bash termina correttamente ma il log mostra poco o nessun output da echo, printf o altri comandi, soprattutto quando lo script termina rapidamente.
Perché succede
Semaphore cattura stdout e stderr dei comandi shell durante la loro esecuzione. Gli script molto brevi possono terminare prima che tutto l'output bufferizzato venga letto, quindi le ultime righe potrebbero mancare dal log dell'attività.
Come risolvere
- Aggiornare: le versioni recenti di Semaphore svuotano l'output del processo prima di contrassegnare un'attività come completata. Aggiornare il server e i runner se si utilizza una release precedente.
- Forzare lo svuotamento dell'output nello script quando è necessaria una consegna garantita:
#!/bin/bash
echo "Starting deploy"
echo "Done" >&2
Per la diagnostica critica, scrivere su un file all'interno del workspace del repository ed eseguire cat su di esso alla fine dello script.
3. Evitare uscite anticipate silenziose: usare set -euo pipefail e messaggi di errore espliciti, in modo che i fallimenti siano visibili anche quando l'output è breve.
unable to read LDAP response packet: unexpected EOF
Molto probabilmente si sta tentando di connettersi al server LDAP con un metodo non sicuro, mentre il server si aspetta una connessione sicura (tramite TLS).
Come risolvere
Abilitare TLS nel file config.json:
...
"ldap_needtls": true
...
LDAP Result Code 49 "Invalid Credentials"
La password o il binddn sono errati.
Come risolvere
Usare lo strumento ldapwhoami e verificare che il proprio binddn funzioni:
ldapwhoami\
-H ldap://ldap.com:389\
-D "CN=/your/ldap_binddn/value/in/config/file"\
-x\
-W
Chiederà interattivamente la password e dovrebbe restituire il codice 0 e stampare il DN specificato.
È inoltre possibile leggere i seguenti articoli:
LDAP Result Code 32 "No Such Object"
Prossimamente.