gitlab-ci:动态工件名称

问题描述 投票:0回答:2

我正在运行一个

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
2个回答
3
投票

例如,如果您使用类似

CI_JOB_ID
CI_JOB_NAME
的内容,您可以为每个作业拥有动态工件名称。您可以使用 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

是的,您可以在计时器内使 Artifcat 过期。请参阅 https://docs.gitlab.com/ee/ci/yaml/README.html#artifacts-expire_in


0
投票

paths:
关键字支持通配符:

  artifacts:
    name: "some description"
    when: always
    paths:
    - *.xlsx

这是从生成 Excel 报告的计划作业中获取的。 因此,如果成功运行,工作目录中将会存在一个 *.xlsx 文件

© www.soinside.com 2019 - 2024. All rights reserved.