前端配置项:Gitlab,Traefik,Docker

在每个自重的项目中,质量检查工程师都必须参与。 他们每天都将面对在单独的分支机构中验证任务完成情况的任务。 通常,切换到所需分支,组装和测试的过程会花费大量时间,此外,在本地并不总是能够完全重建最完全相同的战斗环境。

本文的目的是展示一种用于在多个分支上设置支架的简单技术。 本文是由开发人员的开发人员撰写的,因此对于专业的DevOps工程师来说不太可能引起人们的极大兴趣。

要求:

  • Gitlab(裸金属/云)
  • 专用服务器
  • 免费域名

第一步:配置Gitlab


  1. 在专用服务器上安装Gitlab Runner
  2. 创建一个支持Docker映像构建的工作程序
  3. 启用容器注册表

第二步:服务器设置


  1. 安装Docker
  2. 安装撰写
  3. 创建一个用户:

    #     ,      $ sudo adduser deployer $ sudo groupadd docker $ sudo usermod -aG docker deployer #  ssh  $ su deployer $ ssh-keygen -t rsa (when asked for a passphrase, enter no passphrase) #          $ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys 

  4. 设置traefik(服务器根据其容器的标签(标签)将请求代理到Docker容器):

     $ sudo mkdir -p /opt/traefik $ docker network create web #   docker-compose & traefik         

    /opt/traefik/docker-compose.yml

     version: '2' services: traefik: image: traefik:1.4.6 restart: always ports: - 80:80 networks: - web volumes: - /var/run/docker.sock:/var/run/docker.sock - ./traefik.toml:/traefik.toml container_name: traefik networks: web: external: true 

    /opt/traefik/traefik.toml

    用您的域替换DOMAIN.COM。

     debug = true checkNewVersion = true logLevel = "ERROR" defaultEntryPoints = ["http"] [entryPoints] [entryPoints.http] address = ":80" [retry] [docker] endpoint = "unix:///var/run/docker.sock" domain = "DOMAIN.COM" watch = true exposedbydefault = false 

  5. 运行traefik:

     cd /opt/traefik && docker-compose up -d 

  6. 为DOMAIN.COM添加一条记录,格式为“ *”-专用服务器的IP。

第三步:准备存储库


  1. 添加到Dockerfile存储库的根目录:

     FROM node:8.9 as build-deps WORKDIR /usr/src/app COPY package.json ./ RUN npm i COPY . ./ RUN npm run build FROM nginx:1.12-alpine COPY --from=build-deps /usr/src/app/dist /usr/share/nginx/html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] 

    改变

     npm run build 

    给您的构建团队。 以相同的方式编辑路径。

     /usr/src/app/dist 

    dist更改为您的构建目录。
    您可以在此处阅读有关结构和dockerfire命令的更多信息。
  2. 在图像组合部分添加.gitlab-ci.yml文件:

     image: docker:stable variables: DOCKER_HOST: tcp://docker:2375/ DOCKER_DRIVER: overlay2 GITLAB_DOMAIN: gitlab.com services: - docker:dind stages: - build build_staging: stage: build script: - export GITLAB_DOMAIN=gitlab.com - export CONTAINER_IMAGE=$GITLAB_DOMAIN/frontend/main/image - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $GITLAB_DOMAIN - docker pull $CONTAINER_IMAGE:$CI_COMMIT_REF_SLUG || true - export URL="Host:${CI_COMMIT_REF_NAME}.tests.DOMAIN.COM" - docker build -t $CONTAINER_IMAGE:$CI_COMMIT_REF_SLUG . --label "traefik.backend=${CI_COMMIT_REF_NAME}" --label "traefik.frontend.rule=${URL}" - docker push $CONTAINER_IMAGE:$CI_COMMIT_REF_SLUG 
  3. Deployer@DOMAIN.COM私钥作为SSH_PRIVATE_KEY添加到存储库设置(设置-> CI / CD->变量)中
  4. 添加部署部分:

     stages: - build - deploy /// .... deploy_staging: stage: deploy image: kroniak/ssh-client:3.6 script: - mkdir ~/.ssh - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' - eval $(ssh-agent -s) - ssh-add <(echo "$SSH_PRIVATE_KEY") - ssh deployer@DOMAIN.COM "docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $GITLAB_DOMAIN" - ssh deployer@DOMAIN.COM "docker stop frontend_${CI_COMMIT_REF_SLUG}" || true - ssh deployer@DOMAIN.COM "docker rm frontend_${CI_COMMIT_REF_SLUG}" || true - ssh deployer@DOMAIN.COM "docker rmi GITLAB-DOMAIN.COM/frontend/main/image:${CI_COMMIT_REF_SLUG}" || true - ssh deployer@DOMAIN.COM "docker run --name frontend_${CI_COMMIT_REF_SLUG} --network=web -d $GITLAB_DOMAIN/frontend/main/image:${CI_COMMIT_REF_SLUG}" environment: name: review/$CI_COMMIT_REF_NAME url: http://${CI_COMMIT_REF_NAME}.tests.DOMAIN.COM on_stop: stop_staging stop_staging: stage: deploy image: kroniak/ssh-client:3.6 variables: GIT_STRATEGY: none script: - mkdir ~/.ssh - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' - eval $(ssh-agent -s) - ssh-add <(echo "$SSH_PRIVATE_KEY") - ssh deployer@DOMAIN.COM "docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN GITLAB-DOMAIN.COM" - ssh deployer@DOMAIN.COM "docker stop frontend_${CI_COMMIT_REF_SLUG}" || true - ssh deployer@DOMAIN.COM "docker rm frontend_${CI_COMMIT_REF_SLUG}" || true - ssh deployer@DOMAIN.COM "docker rmi $GITLAB_DOMAIN/frontend/main/image:${CI_COMMIT_REF_SLUG}" || true when: manual environment: name: review/$CI_COMMIT_REF_NAME action: stop 

以上步骤足以获得以下结果:

  • 对分支的每次新提交都会在%branch_name%.tests.DOMAIN.COM处启动最新代码的汇编和部署。
  • Gitlab包含一种环境机制,使您可以通过几次触摸来创建/删除/打开锁定的图像

后续步骤:

  • 为向导程序集设置一个单独的部分。 对于向导,​​通过COMMIT_SHA标记图像是合理的
  • 在Docker中将配置添加到Nginx
  • 通过ARG和ENV dockerfile机制转发软件包程序集参数
  • 从映像配置程序集的缓存使用率

根据文章。

Source: https://habr.com/ru/post/zh-CN429824/


All Articles