将无人机 8.5 构建到容器中失败,并显示"没有这样的文件或目录"



我有一个自动化的构建系统,我将Drone.io 8.5 Docs置于构建上,并将它们放在输出Golang构建的二进制的脚本中。

然后我使用无人机(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"

基于该版本的官方码头(8.5,下面),无人机Docker插件构建了我的容器:

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"]

我一生无法看到我的问题,看起来二进制会在正确的位置。唯一的问题是构建环境,但我手动以相同的结果破坏了这些步骤。

您的构建问题是您没有构建可以在Docker容器内执行的二进制文件,因此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

适当的方法(更复杂)的方法是首先使用构建步骤的多阶段docerfile,请参见例如此博客文章带有示例。

相关内容

  • 没有找到相关文章

最新更新