From a6291da479001f8d064fbe7d827f0a495aa760f9 Mon Sep 17 00:00:00 2001 From: genofire Date: Thu, 9 Jun 2022 20:50:34 +0200 Subject: [PATCH] feat(ci): build docker image --- .gitlab-ci.yml | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++ Dockerfile | 21 ++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 .gitlab-ci.yml create mode 100644 Dockerfile diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..98131a1 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,58 @@ +image: "golang:latest" + +variables: + DOCKER_IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG + # Tell 'docker:dind' to enable TLS (recommended) + # and generate certificates in the specified directory. + DOCKER_TLS_CERTDIR: "/certs" + +stages: + - test + - build + +test-lint: + stage: test + script: + - go install github.com/client9/misspell/cmd/misspell@latest + - find . -type f -not -path "./webroot/assets" | grep -v "models/.*_testdata.*.go" | xargs misspell -error + - ./.ci/check-gofmt + - ./.ci/check-testfiles + +build-linux: + stage: build + except: + - tags + - master + - main + script: + # build app with version + - go install + - mv "/go/bin/$CI_PROJECT_NAME" "$CI_PROJECT_DIR/$CI_PROJECT_NAME" + artifacts: + paths: + - config_example.toml + - "$CI_PROJECT_NAME" + +build-docker: + stage: build + image: docker:latest + services: + - docker:dind + script: + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + - docker build -t $DOCKER_IMAGE_TAG --build-arg VERSION=$CI_COMMIT_REF_SLUG . + - docker push $DOCKER_IMAGE_TAG + +build-release: + stage: build + only: + - tags + script: + # build app with version + - go install + - mv "/go/bin/$CI_PROJECT_NAME" "$CI_PROJECT_DIR/$CI_PROJECT_NAME" + artifacts: + paths: + - config_example.toml + - "$CI_PROJECT_NAME" + expire_in: never diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..0bf0494 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +## +# Compile application +## +FROM golang:latest AS build-env +WORKDIR /app +COPY . . +# ge dependencies +RUN go mod tidy +# build binary +RUN CGO_ENABLED=0 go build -ldflags="-w -s" -o oven-exporter + + +## +# Build Image +## +FROM scratch +COPY --from=build-env /app/oven-exporter /oven-exporter +COPY --from=build-env /app/config_example.toml /config.toml + +WORKDIR / +ENTRYPOINT ["/server"]