无法使用“仅/除外:更改”创建CI管道

时间:2020-03-16 23:03:55

标签: docker gitlab gitlab-ci

我具有以下git repo结构:

.
├── docker
│   ├── Dockerfile
│   └── requirements.txt
└── software
    ├── app
    │   └── app.py
    └── Dockerfile

docker文件夹负责创建将由我的应用程序使用的docker映像。

然后,如果我更改docker文件夹下的文件,我想重新创建base image,然后使用最后创建的app image创建新的base image。 / p>

但是,如果我只更改应用程序,则在software文件夹下,我只想触发该应用程序映像的阶段。

在我的.gitlab-ci.yml文件下面:

image: docker:latest

services:
    - docker:dind

stages:
    - buildDockerImage
    - buildAppImage

build docker image:
    stage: buildDockerImage
    script:
        - docker login -u $CI_DEPLOY_USER -p $CI_DEPLOY_PASSWORD $CI_REGISTRY
        - docker build --target final --build-arg docker_image_version=$CI_COMMIT_SHORT_SHA -t $DOCKER_IMAGE_NAME docker
        - docker tag $DOCKER_IMAGE_NAME $CI_REGISTRY/xx/$APP_IMAGE_NAME:base
        - docker push $CI_REGISTRY/xx/$APP_IMAGE_NAME
    only:
        changes:
          - docker/**/*

build app image:
    stage: buildAppImage
    script:
        - docker login -u $CI_DEPLOY_USER -p $CI_DEPLOY_PASSWORD $CI_REGISTRY
        - docker build --build-arg app_image_version=$CI_COMMIT_SHORT_SHA -t $APP_IMAGE_NAME software
        - docker tag $APP_IMAGE_NAME $CI_REGISTRY/xx/$APP_IMAGE_NAME:$CI_COMMIT_SHORT_SHA
        - docker push $CI_REGISTRY/xx/$APP_IMAGE_NAME
    except:
        changes:
          - docker/**/*

only / except : changes可以很好地识别更改的位置,但是如果我更改docker文件夹,则不会在两个阶段都创建管道。它仅创建buildDockerImage

如果我删除only / except : changes配置,则管道将按预期工作。

有可能实现我所需要的?我的意思是,如果仅更改应用程序,则不想运行buildDockerImage,但是如果我更改了base image,则需要同时运行buildDockerImagebuildAppImage在管道中。

1 个答案:

答案 0 :(得分:0)

因此,如果我理解正确的话,您想:

  1. 仅当buildDockerImage位置更改时才构建docker/**/*,因此您当前在此阶段的Yaml很好。
  2. 构建buildAppImage

    • 总是从<{1}}阶段仅删除子句

    • 仅适用于对docker位置的更改,请仅将和替换为2个位置:

buildAppImage