Я пытаюсь создать и отправить образ докера с помощью Knative. У меня есть Java-приложение maven и многоступенчатое Dockerfile
, которое создает и запускает приложение:
WORKDIR /usr/app
COPY pom.xml ./
COPY src/ ./src/
RUN mvn package
FROM openjdk:8-jdk-alpine
WORKDIR /usr/app
ENV PORT 8080
COPY --from=build /usr/app/target/*.jar ./app.jar
CMD ["java", "-jar", "/usr/app/app.jar"]
Я хочу собрать и отправить приложение в репозиторий gcr. Итак, у меня есть ServiceAccount
и Build
:
apiVersion: v1
data:
password: ENCODED_PASS
username: ENCODED_USERNAME
kind: Secret
metadata:
annotations:
build.knative.dev/docker-0: https://gcr.io
name: knative-build-auth
namespace: default
resourceVersion: "3001"
selfLink: /api/v1/namespaces/default/secrets/knative-build-auth
type: kubernetes.io/basic-auth
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: knative-build
secrets:
- name: knative-build-auth
---
apiVersion: build.knative.dev/v1alpha1
kind: Build
metadata:
name: example-build
spec:
serviceAccountName: knative-build
source:
git:
url: https://github.com/pathtorepo.git
revision: master
steps:
- name: build-and-push
image: gcr.io/kaniko-project/executor:v0.1.0
args:
- --dockerfile=/workspace/Dockerfile
- --destination=gcr.io/$projectid/my-build
Я пытался использовать kaniko-project
для этого. Однако, есть некоторые проблемы с его использованием. Версия 0.1.0
работает с простой Dockerfile
:
FROM ubuntu
CMD ["/bin/sh", "-c", "echo Hiiiiiii"]
Но не поддерживает многоступенчатые Dockerfile
s и файлы с ошибкой доступа запрещены. Любая другая версия kaniko
не работает и дает сбой.
В журналах версии 0.1.0 многоэтапной сборки я вижу следующую ошибку:
2019/07/02 14:43:13 Не найдено подходящих учетных данных для index.docker.io, возвращаясь к анонимному
time = "2019-07-02T14: 43: 15Z" level = info msg = "сохранение зависимостей []"
time = "2019-07-02T14: 43: 15Z" уровень = ошибка msg = "копирование не удалось: исходные файлы не указаны"
и статус сборки:
conditions:
- lastTransitionTime: "2019-07-02T14:43:16Z"
message: 'build step "build-step-build-and-push" exited with code 1 (image: "docker-pullable://gcr.io/kaniko-project/executor@sha256:501056bf52f3a96f151ccbeb028715330d5d5aa6647e7572ce6c6c55f91ab374");
for logs run: kubectl -n default logs example-build-pod-7d95a9 -c build-step-build-and-push'
status: "False"
type: Succeeded
Для любых других версий kaniko
выше 0.1.0 здесь есть ошибка:
error pushing image: failed to push to destination gcr.io/star-wars-istio/reverse-function:latest: DENIED: Access denied.
Также в логах есть что-то вроде:
ERROR: logging before flag.Parse: E0702 14:54:23.003241 1 metadata.go:142] while reading 'google-dockercfg' metadata: http status code: 404 while fetching url http://metadata.google.internal./computeMetadata/v1/instance/attributes/google-dockercfg
Я нашел проблему в их репо, которая закрыта. Однако это все еще воспроизводимо.
Вот GitHub выпуск
Я могу подтвердить, что мой ServiceAccount
правильный, так как я могу собрать и протолкнуть простой образ докера с этой конфигурацией.
Я также пробовал разные образы для сборки и push. Например, тот, который описан здесь .
Несмотря на то, что я выполнил все описанные здесь шаги (создавая ServiceAccount
, следуя инструкциям, который работает с простым Dockerfile), он все равно не работает, когда я пытаюсь создать и отправить свое приложение. Поэтому, когда я применяю следующую сборку:
apiVersion: build.knative.dev/v1alpha1
kind: Build
metadata:
name: reverse-build
spec:
serviceAccountName: knative-build
source:
git:
url: https://github.com/lvivJavaClub/spring-cloud-functions.git
revision: init-knative
subPath: reverse-function
steps:
- name: build-and-push
image: gcr.io/cloud-builders/mvn
args: ["compile", "jib:build", "-Dimage=gcr.io/star-wars-istio/reverse-function"]
Сборка не удалась, и я получаю сообщение об ошибке в журналах:
[ERROR] Failed to execute goal com.google.cloud.tools:jib-maven-plugin:0.9.3:build (default-cli) on project reverse: Build image failed, perhaps you should set a credential helper name with the configuration '<from><credHelper>' or set credentials for 'gcr.io' in your Maven settings: com.google.api.client.http.HttpResponseException: 401 Unauthorized
[ERROR] {"errors":[{"code":"UNAUTHORIZED","message":"You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication"}]}