gitlab-ci:动态工件名称

时间:2017-11-14 10:02:23

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

我正在运行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文件?

1 个答案:

答案 0 :(得分:1)

例如,如果您使用CI_JOB_ID CI_JOB_NAME之类的内容,则每个JOB都可以拥有动态工件名称。您可以在https://docs.gitlab.com/ee/ci/yaml/README.html#artifacts-name中定义varibales的组合,以获取舞台或作业或管道的动态工件名称。

通常在作业中,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