【问题标题】:gitlab-ci: Dynamic artifact namesgitlab-ci:动态工件名称
【发布时间】:2017-11-14 10:02:22
【问题描述】:

我正在运行一个 gitlab-ci 作业,它将从远程服务器本地获取文件,或多或少如下:

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

然而,上述作业定义似乎不起作用,因为在提供文件名时,BASEFILE 变量被呈现为空。

  • 有没有办法使用动态工件名称?

  • 这个工件是否也从未复制到我的(空/跟踪)downloads 文件夹中?

  • 上述过程实际上会在本地获取一个.zip 文件。有没有办法(尽管我设置了 1 周的到期时间)让每个作业删除旧的工件并只保留最新的工件/zip 文件?

【问题讨论】:

    标签: gitlab gitlab-ci gitlab-ci-runner


    【解决方案1】:

    例如,如果您使用 CI_JOB_ID CI_JOB_NAME 之类的东西,您可以为每个 JOB 指定动态工件名称。您可以在 https://docs.gitlab.com/ee/ci/yaml/README.html#artifacts-name 中定义的变量组合来为您的阶段、作业或管道获取动态工件名称。

    通常在作业中,git lab 会压缩路径中指定的任何内容并将其上传到运行程序管理器,以便下一个作业可以从运行程序管理器下载工件。如果作业失败,您无法将任何工件上传到其他作业。执行find . 并检查所需的目录是否存在。无论是否失败,您都可以使用when 选项继续管道。见https://docs.gitlab.com/ee/ci/yaml/README.html#artifacts-when

    是的,您可以在您的计时器时使工件过期。见https://docs.gitlab.com/ee/ci/yaml/README.html#artifacts-expire_in

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      • 2019-11-13
      • 2021-03-25
      • 2018-05-09
      • 2017-09-01
      • 2022-07-27
      • 1970-01-01
      相关资源
      最近更新 更多