- gorm v2がgo v1.14以降じゃないとビルドできない
- Jenkinsサーバーがgo v1.12でgo testのときにエラーがでる
- docker imageのビルドの時にgo imageでgo testがしたいができるのか?
- テストが落ちたらビルドも止まるか
試作コード
cmd/main.go
package main
import (
"docker-gotest/service"
"fmt"
)
func main() {
_ = service.Add(1, 2)
fmt.Println("Hello World")
}
service/calc.go
package service
func Add(a int, b int) int {
return a + b
}
service/calc_test.go
package service
import "testing"
func Test_Add(t *testing.T) {
result := Add(1, 2)
if result != 3 {
t.Errorf("Error")
}
}
Dockerfile
FROM golang:1.14.4 as builder
WORKDIR /go/src
COPY . ./
RUN go test ./...
ARG CGO_ENABLED=0
ARG GOOS=linux
ARG GOARCH=amd64
RUN go build -o /go/bin/main -ldflags '-s -w' cmd/main.go
FROM scratch as runner
COPY --from=builder /go/bin/main /app/main
ENTRYPOINT ["/app/main"]
結果
- テストも動いて失敗したら止まることを確認
- テストが通ればビルドに進む
- テストのログは出力される
感想
- あれこれぐぐるより作って動かしたほうが早いときもある