48 lines
2.0 KiB
Plaintext
48 lines
2.0 KiB
Plaintext
# tools and packages from base image
|
|
FROM ${build_registry}/build/golang:${version}-alpine3.18${kafka} AS builder
|
|
|
|
<% if(module_property.kafka) { println "ENV GOPROXY=${go_proxy},direct CGO_ENABLED=1 GOOS=linux"} else { println "ENV GOPROXY=${go_proxy},direct CGO_ENABLED=0 GOOS=linux"} %>
|
|
|
|
# Following steps will help in downloading dependencies for the project
|
|
COPY id_github_jenkins /root/.ssh/id_rsa
|
|
|
|
RUN chmod 600 /root/.ssh/id_rsa && \
|
|
ssh-keyscan github.com >> /root/.ssh/known_hosts && \
|
|
git config --global url."git@github.com:".insteadOf "https://github.com/"
|
|
|
|
# The tar file contains only the go.mod and go.sum files, it is generated as part of Jenkins build.
|
|
ADD only-mods.tar /app/
|
|
|
|
# directory inside container and default destination for all subsequent commands
|
|
<% if (base_dir) { println "WORKDIR /app/${base_dir}"} else { println "WORKDIR /app/"} %>
|
|
|
|
# downloading all the dependencies
|
|
RUN --mount=type=cache,target=/go/pkg/mod,id=${repo_name} \
|
|
--mount=type=cache,target=/root/.cache/go-build,id=${repo_name}-build \
|
|
go env -w GOPRIVATE=github.com/Meesho/* && go mod download
|
|
|
|
# copying the source code
|
|
COPY . /app/
|
|
|
|
# building the code for linux OS
|
|
RUN --mount=type=cache,target=/go/pkg/mod,id=${repo_name} \
|
|
--mount=type=cache,target=/root/.cache/go-build,id=${repo_name}-build \
|
|
go mod tidy && go build -tags musl --ldflags "-extldflags -static" -v -o /app/server cmd/${module}/main.go
|
|
|
|
# deploy multistage
|
|
FROM ${build_registry}/build/debian:10-slim-v1
|
|
|
|
# install an up-to-date, properly rehashed CA trust store in the runtime image
|
|
# instead of copying the stale Alpine builder bundle (DEVOPS-30300)
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends ca-certificates \
|
|
&& update-ca-certificates \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# copy the binary to the production image from the builder stage.
|
|
COPY --from=builder /app/server /app/server
|
|
<% if (copy_file) { print "COPY copied_files/* $copy_target" } %>
|
|
<% add_files.each { print "COPY ${it.path} ${it.target}\n" } %>
|
|
# running the binary
|
|
CMD ["/app/server"]
|