前言
之前将流水线脚本所有内容都放到项目里,使用一段时间后,发现存在一些问题。
- 不好维护,当我发现流水线可以优化,需要做些调整的时候,需要在群里跟所有人说,要怎么怎么改。很麻烦,而且不能保证所有项目都会去更新,导致有的基础设施就需要做兼容,例如我封装的基础镜像。
- 新项目需要使用流水线时,可能出现随便找个脚本抄过来用,而那个脚本并不保证是最新的。
Gitlab 官方也意识到这个问题,提供了公共脚本仓库的概念,可在项目里引用其他项目里的脚本。
公共脚本仓库带来的好处
- 其他项目使用 gitlab ci/cd 时,只需引用公共脚本仓库里的脚本,设置对应参数即可。隐藏具体实现细节,减轻使用者的心智负担。
- 流水线脚本可能会进行改动、优化,只需改动公共脚本仓库即可,避免修改多个仓库的脚本,降低维护难度。
创建公共脚本仓库
在gitlab中创建仓库:gitlab-cicd-template。
放入要复用的脚本
.
├── README.md
├── common
│ ├── clean-image
│ │ ├── .gitlab-ci.yml
│ │ └── README.md
│ ├── deploy-to-k8s
│ │ ├── .gitlab-ci.yml
│ │ └── README.md
│ └── push-image
│ ├── .gitlab-ci.yml
│ └── README.md
├── golang
│ ├── build-image
│ │ ├── .gitlab-ci.yml
│ │ └── README.md
│ ├── golangci-lint
│ │ ├── 1.52.2
│ │ │ ├── .gitlab-ci.yml
│ │ │ └── base
│ │ │ └── .gitlab-ci.yml
│ │ ├── README.md
│ │ └── lint-rule.yml
│ └── unit-test
│ ├── .gitlab-ci.yml
│ ├── README.md
│ └── base
│ └── .gitlab-ci.yml
└── yarn
├── build-image
│ ├── .gitlab-ci.yml
│ └── README.md
└── eslint
├── .eslintignore
├── .eslintrc
├── .gitlab-ci.yml
├── README.md
└── base
└── .gitlab-ci.yml
- 所有脚本都放到了github上
使用方式
- 根据需求选择所需job,大部分job都有readme,包含使用说明等。
- 完整使用可参照Gitlab CI/CD 实践四:Golang 项目 CI/CD 流水线配置
注意事项
- 此仓库的脚本被大量引用,修改时一定要注意向后兼容。