使用 Docker 在 Jenkins 上使用“供应商”目录构建 Go 应用程序

Posted

技术标签:

【中文标题】使用 Docker 在 Jenkins 上使用“供应商”目录构建 Go 应用程序【英文标题】:Building Go app with "vendor" directory on Jenkins with Docker 【发布时间】:2016-12-24 01:41:06 【问题描述】:

我正在尝试使用Jenkinsfiledocker.image().inside 设置一个 Jenkins 流水线来构建和部署我的第一个 Go 项目。我不知道如何去获取vendor/ 目录中的依赖项。

当我运行构建时,我得到了一堆错误:

+ goapp 测试 ./... src/dao/demo_dao.go:8:2:在以下任何一个中都找不到包“github.com/dgrijalva/jwt-go”: /usr/lib/go_appengine/goroot/src/github.com/dgrijalva/jwt-go(来自 $GOROOT) /usr/lib/go_appengine/gopath/src/github.com/dgrijalva/jwt-go(来自 $GOPATH) /workspace/src/github.com/dgrijalva/jwt-go

...为什么不选择 Vendor 目录?

当我输入一些日志时,似乎在运行sh "cd /workspace/src/bitbucket.org/nalbion/go-demo" 之后,下一个sh 命令仍在原来的$WORKSPACE 目录中。我真的很喜欢 Jenkins 文件的想法,但我找不到任何合适的文档。

(编辑 - here 有不错的文档,但 dir("/workspace/src/bitbucket.org/nalbion/go-demo") 似乎不适用于 docker.image().inside)

我的 Docker 文件类似于:

来自 golang:1.6.2 # Google 的 App Engine Go SDK 运行 wget https://storage.googleapis.com/appengine-sdks/featured/go_appengine_sdk_linux_amd64-1.9.40.zip -q -O go_appengine_sdk.zip && \ 解压 -q go_appengine_sdk.zip -d /usr/lib/ && \ rm go_appengine_sdk.zip 环境路径 /usr/lib/go_appengine:/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin: /bin ENV GOPATH /usr/lib/go_appengine/gopath # 添加詹金斯用户 运行 groupadd -g 132 jenkins && useradd -d "/var/jenkins_home" -u 122 -g 132 -m -s /bin/bash jenkins

还有我的 Jenkinsfile:

节点(“码头工人”) currentBuild.result = "成功" 尝试 阶段“结帐” 结帐单片机 阶段“构建和测试” env.WORKSPACE = pwd() docker.image('nalbion/go-web-build:latest').inside( "-v $env.WORKSPACE:/workspace/src/bitbucket.org/nalbion/go-demo " + "-e GOPATH=/usr/lib/go_appengine/gopath:/workspace") // 调试 sh '回声 GOPATH: $GOPATH' sh "ls -al /workspace/src/bitbucket.org/nalbion/go-demo" sh "cd /workspace/src/bitbucket.org/nalbion/go-demo" sh "密码" sh "去检查 ./src/..." sh "goapp 测试 ./..." 阶段“部署到 DEV” docker.image('nalbion/go-web-build').inside sh "goapp deploy --application go-demo --version v$v app.yaml" 超时(时间:5,单位:'DAYS') 输入消息:'批准部署?',提交者:'qa' 阶段“部署到生产” docker.image('nalbion/go-web-build').inside sh "goapp deploy --application go-demo --version v$v app.yaml" 捕捉(错误) currentBuild.result = "失败" // 发送通知 抛出错误

【问题讨论】:

【参考方案1】:

我设法通过在同一 sh 语句中包含 cd 来使其工作:

docker.image('nalbion/go-web-build:latest') .inside("-v $env.WORKSPACE:/workspace/src/bitbucket.org/nalbion/go-demo " + "-e GOPATH=/usr/lib/go_appengine/gopath:/workspace") 嘘""" cd /workspace/src/bitbucket.org/nalbion/go-demo 去检查 ./src/... goapp 测试 ./... """

【讨论】:

以上是关于使用 Docker 在 Jenkins 上使用“供应商”目录构建 Go 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins 在 Windows 上使用 Docker - 无法运行程序“nohup”

dockerupload是干嘛的

使用 Jenkins 和 Docker 构建时“设备上没有剩余空间”

使用 Docker 在 Jenkins 上使用“供应商”目录构建 Go 应用程序

jenkins publish .net core application to linux server

使用docker安装Jenkins