相关文章推荐
细心的拖把  ·  GitLab container ...·  2 月前    · 
爱看球的海龟  ·  Mac 版Logic Pro - ...·  1 年前    · 
暴躁的电影票  ·  int, bigint, ...·  2 年前    · 
至今单身的牛排  ·  Oops!!! - 简书·  2 年前    · 

Currently I use gitlab-ci.yml, gitlab runners to execute some various actions with ansible. I dynamically create an inventory file with a python script in a docker image, take the artifact and send to a downstream project that runs a docker image with ansible and executes a playbook on that inventory.

The inventory file has grown a bit too large and I want to break this up, then for each smaller inventory file launch docker image and ansible playbook in parallel.

I thought there should be something like foreach in gitlab-ci.yml but have not found anything like that in the documentation.

init_demo:
  image: ${ARTIFACTORY_URL}/${IMAGE_PATH}/${IMAGE_NAME}:${IMAGE_VERSION}
  stage: init-stage
  tags:
    - docker
    - shared
  script: 
    - python3 /scripts/createinventory.py 
  artifacts:
    paths:
      - inventory.yml
    expire_in: 30 days
  rules:
    - if: $CI_ENV_TRIGGERED == "ALL" && $CI_LOB == "ALL"
configure_a_thing_with_ansible:
  stage: configure-stage
  trigger:
    project: configure-something
    branch: main
    strategy: depend
  only:
    - schedules

then downstream:

stages:
  - configure
configure_a_thing:
  image: ${ARTIFACTORY_URL}/${IMAGE_PATH}/${ANSIBLE_IMAGE}:${ANSIBLE_IMAGE_VERSION}
  stage: configure
  tags:
    - docker
    - shared
  script:
    - ansible-playbook -i ./inventory.yml ./ansible-playbook.yml 
  needs:
    - project: create_inventory_project
      job: init_demo
      ref: main
      artifacts: true
  only:
    variables: 
      - $CI_PIPELINE_SOURCE == "pipeline"