Non riesco a ottenere la cache o gli artefatti da trasferire tra i lavori in gitlab CI. Sospetto che abbia qualcosa a che fare con la mia configurazione, ma non sono sicuro di cosa. Sto eseguendo gitlab e gitlab-ci-multirunner, entrambi nella finestra mobile, usando la seguente configurazione di docker-compose. Ho lasciato fuori la configurazione del database e alcune variabili di ambiente per brevità:Configurazione Gitlab CI runner con cache nella finestra mobile
version: '2'
services:
gitlab:
image: sameersbn/gitlab:8.5.1
links:
- redis:redisio
- postgresql:postgresql
ports:
- "10080:80"
- "10022:22"
environment:
...
volumes:
- gitlab_data:/home/git/data
gitlab-ci-runner:
restart: always
image: gitlab/gitlab-runner
volumes:
- gitlab_runner_config_data:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock
- /etc/nginx/ssl/gitlab.crt:/etc/gitlab-runner/certs/ca.crt
- /etc/ssh:/ssh
links:
- gitlab:gitlab
redis:
...
postgresql:
...
volumes:
postgresql_data:
redis_data:
gitlab_data:
gitlab_runner_config_data:
La configurazione corridore (config.toml
) è:
concurrent = 1
[[runners]]
name = "docker"
url = <public gitlab url>/ci
token = <gitlab token>
tls-ca-file = "/etc/gitlab-runner/certs/ca.crt"
executor = "docker"
[runners.docker]
image = "docker-bash"
volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
L'immagine docker-bash
di cui è solo l'immagine ufficiale docker:1.10 con bash installata.
mio processo di costruzione si compone di 3 fasi:
- Run
npm install
e le prove in immagine ufficiale node:5. Per ora, ho lasciato questo passaggio per testare la distribuzione. - Creare un'immagine di finestra mobile contenente il codice
- Utilizzare ansible, tramite un'immagine mobile di docker ansibile creata per distribuire l'immagine creata sul server di produzione.
Il file .gitlab-ci.yml
assomiglia a questo:
variables:
FULL_IMAGE_TAG: deploy-$CI_BUILD_REF_NAME:$CI_BUILD_ID-$CI_BUILD_REF
IMAGE_FILE: deploy-$CI_BUILD_REF_NAME.tar.gz
cache:
paths:
- $IMAGE_FILE
build:
stage: build
script:
- docker build -t $FULL_IMAGE_TAG .
- docker save $FULL_IMAGE_TAG | gzip -cf - > $IMAGE_FILE
artifacts:
paths:
- $IMAGE_FILE
deploy:
stage: deploy
image: ansible-ssh
script:
- ls
- ansible-playbook -e image_file=$IMAGE_FILE -e branch=$CI_BUILD_REF_NAME -e full_image_name=$FULL_IMAGE_TAG deploy-playbook.yml
only:
- develop
- master
Come si può vedere, l'immagine finestra mobile compressa viene indicato qui sia in sezioni di cache e manufatti, ma in realtà non è disponibile al passaggio deploy , dove dovrebbe essere ansibile copiarlo sulla macchina remota. Ho provato a includere un comando ls
, quindi controlla il contenuto della cartella e il file non è chiaramente lì, ma è sicuramente costruito e posso scaricarlo dall'interfaccia utente di gitlab. Ecco il registro dal lavoro Deploy:
gitlab-ci-multi-runner 1.0.4 (014aa8c)
Using Docker executor with image ansible-ssh ...
Pulling docker image ansible-ssh ...
WARNING: Cannot pull the latest version of image ansible-ssh : Error: image library/ansible-ssh not found
WARNING: Locally found image will be used instead.
Running on runner-59d43cf3-project-8-concurrent-0 via 381c2ea97744...
Fetching changes...
Removing artifacts.zip
Removing deploy-develop.tar.gz
HEAD is now at 6009bd0 test
Checking out 6009bd0f as develop...
HEAD is now at 6009bd0... test
$ ls
Dockerfile
deploy-playbook.yml
server
$ ansible-playbook -e image_file=$IMAGE_FILE -e branch=$CI_BUILD_REF_NAME -e full_image_name=$FULL_IMAGE_TAG deploy-playbook.yml
Using /etc/ansible/ansible.cfg as config file
1 plays in deploy-playbook.yml
PLAY ***************************************************************************
TASK [setup] *******************************************************************
ok: [deploy-host]
TASK [copy docker image] *******************************************************
task path: /builds/test/test/deploy-playbook.yml:44
fatal: [deploy-host]: FAILED! => {"changed": false, "failed": true, "msg": "could not find src=/builds/test/test/deploy-develop.tar.gz"}
NO MORE HOSTS LEFT *************************************************************
to retry, use: --limit @deploy-playbook.retry
PLAY RECAP *********************************************************************
deploy-host : ok=1 changed=0 unreachable=0 failed=1
ERROR: Build failed with: exit code 1
ho il sospetto che io non sono la creazione o l'utilizzo in modo corretto il corridore, ma non riesco a trovare molto nella documentazione per nulla al di là dei casi veramente semplici e I don' Conosco abbastanza bene lo strumento per sapere come si inserisce tutto sotto il cofano.
per essere sicuri i passi sono in esecuzione uno dopo l'altro ha fatto si tenta di aggiungere fasi: - Costruire - distribuire – Pascal
ho fatto, ma posso vedere l'ordine che corrono dentro e va bene. – aquavitae
Cosa succede se aggiungete il passo 'artefatti' al lavoro' deploy'? O spostalo sotto 'cache', quindi influenzerà tutti i lavori? L'altra domanda è, sei sicuro che sia 'cache' che' artefacts' possono puntare allo stesso percorso? Non lo so, sto solo cercando di aiutarti con la logica. ;) –