powershell - 如何在 GitLab CI YAML 文件中包含 PowerShell 脚本文件

标签 powershell gitlab yaml gitlab-ci gitlab-ci-runner

目前,我的 GitLab CI YAML 文件中有一个大型 Bash 脚本。下面的示例是我如何对函数进行分组,以便在 CI 过程中使用它们。

.test-functions: &test-functions |
   function write_one() { echo "Function 1" }
   function write_two() { echo "Function 2"}
   function write_three() { echo "Function 3"}


.plugin-nuget:
   tags:
      - test-es
      - kubernetes
   image: mygitlab-url.com:4567/containers/dotnet-sdk-2.2:latest

   script:
      - *test-functions
      - write_one
      - write_two
      - write_three

下面的例子展示了我们如何在另一个文件中包含一个 YAML 文件:
include:
   - project: MyGroup/GitlabCiPlugins/Dotnet
     file: plugin-test.yml
     ref: JayCiTest

我想对我的脚本做同样的事情。我不想将脚本与我的 YAML 放在同一个文件中,而是希望包含该文件,以便我的 YAML 可以访问我的脚本的功能。如果可能的话,我还想使用 PowerShell 而不是 Bash。

我怎样才能做到这一点?

最佳答案

拆分 shell 脚本和 GitLab CI 语法

  • GitLab CI 没有“将文件内容包含到脚本 block ”的功能。
  • GitLab CI include功能不导入 YAML anchor 。
  • GitLab CI 无法连接数组。所以你不能写before_script在一个 .gitlab-ci.yml 文件中,然后在 before_script 中使用它在另一个。你只能重写它,不能连接。

  • 由于所有这些问题,您无法轻松管理脚本;拆分它们,组织它们并做另一个很好的开发人员分解的东西。
    有可能的解决方法。您可以将脚本存储在其他地方; gitlab runner 可以在哪里找到它们,然后通过 source /ci-scripts/my-script.sh 将它们注入(inject)到您当前的工作环境中在 before_script堵塞。
    存储 ci 脚本的可能位置:
  • 带有所有构建/测试/部署实用程序和 ci 脚本的特殊 docker 镜像
  • 相同但专用的构建服务器
  • 您可以部署包含脚本的简单网页,然后在 before_script 中下载和导入。 .以防万一,确保除了 gitlab runner 之外没有人可以访问它。

  • 使用 powershell
    只有在 Windows 上安装了 GitLab Runner 才能使用 powershell。在这种情况下,您不能使用其他任何东西。

    关于powershell - 如何在 GitLab CI YAML 文件中包含 PowerShell 脚本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59794871/

    相关文章:

    r - 更改 rmarkdown 生成的 PDF 中的字体

    powershell - 如何在 Power Shell 中正确增加不同月份的日期 ('yyyy-mm-dd')

    powershell - 为什么 PowerShell 在批处理脚本调用时会以空格分割参数以及如何修复它?

    git - Gerrit 可以在 Gitlab 前面工作还是意味着要取代它

    continuous-integration - 如何在 gitlab-ci 中指定子模块分支?

    python-3.x - Swagger-UI 生成的 python 服务器由于 'no module named' 错误而未启动

    powershell - 改变排序对象行为

    windows - 执行 .ps1 脚本时的 Powershell 问题

    GitLab 增量备份

    amazon-web-services - 我们需要在 AWS 中转义 "Fn::Base64: !Sub"中的任何内容吗?