Linux安装gitlab+gitlab-runner+docker 实现自动化打包记录(二)

上一章介绍了 如何安装gitlab、gitlab-runner、Docker
Linux安装gitlab+gitlab-runner+docker 实现自动化打包记录(一)
本章以之前完成的golang项目介绍如何实现自动化打包
主要用到两个文件

.gitlab-ci.yml
variables:
  DOCKER_DRIVER: overlay2
  DOCKER_IMAGE_TAG: $DOCKER_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME:$CI_COMMIT_REF_NAME

cache:
  paths:
    - target

stages:
  - package

docker-build:
  stage: package
  only:
    - branches
    - tags
  except:
    - master
  tags:
    - build
  script:
    - docker login -u $DOCKER_REGISTRY_BUILDER -p $DOCKER_REGISTRY_BUILDER_PASSWORD $DOCKER_REGISTRY
    - docker rmi $DOCKER_IMAGE_TAG || true
    - docker build
      --label CI_PROJECT_NAME="$CI_PROJECT_NAME"
      --label CI_PROJECT_NAMESPACE="$CI_PROJECT_NAMESPACE"
      --label CI_COMMIT_SHA="$CI_COMMIT_SHA"
      --label CI_COMMIT_REF_NAME="$CI_COMMIT_REF_NAME"
      --label CI_COMMIT_TITLE="$CI_COMMIT_TITLE"
      --label CI_COMMIT_MESSAGE="$CI_COMMIT_MESSAGE"
      --label CI_PIPELINE_URL="$CI_PIPELINE_URL"
      --label GITLAB_USER_LOGIN="$GITLAB_USER_LOGIN"
      -t $DOCKER_IMAGE_TAG .
    - docker push $DOCKER_IMAGE_TAG
    # 重复向 harbor 推送 ID 相同的镜像,将导致 harbor 不能清理原镜像,因此,对于 review-apps 的镜像,我们同时将其标记到一个 recycle 仓库中
    # 以便后期可以在 harbor 中对其进行删除和垃圾回收
    # 参考 https://github.com/goharbor/harbor/blob/master/docs/user_guide.md#deleting-repositories
    - export datetime=`date +%Y%m%d-%H%M%S`
    - docker tag $DOCKER_IMAGE_TAG $DOCKER_IMAGE_TAG-$datetime
    - docker push $DOCKER_IMAGE_TAG-$datetime
    - docker rmi $DOCKER_IMAGE_TAG-$datetime
    - docker logout $DOCKER_REGISTRY

其中 D O C K E R R E G I S T R Y B U I L D E R 、 DOCKER_REGISTRY_BUILDER 、 DOCKERREGISTRYBUILDERDOCKER_REGISTRY_BUILDER_PASSWORD 、$DOCKER_REGISTRY在gitlab setting-ci/cd-variables设置 为全局变量
Linux安装gitlab+gitlab-runner+docker 实现自动化打包记录(二)_第1张图片

Dockerfile

#源镜像
FROM golang:latest
#设置工作目录
WORKDIR /***
#将服务器的go工程代码加入到docker容器中
ADD . /***
RUN echo "Asia/Shanghai" > /etc/timezone
#设置环境变量
RUN export GO111MODULE=on && export GOPROXY=https://goproxy.cn,direct && go env -w GOPROXY=https://goproxy.io && go env -w GOPRIVATE="*.gitlab.com,*.gitee.com"
# init gomod
RUN go mod init ***
#go构建可执行文件
RUN go build .
#最终运行docker的命令
ENTRYPOINT  ["./***"]

你可能感兴趣的:(环境)