2016-03-23 17 views
9

gitlab CIのジョブ間でキャッシュやアーティファクトを引き継ぐことができません。私はそれが私の設定と関係があると思うが、私は何がわからない。私はgitlabとgitlab-ci-multirunnerをともにdockerで実行しています。次のdocker-compose configを使用しています。私は、データベースの設定と簡潔にするため、いくつかの環境変数を残してきた:Gitlab CIランナー設定とドッカーでのキャッシュ

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: 

ランナー構成(config.toml)です:docker-bash画像は言及

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

のbashでちょうど公式docker:1.10画像ですインストールされます。

  1. 実行npm installと公式node:5画像でテスト:

    マイビルドプロセスは3つの段階で構成されています。今のところ、私は展開をテストするためにこのステップを踏んだ。

  2. コードを含むドッキング・イメージを作成する
  3. ビルド可能イメージをプロダクション・サーバーにデプロイするために、カストムで構築された潜在的ドッキング・イメージを使用してください。

.gitlab-ci.ymlファイルは次のようになります。

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 

あなたが見ることができるように、圧縮されたドッキングウィンドウの画像をキャッシュし、成果物のセクションの両方をここでいうが、デプロイ段階で実際に利用可能ではありませんどこかで、それをリモートマシンにコピーすることになっています。私はlsコマンドを含めて試しましたので、フォルダの内容を確認してください。ファイルははっきりとはありませんが、確かにビルドされており、gitlabのUIからダウンロードできます。ここで展開ジョブからのログは、次のとおりです。

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 

「私は私が設定または正しくランナーを使用していないと思われるが、私は本当に簡単な例を超えた何のためにドキュメントで多くを見つけることができないと私はドンどのようにそれがボンネットの下に一緒に収まるか知るのに十分にツールをよく知っている。

+0

ステップを追加してステップを追加してみましょう: - ビルド - デプロイ – Pascal

+0

実行しましたが、実行順序はわかります。 – aquavitae

+0

ステップ 'artifacts'を' deploy'ジョブに追加するとどうなりますか?または、 'cache'の下に移動するとすべてのジョブに影響しますか?もう1つの質問は、 'cache'と' artifacts'の両方が同じパスを指すことができるかどうかです。私は知らない、私はちょうどあなたがロジックを手伝っています。 ;) –

答えて

5

キャッシングは、ビルドのステージ間でファイルを渡すようには設計されていません。

doc

キャッシュから:私は何が必要だと思うその後の 実行

間でキャッシュされるべきファイルのリストを定義することは進行中で、実際にある:WIP: Download build artifacts from previous stages and restore them in context of the build (Technology Preview)

+0

はい、それは私が欲しいものです。私がやろうとしていることですが、それは動作しません。私は両方のリンクを読んで、違いが出るかどうかを確認するためにキャッシュを追加しました。ドキュメンテーションにもかかわらず、アーティファクトは2番目の仕事に復元されていません。 – aquavitae

+0

build:and deploy:同じジョブの2つのステップである2つのジョブではありません – Pascal

+0

どうやらセマンティクスは議論の余地がありますが、どういうことでしょうか?違いはありますか? – aquavitae

1

はなかったですあなたはあなたの人工物を有効にしますgitlab.rb

gitlab_rails['artifacts_enabled'] = false 

Build Artifacts documentationに記載されていますか?

0

まず、gitlabとgitlabランナーを更新してください。特に1.0.4ランナーは静かな実験です。

第二キャッシュの定義では、あなたがhttps://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/configuration/advanced-configuration.md#the-runners-sectionからhttps://docs.gitlab.com/ce/ci/yaml/README.html#cache-key

cache: 
    key: "$CI_BUILD_REF_NAME" 
    paths: 
    - .. 

を参照してください、あなたはconfig.tomlを変更し、キャッシュディレクトリに

cache_dirに追加する必要がありますキーを追加してください:

ディレクトリビルドキャッシュは、選択されたエグゼキュータ(Locally、Docker、SSH)のコンテキストで格納されます。 ドッカーエグゼキュータを使用する場合は、このディレクトリをボリュームパラメータに含める必要があります。

0

キャッシングは少し奇妙ですが、基本的に:<dir path>アーティファクトはあなたが同じジョブ内で使用することができますしながら、キャッシュの下

<dir path>は、ビルドジョブ間で利用可能です。だから、

cache: 
    untracked: true 
    key: "$CI_BUILD_REF_NAME" 
    paths: 
    - cache-dir/ 

setup: 
    stage: setup 
    [snip] 
    artifacts: 
    paths: 
    - cache-dir/ #notice that the path above is the same 

これは、あなたが内部同じ仕事、同じキャッシュを使用できるようにしながら各ビルドジョブの間に、あなたのファイルをキャッシュすることができます。

各ビルドステップでアーティファクトに必要なファイルを追加することを忘れないでください。

関連する問題