Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
4695117f
Unverified
Commit
4695117f
authored
Jun 18, 2021
by
Péter Szilágyi
Committed by
GitHub
Jun 18, 2021
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #23069 from karalabe/docker-multi-arch
travis, build: add support for multi-arch docker images
parents
ef946a6c
e9f99d1c
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
86 additions
and
21 deletions
+86
-21
.travis.yml
.travis.yml
+35
-2
ci.go
build/ci.go
+51
-19
No files found.
.travis.yml
View file @
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
View file @
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
)
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment