GITLAB CI自动部署容器应用
容器 Docker 越来越受开发者和运维人员的喜爱,更是作为实践 DevOps 的一个中要工具。同时 Gitlab 提供了免费的代码管理服务,其 gitlab-ci 更是提供了强大的自动化 CI/CD 流程功能。
本文以一个静态站点的示例来说明如何使用 gitlab-ci 和 docker 进行容器镜像的构建,以及如何将镜像自动化部署到目标服务器上。
编写Dockerfile 首先在代码库中增加 Dockerfile ,用于描述如何构建应用的容器镜像。以下是一个基于 Hugo 的静态站点应用的示例:
FROM mengzyou/hugo:latest as builder COPY . /app/ RUN hugo FROM nginx:1.16-alpine RUN set -x \ && rm -f /etc/nginx/conf.d/default.conf \ && mkdir -p /usr/share/nginx/html COPY --from=builder /app/nginx-default.conf /etc/nginx/conf.d/default.conf COPY --from=builder /app/public/ /usr/share/nginx/html 其实非常简单,使用了多阶段构建,以 mengzyou/hugo 作为构建镜像,然后将生成的静态文件拷贝到 nginx 镜像中,最终生成静态站点的镜像。
配置Gitlab-ci构建容器镜像 该阶段,在项目根目录添加 .gitlab-ci.yml 文件,示例内容如下:
variables: DOCKER_DRIVER: overlay2 CI_REGISTRY_IMAGE: ${CI_REGISTRY}/mengzyou/app before_script: - echo $CI_JOB_NAME - echo $CI_PROJECT_DIR stages: - build build:docker: stage: build variables: DOCKER_HOST: tcp://docker:2375 image: docker:stable services: - docker:dind script: - echo "Building image - $CI_REGISTRY_IMAGE:latest" - echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY - docker image build --force-rm --no-cache -t $CI_REGISTRY_IMAGE:latest .