Как передать тег изображения Docker в веб-перехватчик Spinnaker, чтобы запустить конвейер с этапом * Выполнить задание *

У меня есть Spinnaker Pipeline с одним этапом типа Run Job (запускает контейнер). Эта конфигурация имеет имя образа, который запускается, но в теге конкретно указано, что он будет разрешен во время выполнения. Я создал триггер Docker Registry, который действительно разрешает имя тега самостоятельно. Когда я запускаю выполнение вручную, в диалоговом окне отображается раскрывающийся список для выбора тега (этого не происходит, если триггер Docker Registry не настроен). До этого момента оба триггера Docker Registry и Выполнение вручную работают нормально.

Проблема возникает в триггере веб-перехватчика. Я получаю Status: TERMINAL с сообщением:

No tag found for image gcr.io/xxxx in trigger context.

Я пробовал передать тег в параметрах. Не работает.


person eriel marimon    schedule 26.06.2019    source источник
comment
Не могли бы вы поделиться json-версией вашего конвейера?   -  person RocketRaccoon    schedule 01.07.2019


Ответы (2)


Это происходит потому, что триггер веб-перехватчика не предоставляет артефакта докера для вашего конвейера.

Чтобы решить эту проблему, вы можете предоставить артефакт по умолчанию.

Второй вариант - предоставить описание артефакта через веб-перехватчик. Добавьте свой докер-артефакт в «Ограничения артефакта» в Spinnaker:


  "expectedArtifacts": [
    {
      "displayName": "docker-image",
      "id": "artifact-id",
      "matchArtifact": {
        "id": "match-artifact-id",
        "type": "docker/image"
      },
      "useDefaultArtifact": false,
      "usePriorArtifact": false
    }
  ]

...

    {
      "enabled": true,
      "expectedArtifactIds": [
        "artifact-id"
      ],
      "payloadConstraints": {},
      "source": "test",
      "type": "webhook"
    }

и добавить полезную нагрузку к вашему запросу:

POST http://spinnaker.cluster.local/webhooks/webhook/test
Content-Type: application/json

{
  "artifacts": [
    {
      "name": "docker-registry.local/org/app",
      "reference": "docker-registry.local/org/app:1.0.0",
      "type": "docker/image",
      "version": "1.0.0"
    }
  ]
}
person RocketRaccoon    schedule 04.07.2019

У меня также было аналогичное требование для этапа webhooks + Run Job, используя выражения спинакера, которые помогли.

Решили это, выполнив следующие действия:

  1. Добавьте оба автоматических триггера - реестр Docker и Webhooks
"triggers": [
    {
      "account": "gcr",
      "enabled": true,
      "expectedArtifactIds": [
        "ARTIFACT_ID_PLACEHOLDER"
      ],
      "fromTrigger": true,
      "organization": "ORG_PLACEHOLDER",
      "registry": "gcr.io",
      "repository": "ORG_PLACEHOLDER/IMAGE_NAME_PLACEHOLDER",
      "tag": "${trigger['artifacts'][0]['version']}",
      "type": "docker"
    },
    {
      "enabled": true,
      "expectedArtifactIds": [
        "ARTIFACT_ID_PLACEHOLDER"
      ],
      "source": "WEBHOOK_PLACEHOLDER",
      "type": "webhook"
    }
  ]
  1. Добавьте ожидаемые артефакты
"expectedArtifacts": [
    {
      "defaultArtifact": {},
      "displayName": "gcr.io/ORG_PLACEHOLDER/IMAGE_NAME_PLACEHOLDER",
      "id": "ARTIFACT_ID_PLACEHOLDER",
      "matchArtifact": {
        "artifactAccount": "docker-registry",
        "id": "MATCH_ARTIFACT_ID_PLACEHOLDER",
        "name": "gcr.io/ORG_PLACEHOLDER/IMAGE_NAME_PLACEHOLDER",
        "type": "docker/image"
      },
      "useDefaultArtifact": true,
      "usePriorArtifact": false
    }
  ]
  1. Обновите imageDescription
    "imageDescription": {
       "account": "gcr",
       "fromTrigger": false,
       "imageId": "gcr.io/ORG_PLACEHOLDER/IMAGE_NAME_PLACEHOLDER:${trigger['artifacts'][0]['version']}",
       "registry": "gcr.io",
       "repository": "gcr.io/ORG_PLACEHOLDER/IMAGE_NAME_PLACEHOLDER",
       "tag": "${trigger['artifacts'][0]['version']}"
    }

Окончательный JSON:

{
  "appConfig": {},
  "expectedArtifacts": [
    {
      "defaultArtifact": {},
      "displayName": "gcr.io/ORG_PLACEHOLDER/IMAGE_NAME_PLACEHOLDER",
      "id": "ARTIFACT_ID_PLACEHOLDER",
      "matchArtifact": {
        "artifactAccount": "docker-registry",
        "id": "MATCH_ARTIFACT_ID_PLACEHOLDER",
        "name": "gcr.io/ORG_PLACEHOLDER/IMAGE_NAME_PLACEHOLDER",
        "type": "docker/image"
      },
      "useDefaultArtifact": true,
      "usePriorArtifact": false
    }
  ],
  "keepWaitingPipelines": false,
  "lastModifiedBy": "",
  "limitConcurrent": true,
  "spelEvaluator": "v4",
  "stages": [
    {
      "account": "ACCOUNT_PLACEHOLDER",
      "annotations": {},
      "application": "APPLICATIONNAME_PLACEHOLDER",
      "cloudProvider": "kubernetes",
      "cloudProviderType": "kubernetes",
      "containers": [
        {
          "args": [],
          "command": [],
          "envFrom": [],
          "envVars": [],
          "imageDescription": {
            "account": "gcr",
            "fromTrigger": false,
            "imageId": "gcr.io/ORG_PLACEHOLDER/IMAGE_NAME_PLACEHOLDER${trigger['artifacts'][0]['version']}",
            "registry": "gcr.io",
            "repository": "gcr.io/ORG_PLACEHOLDER/IMAGE_NAME_PLACEHOLDER",
            "tag": "${trigger['artifacts'][0]['version']}"
          },
          "imagePullPolicy": "ALWAYS",
          "limits": {},
          "name": "CONTAINER_NAME_PLACEHOLDER",
          "ports": [
            {
              "containerPort": 80,
              "name": "http",
              "protocol": "TCP"
            }
          ],
          "requests": {},
          "volumeMounts": []
        }
      ],
      "dnsPolicy": "ClusterFirst",
      "expectedArtifacts": [
        {
          "defaultArtifact": {},
          "displayName": "gcr.io/ORG_PLACEHOLDER/IMAGE_NAME_PLACEHOLDER",
          "id": "ARTIFACT_ID_PLACEHOLDER",
          "matchArtifact": {
            "artifactAccount": "docker-registry",
            "id": "MATCH_ARTIFACT_ID_PLACEHOLDER",
            "name": "gcr.io/ORG_PLACEHOLDER/IMAGE_NAME_PLACEHOLDER",
            "type": "docker/image"
          },
          "useDefaultArtifact": false,
          "usePriorArtifact": false
        }
      ],
      "labels": {},
      "name": "STAGE_NAME_PLACEHOLDER",
      "namespace": "default",
      "nodeSelector": {},
      "refId": "1",
      "requisiteStageRefIds": [],
      "serviceAccountName": "",
      "type": "runJob",
      "volumeSources": []
    }
  ],
  "triggers": [
    {
      "account": "gcr",
      "enabled": true,
      "expectedArtifactIds": [
        "ARTIFACT_ID_PLACEHOLDER"
      ],
      "fromTrigger": true,
      "organization": "ORG_PLACEHOLDER",
      "registry": "gcr.io",
      "repository": "ORG_PLACEHOLDER/IMAGE_NAME_PLACEHOLDER",
      "tag": "${trigger['artifacts'][0]['version']}",
      "type": "docker"
    },
    {
      "enabled": true,
      "expectedArtifactIds": [
        "ARTIFACT_ID_PLACEHOLDER"
      ],
      "source": "WEBHOOK_PLACEHOLDER",
      "type": "webhook"
    }
  ],
  "updateTs": ""
}

Примечание. Замените XXXX_PLACEHOLDER, например ORG_PLACEHOLDER, IMAGE_NAME_PLACEHOLDER и т. д., в соответствии с вашими требованиями в приведенных выше конфигурациях JSON.

person Prashanth H    schedule 02.02.2021