Gitlab';s";“第页”;内部工作?

Gitlab';s";“第页”;内部工作?,gitlab,gitlab-ci,gitlab-pages,Gitlab,Gitlab Ci,Gitlab Pages,我有这样一个Gitlab项目(.Gitlab ci.yml): #子作业列为注释 阶段: -报到考试 #贝壳支票 #派林 #单元测试 -其他几件事 #福 #酒吧 #巴兹 -释放 #释放 #运行一些shell代码静态测试并生成日志/徽章 外壳检查: 阶段:签入测试 脚本: -bash run_shellcheck.sh 人工产品: 路径: -logs/shellcheck.log -logs/shellcheck.svg #运行一些python代码静态测试并生成日志/徽章 派林: 阶段:签入测试

我有这样一个Gitlab项目(.Gitlab ci.yml):

#子作业列为注释
阶段:
-报到考试
#贝壳支票
#派林
#单元测试
-其他几件事
#福
#酒吧
#巴兹
-释放
#释放
#运行一些shell代码静态测试并生成日志/徽章
外壳检查:
阶段:签入测试
脚本:
-bash run_shellcheck.sh
人工产品:
路径:
-logs/shellcheck.log
-logs/shellcheck.svg
#运行一些python代码静态测试并生成日志/徽章
派林:
阶段:签入测试
脚本:
-bash run_pylint.sh
人工产品:
路径:
-logs/pylint.log
-logs/pylint.svg
# 
在我的项目页面上,我希望将签入测试期间生成的.svg文件呈现为

Gitlab徽章工具需要图像文件的URL。它无法从带有查询字符串的URL加载图像。不幸的是,访问特定作业工件的语法不正确。这实际上意味着我们不能将作业工件链接为徽章

最流行的解决方法是滥用Gitlab的特性将工件存储为静态内容。从那里我们可以得到不包含查询字符串的工件的干净URL

我的困惑涉及到.gitlab-ci.yml中定义的“页面”作业背后的底层机制。这里的树很稀疏。有很多方法可以使用各种框架来部署实际的网页,但我对其中任何一种都不感兴趣,因为我只是使用我的项目的“页面”来托管文件

假设我希望在管道的末尾部署我的页面。但是,我希望在管道开始附近上载shellcheck和pylint工件。此外,我希望即使管道阶段失败,也能上传这些工件

从语法上讲,pages作业看起来与任何其他作业相同。没有什么可以描述它是如何被Gitlab的内部构件神奇地拾取的。这给我留下了以下问题:

  • 我是否可以将阶段从“部署”更改为“签入测试”,或者部署阶段是Gitlab在解析页面作业时寻找的隐藏魔法的一部分
  • 如果我被绑定到部署阶段,我可以重新安排这些阶段,使其在管道中提前到达,而不破坏魔法吗
  • 页面作业是否从本地机器部署工件(作业的默认行为),或者列出的路径是否来自工件,这些工件已经由早期作业上传到Gitlab管道
  • 如果pages作业仅在本地查找工件,我如何确保它与早期作业在同一台机器上运行,以便找到它们生成的工件?让我们假设Gitlab执行器都来自具有相同标记的池,并且没有单独标记
  • 是否有可能让pages作业在最初生成工件的同一Docker容器中运行

GitLab页面的魔力在于工作的名义。它必须被命名为“页面”,而不是别的。可以将作业移动到不同的阶段。一旦作业“pages”成功完成,就会有一种特殊类型的作业称为“pages:deploy”。即使您更改了“页面”作业运行的阶段,此作业也会显示在部署阶段

如果在早期阶段有pages作业,则后期阶段的作业可能会失败,但“pages:deploy”作业仍将运行并更新GitLab页面

除此之外,“页面”作业与GitLab中的普通作业一样。如果您需要其他作业中的工件,可以使用工件和依赖项获得这些工件:


“pages”作业应该创建一个名为“public”的文件夹,并将该文件夹作为工件提供。

我最终通过一个工件实例同步了所有作业工件。使用内置的dependencies关键字看起来更简单!
# Sub-jobs listed as comments
stages:
  - check-in-tests
      # shellcheck
      # pylint
      # unit-tests
  - several-other-things
      # foo
      # bar
      # baz
  - release
      # release

# Run some shell code static tests and generate logs/badges
shellcheck:
  stage: check-in-tests
  script:
    - bash run_shellcheck.sh
  artifacts:
    paths:
      - logs/shellcheck.log
      - logs/shellcheck.svg

# Run some python code static tests and generate logs/badges
pylint:
  stage: check-in-tests
  script:
    - bash run_pylint.sh
  artifacts:
    paths:
      - logs/pylint.log
      - logs/pylint.svg

# <snip>