Gitlab CI coureur de configuration avec un cache sur docker

Je n'arrive pas à obtenir le cache ou les objets à transporter entre les emplois dans gitlab CI. Je soupçonne que c'est quelque chose à faire avec ma configuration, mais je ne suis pas sûr de ce que. Je suis en cours d'exécution gitlab et gitlab-ci-multirunner, à la fois dans le panneau, à l'aide de la suite de docker-composition de config. J'ai laissé de côté la base de données de configuration et de certaines variables d'environnement pour des raisons de concision:

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:

Le coureur de configuration (config.toml) est:

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"]

La docker-bash de l'image de visée est juste l'officiel docker:1.10 image avec bash est installé.

Mon processus de construction se compose de 3 étapes:

  1. Exécuter npm install et les tests dans l'officiel nœud:5 image. Pour l'instant, j'ai laissé cette étape afin de tester la déployer.
  2. Construire un menu fixe de l'image contenant le code
  3. Utilisation ansible, par l'intermédiaire d'un custome construit ansible docker image pour déployer le construit de l'image sur le serveur de production.

La .gitlab-ci.yml fichier ressemble à ceci:

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

Comme vous pouvez le voir, la compression de l'image docker est mentionné ici à la fois dans le cache et les artefacts sections, mais n'est pas réellement disponible dans le déploiement de l'étape, où ansible est censé copier sur la machine distante. J'ai essayé d'inclure un ls de commande afin de vérifier le contenu du dossier et le fichier n'est clairement pas là, mais il est certainement construit et je peux le télécharger à partir du gitlab de l'INTERFACE utilisateur. Ici, le journal de la travail de déploiement:

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

Je soupçonne que je ne suis pas la configuration ou l'utilisation du coureur correctement, mais je ne trouve pas beaucoup dans la documentation pour rien au-delà de vraiment simple cas et je ne sais pas l'outil assez bien pour savoir comment il s'adapte à tous ensemble sous le capot.

pour être sûr que les étapes sont exécutées l'une après l'autre, avez-vous essayé d'ajouter des étapes de: - construire, déployer,
Je l'ai fait, mais je peux voir l'ordre de courir et c'est très bien.
Si vous ajoutez l'étape artifacts à la deploy travail? Ou déplacez-le au-dessous de cache donc il aura une incidence sur tous les postes? L'autre question est, êtes-vous sûr que les deux cache et artifacts peuvent pointer vers le même chemin? Je ne sais pas, j'essaie juste de vous aider avec la logique. 😉
Merci, mais il semble que gitlab ne supporte pas encore. C'est vraiment bizarre, parce que je ne peux pas voir la valeur de fonction, vous ne pouvez pas les utiliser comme ça, mais pour l'instant je suis manuellement la mise en cache ce dont j'ai besoin pour un volume partagé.

OriginalL'auteur aquavitae | 2016-03-23