如何配置Gitlab CI/CD流水线满足三类网络自动化研究场景需求
方案选择建议
两种方案均可行,可根据你的项目实际情况选择:
- 若三个研究案例属于同一项目体系,共享Ansible角色、公共变量、NAPALM依赖配置等公共资源,优先选择*单仓库单
.gitlab-ci.yml*方案,可大幅降低重复配置的维护成本 - 若三个研究案例完全独立,无共享资源,且后续需要分别交付、独立开源或做权限隔离,再考虑分仓库单独配置的方案,否则单仓库方案的使用效率更高
单仓库单.gitlab-ci.yml实现方法
通过GitLab CI的rules关键字搭配自定义流水线变量,即可实现按需运行指定案例的逻辑,具体操作如下:
- 定义全局通用阶段,三个案例可复用你已设计的校验、测试环境部署、测试验证、生产环境部署、生产验证全流程阶段:
stages: - validate # TEST environment - deploy_to_test - deploy_to_test_verification # PRODUCTION environment - deploy_to_prod - deploy_to_prod_verification
- 为每个案例的作业配置规则,你可以自定义名为
SCENARIO的变量,不同取值对应不同研究案例,只有变量匹配时对应作业才会执行:
# -------------- 研究案例1:配置下发/新服务部署 -------------- validate_case1: stage: validate script: - ansible-playbook validate-new-service.yml rules: - if: $SCENARIO == "case1" deploy_to_test_case1: stage: deploy_to_test script: - ansible-playbook deploy-new-service.yml -i test-hosts rules: - if: $SCENARIO == "case1" # 剩下的测试验证、生产部署、生产验证作业同理配置rules规则 # -------------- 研究案例2:移除L2接口维护 -------------- validate_case2: stage: validate script: - ansible-playbook validate-remove-l2.yml rules: - if: $SCENARIO == "case2" deploy_to_test_case2: stage: deploy_to_test script: - ansible-playbook remove-l2-interface.yml -i test-hosts rules: - if: $SCENARIO == "case2" # -------------- 研究案例3:全量配置替换维护 -------------- validate_case3: stage: validate script: - napalm validate --config full-running.cfg rules: - if: $SCENARIO == "case3" deploy_to_test_case3: stage: deploy_to_test script: - ansible-playbook full-config-replace.yml -i test-hosts rules: - if: $SCENARIO == "case3"
- 按需触发流水线的方式:
- 页面手动触发:进入GitLab项目的「运行流水线」页面,新增变量
SCENARIO,取值填写case1/case2/case3,点击运行后只会执行对应案例的所有作业 - API触发:调用GitLab CI流水线触发接口时,请求参数携带对应
SCENARIO变量即可
- 进阶优化:如果三个案例的作业逻辑重复度高,可以用
extends关键字提取公共模板,减少冗余代码:
# 公共部署作业模板 .common_deploy: script: - ansible-playbook $PLAYBOOK_PATH -i ${ENV}-hosts rules: - if: $SCENARIO == $TARGET_SCENARIO # 案例1测试部署作业直接继承模板,仅需传入差异化变量 deploy_to_test_case1: extends: .common_deploy stage: deploy_to_test variables: PLAYBOOK_PATH: deploy-new-service.yml ENV: test TARGET_SCENARIO: case1
分仓库方案注意事项
如果选择分仓库的方案,需要先把三个案例依赖的公共Ansible角色、变量文件、依赖声明等资源抽为独立公共包,三个仓库分别引用即可,适合三个场景后续需要独立迭代、权限分开管控的场景。
内容的提问来源于stack exchange,提问作者Sam2022
相关产品推荐
相关产品推荐

