在每个自重的项目中,质量检查工程师都必须参与。 他们每天都将面对在单独的分支机构中验证任务完成情况的任务。 通常,切换到所需分支,组装和测试的过程会花费大量时间,此外,在本地并不总是能够完全重建最完全相同的战斗环境。
本文的目的是展示一种用于在多个分支上设置支架的简单技术。 本文是由开发人员的开发人员撰写的,因此对于专业的DevOps工程师来说不太可能引起人们的极大兴趣。
要求:第一步:配置Gitlab
- 在专用服务器上安装Gitlab Runner
- 创建一个支持Docker映像构建的工作程序
- 启用容器注册表
第二步:服务器设置
- 安装Docker
- 安装撰写
- 创建一个用户:
- 设置traefik(服务器根据其容器的标签(标签)将请求代理到Docker容器):
$ sudo mkdir -p /opt/traefik $ docker network create web
/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
- 运行traefik:
cd /opt/traefik && docker-compose up -d
- 为DOMAIN.COM添加一条记录,格式为“ *”-专用服务器的IP。
第三步:准备存储库
- 添加到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
改变
npm run build
给您的构建团队。 以相同的方式编辑路径。
/usr/src/app/dist
将dist更改为您的构建目录。
您可以在此处阅读有关结构和dockerfire命令的更多信息。
- 在图像组合部分添加.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
- 将Deployer@DOMAIN.COM私钥作为SSH_PRIVATE_KEY添加到存储库设置(设置-> CI / CD->变量)中。
- 添加部署部分:
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机制转发软件包程序集参数
- 从映像配置程序集的缓存使用率
根据文章。