Развертывание определенного тега изображения в OpenShift Origin из потока изображений - PullRequest
0 голосов
/ 16 октября 2019

Я настроил свои конвейеры CI Gitlab таким образом, чтобы они создавали образ OCI с помощью Docker-in-Docker и загружали его в собственный реестр Gitlab.

Теперь я хочу развернуть образы, созданные в моих конвейерах CI, вПроисхождение OpenShift. Все изображения в реестре помечены $CI_COMMIT_SHORT_SHA (то есть: я не использую «последний»).

Как я могу это сделать?

Это то, что я пробовал до сих пор:

  before_script:
    - oc login --server="$OPENSHIFT_SERVER" --token="$OPENSHIFT_TOKEN"
    - oc project myproject
  script:
    - oc tag registry.gitlab.com/myproject/backend:$CI_COMMIT_SHORT_SHA backend:$CI_COMMIT_SHORT_SHA
    - oc import-image backend:$CI_COMMIT_SHORT_SHA
    - oc set image dc/backend backend=myproject/backend:$CI_COMMIT_SHORT_SHA
    - oc rollout latest backend

Кажется, все работает нормально до oc set image. Я ожидаю, что он изменит конфигурацию развертывания для использования указанного тега изображения ($CI_COMMIT_SHORT_SHA), но, похоже, конфигурация на самом деле не изменена, и поэтому при развертывании все еще развертывается старый (предыдущий) образ.

Что мне не хватает? Есть ли лучший способ для развертывания определенного тега из частного реестра?

Обновление

Вот моя конфигурация развертывания:

kind: DeploymentConfig
apiVersion: apps.openshift.io/v1
metadata:
  annotations:
    openshift.io/generated-by: OpenShiftNewApp
  selfLink: /apis/apps.openshift.io/v1/namespaces/myproject/deploymentconfigs/backend
  resourceVersion: '38635053'
  name: backend
  uid: 02809a3d-...
  creationTimestamp: '2019-10-14T23:04:43Z'
  generation: 7
  namespace: myproject
  labels:
    app: backend
spec:
  strategy:
    type: Rolling
    rollingParams:
      updatePeriodSeconds: 1
      intervalSeconds: 1
      timeoutSeconds: 600
      maxUnavailable: 25%
      maxSurge: 25%
    resources: {}
    activeDeadlineSeconds: 21600
  triggers:
    - type: ConfigChange
    - type: ImageChange
      imageChangeParams:
        automatic: true
        containerNames:
          - backend
        from:
          kind: ImageStreamTag
          namespace: myproject
          name: 'backend:094971ea'
        lastTriggeredImage: >-
          registry.gitlab.com/myproject/backend@sha256:ebce...
  replicas: 1
  revisionHistoryLimit: 10
  test: false
  selector:
    app: backend
    deploymentconfig: backend
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: backend
        deploymentconfig: backend
      annotations:
        openshift.io/generated-by: OpenShiftNewApp
    spec:
      containers:
        - name: backend
          image: >-
            registry.gitlab.com/myproject/backend@sha256:ebce...
          ports:
            - containerPort: 8080
              protocol: TCP
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          imagePullPolicy: IfNotPresent
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      dnsPolicy: ClusterFirst
      securityContext: {}
      schedulerName: default-scheduler
status:
  observedGeneration: 7
  details:
    message: image change
    causes:
      - type: ImageChange
        imageTrigger:
          from:
            kind: DockerImage
            name: >-
              registry.gitlab.com/myproject/backend@sha256:ebce...
  availableReplicas: 1
  unavailableReplicas: 0
  latestVersion: 4
  updatedReplicas: 1
  conditions:
    - type: Available
      status: 'True'
      lastUpdateTime: '2019-10-14T23:57:51Z'
      lastTransitionTime: '2019-10-14T23:57:51Z'
      message: Deployment config has minimum availability.
    - type: Progressing
      status: 'True'
      lastUpdateTime: '2019-10-16T20:09:20Z'
      lastTransitionTime: '2019-10-16T20:09:17Z'
      reason: NewReplicationControllerAvailable
      message: replication controller "backend-4" successfully rolled out
  replicas: 1
  readyReplicas: 1

1 Ответ

1 голос
/ 18 октября 2019

Один из способов «решить» это то, что триггер ImageChange прослушивает что-то другое, а не конкретный идентификатор фиксации. Некоторое логическое имя, которое не существует как тег в докере. Скажите «по умолчанию».

Если вы сделаете это, то в вашем скрипте единственное, что вам нужно сделать, это

    - oc tag registry.gitlab.com/myproject/backend:$CI_COMMIT_SHORT_SHA backend:default

OpenShift позаботится об обновлении образа в DeploymentConfig и развертывании нового развертывания дляВы.

ОП спросили причину, почему не используете последнюю версию. Последнее является своего рода «волшебным» в том смысле, что если вы нажмете на изображение в реестре без тега, он будет называть этот тег последним. Это позволяет очень легко перезаписать его случайно.

Допустим, вы используете «последний» в качестве тега, который вы слушаете в ImageStream. Что произойдет, если кто-то импортирует imageStream? Он выберет последний тег, перезаписав то, что вы пометили вручную.

Если вы хотите, чтобы этот тип управления был в вашем конвейере, используйте имя ImageStreamTag, которого нет в вашем реестре докеров, как я уже говорил выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...