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

时间:2020-01-17 21:08:29

标签: 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。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

拆分shell脚本和GitLab CI语法

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

所有这些问题不允许您管理脚本,拆分脚本并进行其他出色的开发人员分解工作。

有一些可能的变通办法-将脚本存储在其他地方,让gitlab运行程序可以访问它们,然后通过source /ci-scripts/my-script.sh块中的before_script将它们注入到当前的工作环境中。

存储ci脚本的可能位置:

  1. 带有所有构建/测试/部署实用程序和ci脚本的特殊docker镜像
  2. 相同但专用的构建服务器
  3. 您可以部署包含脚本的简单网页,然后在before_script中下载并导入。为了以防万一,请确保除gitlabRunner之外的任何人都无法访问它。

使用powershell

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