dounaoji2054 2016-08-17 11:54
浏览 85
已采纳

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

I'm trying to set up a Jenkins Pipeline to build and deploy my first Go project using a Jenkinsfile and docker.image().inside . I can't figure out how to get go to pick up the dependencies in the vendor/ directory.

When I run the build, I get a bunch of errors:

+ goapp test ./...
src/dao/demo_dao.go:8:2: cannot find package "github.com/dgrijalva/jwt-go" in any of:
    /usr/lib/go_appengine/goroot/src/github.com/dgrijalva/jwt-go (from $GOROOT)
    /usr/lib/go_appengine/gopath/src/github.com/dgrijalva/jwt-go (from $GOPATH)
    /workspace/src/github.com/dgrijalva/jwt-go

...why isn't it picking up the Vendor directory?

When I throw in some logging, it seems that after running sh "cd /workspace/src/bitbucket.org/nalbion/go-demo" the next sh command is still in the original ${WORKSPACE} directory. I really like the idea of the Jenkins file, but I can't find any decent documentation for it.

(Edit - there is decent documentation here but dir("/workspace/src/bitbucket.org/nalbion/go-demo") {} doesn't seem to work within docker.image().inside)

My Docker file resembles:

FROM golang:1.6.2
# Google's App Engine Go SDK
RUN wget https://storage.googleapis.com/appengine-sdks/featured/go_appengine_sdk_linux_amd64-1.9.40.zip -q -O go_appengine_sdk.zip && \
    unzip -q go_appengine_sdk.zip -d /usr/lib/ && \
    rm go_appengine_sdk.zip
ENV PATH /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
# Add Jenkins user
RUN groupadd -g 132 jenkins && useradd -d "/var/jenkins_home" -u 122 -g 132 -m -s /bin/bash jenkins

And my Jenkinsfile:

node('docker') {
    currentBuild.result = "SUCCESS"

    try {
        stage 'Checkout'
        checkout scm

        stage 'Build and Test'
        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") {

            // Debugging
            sh 'echo GOPATH: $GOPATH'
            sh "ls -al /workspace/src/bitbucket.org/nalbion/go-demo"
            sh "cd /workspace/src/bitbucket.org/nalbion/go-demo"
            sh "pwd"

            sh "go vet ./src/..."
            sh "goapp test ./..."
        }

        stage 'Deploy to DEV'
        docker.image('nalbion/go-web-build').inside {
            sh "goapp deploy --application go-demo --version v${v} app.yaml"
        }

        timeout(time:5, unit:'DAYS') {
            input message:'Approve deployment?', submitter: 'qa'
        }

        stage 'Deploy to PROD'
        docker.image('nalbion/go-web-build').inside {
            sh "goapp deploy --application go-demo --version v${v} app.yaml"
        }
    } catch (err) {
        currentBuild.result = "FAILURE"
        // send notifications
        throw err
    }
}
  • 写回答

1条回答 默认 最新

  • drvfqr5609 2016-08-17 12:35
    关注

    I managed to get it working by including the cd in the same sh statement:

    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 """
           cd /workspace/src/bitbucket.org/nalbion/go-demo
           go vet ./src/...
           goapp test ./...
          """
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Arduino,利用modbus的RS485协议,进行对外置的温湿度传感器进行数据读取
  • ¥15 vhdl+MODELSIM
  • ¥20 simulink中怎么使用solve函数?
  • ¥30 dspbuilder中使用signalcompiler时报错Error during compilation: Fitter failed,求解决办法
  • ¥15 gwas 分析-数据质控之过滤稀有突变中出现的问题
  • ¥15 没有注册类 (异常来自 HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
  • ¥15 知识蒸馏实战博客问题
  • ¥15 用PLC设计纸袋糊底机送料系统
  • ¥15 simulink仿真中dtc控制永磁同步电机如何控制开关频率
  • ¥15 用C语言输入方程怎么