From 293a7d39b0d8a927ab915b980475d2992b0556cf Mon Sep 17 00:00:00 2001 From: Vassiliy Yegorov Date: Tue, 6 Sep 2022 23:55:31 +0700 Subject: [PATCH] init --- ci/.gitlab-ci.yml | 93 ++++++++++++++++++++++++++++++++++++----------- ci/Dockerfile | 25 ++++--------- 2 files changed, 79 insertions(+), 39 deletions(-) diff --git a/ci/.gitlab-ci.yml b/ci/.gitlab-ci.yml index c1f6171..20946c8 100644 --- a/ci/.gitlab-ci.yml +++ b/ci/.gitlab-ci.yml @@ -7,38 +7,89 @@ image: docker:20.10.16 variables: REGISTRY: hub.bildme.ru + GITLAB: git.bildme.ru IMAGE_NAME: $REGISTRY/$CI_PROJECT_PATH:latest - VERSION: 0.0.1 + RELEASE_NAME: go-site + VERSION: 0.0.3 + PACKAGE_REGISTRY_URL: https://${GITLAB}/api/v4/projects/${CI_PROJECT_ID}/packages/generic/${RELEASE_NAME}/${VERSION} stages: - build -# - deploy +- push +- artifacts +- release +- deploy build_main: stage: build - variables: - DOCKER_BASEIMAGE: golang:latest + image: golang:latest + script: + - cd app + - CGO_ENABLED=0 GOOS=linux GO111MODULE=auto go build -a -ldflags="-X 'main.Version=v${VERSION}'" -installsuffix cgo -o go-site . + artifacts: + paths: + - app/go-site + tags: + - docker + +push_image: + stage: push before_script: - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $REGISTRY script: - - docker build --pull --build-arg DOCKER_BASEIMAGE=${DOCKER_BASEIMAGE} -build-arg VERSION=${VERSION} -t $IMAGE_NAME . + - docker build -t $IMAGE_NAME . - docker push $IMAGE_NAME tags: - docker -# deploy_prod: -# image: hub.realmanual.ru/pub/openssh-client:latest -# stage: deploy -# variables: -# DOCKER_SERVER: 192.168.9.199 -# before_script: -# - eval $(ssh-agent -s) -# - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - -# - mkdir -p ~/.ssh -# - chmod 700 ~/.ssh -# - ssh-keyscan ${DOCKER_SERVER} >> ~/.ssh/known_hosts -# - chmod 644 ~/.ssh/known_hosts -# script: -# - ssh root@${DOCKER_SERVER} "docker rm -f main-go; docker pull hub.bildme.ru/firstgroup/go-site && docker run --rm --name main-go -p 3000:3000 hub.bildme.ru/firstgroup/go-site:latest" -# tags: -# - docker +artifacts: + stage: artifacts + rules: + - if: $CI_COMMIT_TAG + when: never + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + before_script: + - apk add curl + script: + - FILE_NAME=${RELEASE_NAME} + - cd app + - 'curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file ${FILE_NAME} ${PACKAGE_REGISTRY_URL}/${FILE_NAME}' + +release: + stage: release + image: registry.gitlab.com/gitlab-org/release-cli:latest + rules: + - if: $CI_COMMIT_TAG + when: never + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + script: + - echo "Release ${RELEASE_NAME}" + release: + name: 'Release $VERSION' + description: 'Release $VERSION' + tag_name: '$VERSION' + ref: '$CI_COMMIT_SHA' + assets: + links: + - name: '${RELEASE_NAME}' + url: '${PACKAGE_REGISTRY_URL}/${RELEASE_NAME}' + +deploy_prod: + image: hub.realmanual.ru/pub/openssh-client:latest + stage: deploy + variables: + DOCKER_SERVER: 192.168.9.199 + before_script: + - eval $(ssh-agent -s) + - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - + - mkdir -p ~/.ssh + - chmod 700 ~/.ssh + - ssh-keyscan ${DOCKER_SERVER} >> ~/.ssh/known_hosts + - chmod 644 ~/.ssh/known_hosts + script: + - ssh root@${DOCKER_SERVER} "docker rm -f main-go; docker pull hub.bildme.ru/firstgroup/go-site && docker run -d --rm --name main-go -p 3000:3000 hub.bildme.ru/firstgroup/go-site:latest" + environment: + name: production + url: http://${DOCKER_SERVER}:3000/ + tags: + - docker diff --git a/ci/Dockerfile b/ci/Dockerfile index 0e18542..16735e0 100644 --- a/ci/Dockerfile +++ b/ci/Dockerfile @@ -1,21 +1,10 @@ -ARG DOCKER_BASEIMAGE -FROM ${DOCKER_BASEIMAGE} - -LABEL maintainer="${DOCKER_MAINTAINER:-vasyakrg@gmail.com}" - -ADD ./app /app/ -WORKDIR /app/ - -ARG VERSION=0.0.1 -ENV VERSION=${VERSION} - -RUN CGO_ENABLED=0 GOOS=linux GO111MODULE=auto go build -a -ldflags="-X 'main.Version=v${VERSION}'" -installsuffix cgo -o main . - - FROM alpine ENV LANGUAGE="ru" -COPY --from=0 /app/ / -RUN apk add --no-cache ca-certificates &&\ - chmod +x main -CMD [ "./main" ] +COPY app/go-site /app/ +WORKDIR /app + +RUN apk add --no-cache ca-certificates &&\ + chmod +x go-site + +CMD [ "./go-site" ]