我有一个项目,其中充满了其他项目可以用于其工作的各种管道模板,从而使我的 CI 保持干燥。这些不是在一个.gitlab-ci.yml文件中,而是单独的./templates/language.yml文件。
我已经在使用 yaml lint 来确保它是有效的 yaml,但我想确保我也使用有效的 GitLab CI 语法。
我想在合并时检查我的 CI 模板。我拒绝运行,gitlab-runner exec shell因为我不知道如何触发特定副本。看起来 API 中可能有一些与此相关的内容,但我无法确定其中的秘密。
你怎么做这个?
我们正在使用两种不同的方法来实现这一目标。
第一种方法是通过 API 使用来自 gitlab 的 linter:
curl --header "Content-Type: application/json" --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/ci/lint" --data '{"content": "{ \"image\": \"ruby:2.6\", \"services\": [\"postgres\"], \"before_script\": [\"bundle install\", \"bundle exec rake db:create\"], \"variables\": {\"DB_NAME\": \"postgres\"}, \"types\": [\"test\", \"deploy\", \"notify\"], \"rspec\": { \"script\": \"rake spec\", \"tags\": [\"ruby\", \"postgres\"], \"only\": [\"branches\"]}}"}'
Run Code Online (Sandbox Code Playgroud)
这里的问题是,您无法利用 JOB_TOKEN 来执行此操作,因此您需要注入秘密并生成令牌来实现此目的。甚至还有一个可用的 linting 库 - https://github.com/BuBuaBu/gitlab-ci-lint
第二种方法模仿设置,使用自己的方法.gitlab-ci.yml,其中包含模板并执行它。就像普通的合并请求管道一样。这样我们就可以确保脚本不会出现任何故障并且可以保存以供使用。我们对 docker 镜像以及 gradle 构建模板等都这样做。
例如。对于 docker 镜像,我们构建镜像,包含模板,并将image作业的属性覆盖到临时 docker 镜像。
第三种方法不够充分,并且根据功能的不同,缺乏功能。有工具 gitlab-ci-local https://github.com/firecow/gitlab-ci-local可用于验证 gitlab ci 构建并执行它们。但这不是官方实现,并且并非所有功能都存在。最后,您还需要再次进行某种项目设置。
如果我可以选择,我会选择第一种方法。在我们的案例中,它被证明是有用的。为了长期保存解决方案的利益,伪造项目的最初努力并不多。
| 归档时间: |
|
| 查看次数: |
1583 次 |
| 最近记录: |