2017-11-14 8 views
1

私は次のように多かれ少なかれ、ローカル、リモートサーバーからファイルを取得しますgitlab-ci仕事を実行しています:gitlab-CI:ダイナミックアーティファクト名

retrieve_docs: 
    stage: fetch_docs 
    image: debian:jessie 
    script: 
     - ssh [email protected]$SERVER /perform/some/work 
     - INSTFILE=$(ssh [email protected]$SERVER bash -c 'find /root -iname "somepattern*" | tail -n 1 | xargs readlink -f') 
     - echo "Will retrieve locally $INSTFILE" 
     - scp [email protected]$SERVER:$INSTFILE . 
     - BASEFILE=$(basename $INSTFILE) 
     - mv $BASEFILE downloads/ 
    artifacts: 
     name: $BASEFILE 
     paths: 
     - downloads/ 

上記ジョブ定義がしかし、動作するようには思えません、ファイル名を指定するときにBASEFILE変数が空としてレンダリングされるためです。

  • ダイナミックアーティファクト名を使用する方法はありますか?

  • このアーティファクトが私の(空の/追跡された)downloadsフォルダにコピーされない理由はありますか?

  • 上記のプロセスは、実際にはローカルで.zipファイルをフェッチします。各ジョブで古いアーティファクトを削除し、最新のアーティファクト/ zipファイルのみを保持する方法があります(ただし、1週間の有効期限を設定しています)。例えば

答えて

0

あなたはCI_JOB_IDCI_JOB_NAMEのようなものを使用する場合は、JOBごとの動的なアーティファクトの名前を持つことができます。 https://docs.gitlab.com/ee/ci/yaml/README.html#artifacts-nameに定義されたバリバリの組み合わせを使用すると、ステージやジョブ、パイプラインの動的アーティファクト名を取得できます。

通常、git labは、パスに指定されているものを圧縮し、それをランナーマネージャーにアップロードして、次のジョブがランナーマネージャーからアーティファクトをダウンロードできるようにします。ジョブが失敗した場合は、アーティファクトを他のジョブにアップロードすることはできません。 find .を実行し、必要なディレクトリがあることを確認してください。 whenオプションを使用すると、失敗したかどうかにかかわらずpiplineを続行できます。 https://docs.gitlab.com/ee/ci/yaml/README.html#artifacts-when

はい、あなたのタイマーでartifcatを期限切れにすることができます。 https://docs.gitlab.com/ee/ci/yaml/README.html#artifacts-expire_in

関連する問題