3

我正在尝试设置一个 Jenkins Pipeline 来使用Jenkinsfile和构建和部署我的第一个 Go 项目docker.image().inside 。我不知道如何去获取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

...为什么不选择供应商目录?

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

(编辑-这里有不错的文档,但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: /垃圾桶
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 = "失败"
        // 发送通知
        抛出错误
    }
}
4

1 回答 1

2

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

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 测试 ./...
      """
}
于 2016-08-17T12:35:54.473 回答