Сборка беспилотника 8.5 в контейнер завершается с ошибкой «нет такого файла или каталога» - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть автоматизированная система сборки, и я собрал документы drone.io 8.5 по сборке и поместил их в скрипт, который выводит двоичный файл сборки golang.

Затем я использую drone (ha) для сборкиDockefile, который в конечном итоге используется в производстве.

Я пытаюсь обновить дрон, используя дрон для создания новых контейнеров дронов, но все они колеблются с одной и той же ошибкой:

standard_init_linux.go:185: exec user process caused "no such file or directory"

Казалось быдля меня все в нужном месте.

Мой скрипт сборки извлекает нужный мне SHA и выполняет шаги сборки:

#! /bin/bash

set -e
set -u

PKG=github.com/drone/drone
REPO=https://${PKG}.git
SHA=81103a98208b0bfc76be5b07194f359fbc80183b
PATH=$GOPATH/bin:$PATH

cd $GOPATH
git clone $REPO src/${PKG}
cd src/${PKG}
git checkout -qf $SHA

# setup drone
go get -u github.com/drone/drone-ui/dist
go get -u golang.org/x/net/context
go get -u golang.org/x/net/context/ctxhttp
go get -u github.com/golang/protobuf/proto
go get -u github.com/golang/protobuf/protoc-gen-go

go install github.com/drone/drone/cmd/drone-agent
go install github.com/drone/drone/cmd/drone-server

mkdir release
cp $GOPATH/bin/drone-server release/drone-server

echo "Complete"

Плагин drone docker создает мой контейнер на основе официального файла Docker этого выпуска (8.5, которыйниже):

docker:
  image: plugins/docker
  repo: myprivatereg.com/org/docker-drone
  dockerfile: /drone/src/github.com/drone/drone/Dockerfile
  context: /drone/src/github.com/drone/drone
  tags:
    - ${DRONE_BRANCH}-latest
    - ${DRONE_COMMIT}

Dockerfile в этом случае:

# docker build --rm -t drone/drone .

FROM drone/ca-certs
EXPOSE 8000 9000 80 443

ENV DATABASE_DRIVER=sqlite3
ENV DATABASE_CONFIG=/var/lib/drone/drone.sqlite
ENV GODEBUG=netdns=go
ENV XDG_CACHE_HOME /var/lib/drone

ADD release/drone-server /bin/

ENTRYPOINT ["/bin/drone-server"]

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

1 Ответ

0 голосов
/ 07 марта 2019

Проблема с вашей сборкой заключается в том, что вы не создаете двоичный файл, который может быть выполнен внутри контейнера докера, поэтому возникает ошибка exec user process.

Быстрое решение вашей проблемы - добавить кроссфлаги компиляции на ваш go install.Это также приведет к тому, что двоичный файл будет помещен в несколько другое место, поэтому ваш файл сборки будет выглядеть следующим образом:

GOOS=linux GOARCH=386 go install github.com/drone/drone/cmd/drone-agent
GOOS=linux GOARCH=386 go install github.com/drone/drone/cmd/drone-server

mkdir release
cp $GOPATH/bin/linux_386/drone-server release/drone-server

Правильный (и более сложный) способ решения этой проблемы - использование несколькихПодготовьте Dockerfile с первым шагом сборки, см., например, это сообщение в блоге с примером.

...