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

Zor*_*hgo 7 powershell yaml gitlab 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
Run Code Online (Sandbox Code Playgroud)

下面的例子展示了我们如何在另一个文件中包含一个 YAML 文件:

include:
   - project: MyGroup/GitlabCiPlugins/Dotnet
     file: plugin-test.yml
     ref: JayCiTest
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能做到这一点?

rai*_*ine 3

拆分 shell 脚本和 GitLab CI 语法

  • GitLab CI 没有“将文件内容包含到脚本块”功能。
  • GitLab CIinclude功能不导入 YAML 锚点。
  • GitLab CI 无法连接数组。因此,您不能在一个 .gitlab-ci.yml 文件中写入before_script,然后在before_script另一个文件中使用它。您只能重写它,而不能连接。

由于所有这些问题,您无法轻松管理脚本;拆分它们,组织它们并做另一个很好的开发人员分解工作。

有可能的解决方法。您可以将脚本存储在其他地方;gitlab 运行程序可以到达它们,然后通过source /ci-scripts/my-script.shin before_scriptblock 将它们注入到您当前的工作环境中。

存储 ci 脚本的可能位置:

  1. 包含所有构建/测试/部署 utils 和 ci 脚本的特殊 docker 映像
  2. 相同但专用的构建服务器
  3. 您可以部署包含脚本的简单网页,然后下载并导入到before_script. 以防万一,确保除了 gitlab runner 之外没有人可以访问它。

使用powershell

仅当您在 Windows 上安装了 GitLab Runner 时才可以使用 powershell。在这种情况下你不能使用其他任何东西。