Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
whqwjb
go-ethereum
提交
4695117f
G
go-ethereum
项目概览
whqwjb
/
go-ethereum
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
go-ethereum
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
4695117f
编写于
6月 18, 2021
作者:
P
Péter Szilágyi
提交者:
GitHub
6月 18, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #23069 from karalabe/docker-multi-arch
travis, build: add support for multi-arch docker images
上级
ef946a6c
e9f99d1c
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
86 addition
and
21 deletion
+86
-21
.travis.yml
.travis.yml
+35
-2
build/ci.go
build/ci.go
+51
-19
未找到文件。
.travis.yml
浏览文件 @
4695117f
...
...
@@ -24,7 +24,38 @@ jobs:
script
:
-
go run build/ci.go lint
# This builder does the Docker Hub build and upload for amd64
# These builders create the Docker sub-images for multi-arch push
-
stage
:
prebuild
if
:
type = push
os
:
linux
arch
:
amd64
dist
:
bionic
go
:
1.16.x
env
:
-
docker
services
:
-
docker
git
:
submodules
:
false
# avoid cloning ethereum/tests
script
:
-
go run build/ci.go docker -image -upload karalabe/geth-docker-test
-
stage
:
prebuild
if
:
type = push
os
:
linux
arch
:
arm64
dist
:
bionic
go
:
1.16.x
env
:
-
docker
services
:
-
docker
git
:
submodules
:
false
# avoid cloning ethereum/tests
script
:
-
go run build/ci.go docker -image -upload karalabe/geth-docker-test
# This builder does the Docker Hub multi-arch image
-
stage
:
build
if
:
type = push
os
:
linux
...
...
@@ -36,8 +67,10 @@ jobs:
-
docker
git
:
submodules
:
false
# avoid cloning ethereum/tests
before_install
:
-
export DOCKER_CLI_EXPERIMENTAL=enabled
script
:
-
go run build/ci.go docker -upload karalabe/geth-docker-test
-
go run build/ci.go docker -
manifest amd64,arm64 -
upload karalabe/geth-docker-test
# This builder does the Ubuntu PPA upload
-
stage
:
build
...
...
build/ci.go
浏览文件 @
4695117f
...
...
@@ -183,7 +183,7 @@ func main() {
case
"archive"
:
doArchive
(
os
.
Args
[
2
:
])
case
"docker"
:
doDocker
Image
(
os
.
Args
[
2
:
])
doDocker
(
os
.
Args
[
2
:
])
case
"debsrc"
:
doDebianSource
(
os
.
Args
[
2
:
])
case
"nsis"
:
...
...
@@ -455,9 +455,11 @@ func maybeSkipArchive(env build.Environment) {
}
// Builds the docker images and optionally uploads them to Docker Hub.
func
doDocker
Image
(
cmdline
[]
string
)
{
func
doDocker
(
cmdline
[]
string
)
{
var
(
upload
=
flag
.
String
(
"upload"
,
""
,
`Where to upload the docker image (usually "ethereum/client-go")`
)
image
=
flag
.
Bool
(
"image"
,
false
,
`Whether to build and push an arch specific docker image`
)
manifest
=
flag
.
String
(
"manifest"
,
""
,
`Push a multi-arch docker image for the specified architectures (usually "amd64,arm64")`
)
upload
=
flag
.
String
(
"upload"
,
""
,
`Where to upload the docker image (usually "ethereum/client-go")`
)
)
flag
.
CommandLine
.
Parse
(
cmdline
)
...
...
@@ -465,6 +467,15 @@ func doDockerImage(cmdline []string) {
env
:=
build
.
Env
()
maybeSkipArchive
(
env
)
// Retrieve the upload credentials and authenticate
user
:=
getenvBase64
(
"DOCKER_HUB_USERNAME"
)
pass
:=
getenvBase64
(
"DOCKER_HUB_PASSWORD"
)
if
len
(
user
)
>
0
&&
len
(
pass
)
>
0
{
auther
:=
exec
.
Command
(
"docker"
,
"login"
,
"-u"
,
string
(
user
),
"--password-stdin"
)
auther
.
Stdin
=
bytes
.
NewReader
(
pass
)
build
.
MustRun
(
auther
)
}
// Retrieve the version infos to build and push to the following paths:
// - ethereum/client-go:latest - Pushes to the master branch, Geth only
// - ethereum/client-go:stable - Version tag publish on GitHub, Geth only
...
...
@@ -482,25 +493,46 @@ func doDockerImage(cmdline []string) {
case
strings
.
HasPrefix
(
env
.
Tag
,
"v1."
)
:
tags
=
[]
string
{
"stable"
,
fmt
.
Sprintf
(
"release-1.%d"
,
params
.
VersionMinor
),
params
.
Version
}
}
// Build the docker images via CLI (don't pull in the `moby` dep to call 3 commands)
build
.
MustRunCommand
(
"docker"
,
"build"
,
"--tag"
,
fmt
.
Sprintf
(
"%s:TAG"
,
*
upload
),
"."
)
build
.
MustRunCommand
(
"docker"
,
"build"
,
"--tag"
,
fmt
.
Sprintf
(
"%s:alltools-TAG"
,
*
upload
),
"-f"
,
"Dockerfile.alltools"
,
"."
)
// If architecture specific image builds are requested, build and push them
if
*
image
{
build
.
MustRunCommand
(
"docker"
,
"build"
,
"--tag"
,
fmt
.
Sprintf
(
"%s:TAG"
,
*
upload
),
"."
)
build
.
MustRunCommand
(
"docker"
,
"build"
,
"--tag"
,
fmt
.
Sprintf
(
"%s:alltools-TAG"
,
*
upload
),
"-f"
,
"Dockerfile.alltools"
,
"."
)
// Retrieve the upload credentials and authenticate
user
:=
getenvBase64
(
"DOCKER_HUB_USERNAME"
)
pass
:=
getenvBase64
(
"DOCKER_HUB_PASSWORD"
)
// Tag and upload the images to Docker Hub
for
_
,
tag
:=
range
tags
{
gethImage
:=
fmt
.
Sprintf
(
"%s:%s-%s"
,
*
upload
,
tag
,
runtime
.
GOARCH
)
toolImage
:=
fmt
.
Sprintf
(
"%s:alltools-%s-%s"
,
*
upload
,
tag
,
runtime
.
GOARCH
)
if
len
(
user
)
>
0
&&
len
(
pass
)
>
0
{
auther
:=
exec
.
Command
(
"docker"
,
"login"
,
"-u"
,
string
(
user
),
"--password-stdin"
)
auther
.
Stdin
=
bytes
.
NewReader
(
pass
)
build
.
MustRun
(
auther
)
build
.
MustRunCommand
(
"docker"
,
"image"
,
"tag"
,
fmt
.
Sprintf
(
"%s:TAG"
,
*
upload
),
gethImage
)
build
.
MustRunCommand
(
"docker"
,
"image"
,
"tag"
,
fmt
.
Sprintf
(
"%s:alltools-TAG"
,
*
upload
),
toolImage
)
build
.
MustRunCommand
(
"docker"
,
"push"
,
gethImage
)
build
.
MustRunCommand
(
"docker"
,
"push"
,
toolImage
)
}
}
// Tag and upload the images to Docker Hub
for
_
,
tag
:=
range
tags
{
build
.
MustRunCommand
(
"docker"
,
"image"
,
"tag"
,
fmt
.
Sprintf
(
"%s:TAG"
,
*
upload
),
fmt
.
Sprintf
(
"%s:%s"
,
*
upload
,
tag
))
build
.
MustRunCommand
(
"docker"
,
"image"
,
"tag"
,
fmt
.
Sprintf
(
"%s:alltools-TAG"
,
*
upload
),
fmt
.
Sprintf
(
"%s:alltools-%s"
,
*
upload
,
tag
))
build
.
MustRunCommand
(
"docker"
,
"push"
,
fmt
.
Sprintf
(
"%s:%s"
,
*
upload
,
tag
))
build
.
MustRunCommand
(
"docker"
,
"push"
,
fmt
.
Sprintf
(
"%s:alltools-%s"
,
*
upload
,
tag
))
// If multi-arch image manifest push is requested, assemble it
if
len
(
*
manifest
)
!=
0
{
// Assemble and push the Geth manifest image
for
_
,
tag
:=
range
tags
{
gethImage
:=
fmt
.
Sprintf
(
"%s:%s"
,
*
upload
,
tag
)
var
gethSubImages
[]
string
for
_
,
arch
:=
range
strings
.
Split
(
*
manifest
,
","
)
{
gethSubImages
=
append
(
gethSubImages
,
gethImage
+
"-"
+
arch
)
}
build
.
MustRunCommand
(
"docker"
,
append
([]
string
{
"manifest"
,
"create"
,
gethImage
},
gethSubImages
...
)
...
)
build
.
MustRunCommand
(
"docker"
,
"manifest"
,
"push"
,
gethImage
)
}
// Assemble and push the alltools manifest image
for
_
,
tag
:=
range
tags
{
toolImage
:=
fmt
.
Sprintf
(
"%s:alltools-%s"
,
*
upload
,
tag
)
var
toolSubImages
[]
string
for
_
,
arch
:=
range
strings
.
Split
(
*
manifest
,
","
)
{
toolSubImages
=
append
(
toolSubImages
,
toolImage
+
"-"
+
arch
)
}
build
.
MustRunCommand
(
"docker"
,
append
([]
string
{
"manifest"
,
"create"
,
toolImage
},
toolSubImages
...
)
...
)
build
.
MustRunCommand
(
"docker"
,
"manifest"
,
"push"
,
toolImage
)
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录