【发布时间】:2020-12-14 10:15:36
【问题描述】:
我的golang项目依赖librd kafka
当我尝试从我的 jenkin 运行 go vet ./... 或 go test ./... 时,我收到以下错误。我相信这是因为我正在运行./...,但即使我不得不忽略供应商,我也不确定应该是什么,我尝试了go test $(go list ./... | grep -v /vendor/librdkafka),但它没有帮助。
/usr/lib/gcc/x86_64-alpine-linux-musl/9.3.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/gopkg.in/confluentinc/confluent-kafka-go.v1@v1.4.2/kafka/librdkafka/librdkafka_glibc_linux.a(rdkafka_mock_cgrp.o): in function `rd_kafka_mock_cgrp_member_add':
(.text+0x8e5): undefined reference to `__strndup'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.3.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/gopkg.in/confluentinc/confluent-kafka-go.v1@v1.4.2/kafka/librdkafka/librdkafka_glibc_linux.a(rdkafka_mock_cgrp.o): in function `rd_kafka_mock_cgrp_get':
(.text+0xd1e): undefined reference to `__strndup'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.3.0/../../../../x86_64-alpine-linux-musl/bin/ld: (.text+0xd46): undefined reference to `__strndup'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.3.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/gopkg.in/confluentinc/confluent-kafka-go.v1@v1.4.2/kafka/librdkafka/librdkafka_glibc_linux.a(rdkafka_mock_cgrp.o): in function `rd_kafka_mcgrp_rebalance_timer_cb':
(.text+0x13dd): undefined reference to `__strndup'
我想知道在测试我的项目时如何解决 gcc 错误
我的 Dockerfile :
FROM golang:1.14-alpine AS builder
WORKDIR /src
ENV CGO_ENABLED=0
RUN apk add --no-cache git make
RUN go get \
github.com/AlekSi/gocov-xml \
github.com/axw/gocov \
github.com/tebeka/go2xunit \
github.com/wadey/gocovmerge
COPY go.mod go.sum ./
RUN go get -d -v ./...
RUN go mod download
COPY . .
FROM test AS builder
ENV CGO_ENABLED=1
#this config is for lib rd kafka setup
RUN set -ex &&\
apk add --no-progress --no-cache \
gcc \
musl-dev
WORKDIR /src
RUN go install -tags musl ./...
我的詹金斯文件 sn-p
stage("Test") {
agent {
dockerfile {
label 'docker'
additionalBuildArgs '--target test'
args '-v test:/src/test'
reuseNode true
}
}
steps {
parallel(
'Unit Test': {
sh "make ${makeArgs} test/unit-test"
},
Coverage: {
sh "make ${makeArgs} test/coverage"
},
Vet: {
sh "make ${makeArgs} test/vet"
}
)
}
post {
always {
junit 'test/*xml'
publishHTML([allowMissing: false, alwaysLinkToLastBuild: false, keepAll: false, reportDir: 'test', reportFiles: 'coverage.html', reportName: 'Code Coverage Report'])
sh "make ${makeArgs} clean"
}
}
}
【问题讨论】:
-
使用 -run 标志并指定正则表达式模式以跳过给定的供应商。看看this,可能会有帮助。
-
我的项目有多个测试,当我从 jenkins 管道运行时,我想运行我的项目中的所有测试并忽略依赖的 libradkafka / gcc 测试。
-run将帮助我只有它有一个我想运行的测试,对....但我有不止一个 -
对于选项 `-run regex`,我必须为我的所有测试引入一个唯一的命名,以便 regex 可以选择它。这是我想避免的事情。
-
为什么不编写一个 bash 脚本来访问所需的目录并调用
go test?
标签: go apache-kafka dockerfile librdkafka