docker swarm集群 + gitlab-ci服务器实现项目持续集成部署的流程步骤

2023-06-01 00:00:00 docker 集群 Swarm

之前的几篇文章都是为了这篇文章实现docker swarm集群中持续集成部署项目

回顾一下步骤:

1.准备两台centos7服务器

2.在其中一台hostname为master的机器上搭建gitlab服务

3.在另一台hostname:work1的机器上搭建gitlab-runner服务

4.在master上初始化docker,然后master、work1都加入集群形成docker swarm集群环境

5.在集群中搭建portainer图形化界面

6.创建阿里镜像仓库,用来存储镜像

7.在gitlab服务器上创建项目,然后下拉/上传在合并配合ci/cd实现持续集成

ps:

上面的步骤都有写教程,有兴趣的可以自行进本站docker分类中查阅


我在以hyperf框架为实例,实现持续部署,废话不多说直接进人步骤

1.png

项目我已经拉下来

1.修改.gitlab-ci.yml文件

# usermod -aG docker gitlab-runner
stages:
  - build
  - deploy
variables:
  PROJECT_NAME: demo
  REGISTRY_URL: registry.cn-hangzhou.aliyuncs.com/test_hyperf
build_test_docker:
  stage: build
  before_script:
#    - git submodule sync --recursive
#    - git submodule update --init --recursive
  script:
    - docker build . -t $PROJECT_NAME
    - docker tag $PROJECT_NAME $REGISTRY_URL/$PROJECT_NAME:test
    - docker push $REGISTRY_URL/$PROJECT_NAME:test
  only:
    - test
  tags:
    - builder
deploy_test_docker:
  stage: deploy
  script:
    - docker stack deploy -c deploy.test.yml --with-registry-auth $PROJECT_NAME
  only:
    - test
  tags:
    - builder
build_docker:
  stage: build
  before_script:
#    - git submodule sync --recursive
#    - git submodule update --init --recursive
  script:
    - docker build . -t $PROJECT_NAME
    - docker tag $PROJECT_NAME $REGISTRY_URL/$PROJECT_NAME:$CI_COMMIT_REF_NAME
    - docker tag $PROJECT_NAME $REGISTRY_URL/$PROJECT_NAME:latest
    - docker push $REGISTRY_URL/$PROJECT_NAME:$CI_COMMIT_REF_NAME
    - docker push $REGISTRY_URL/$PROJECT_NAME:latest
  only:
    - tags
  tags:
    - builder
deploy_docker:
  stage: deploy
  script:
    - echo SUCCESS
  only:
    - tags
  tags:
    - builder


2.修改deploy.test.yml文件

version: '3.7'
services:
  demo:
    image: $REGISTRY_URL/$PROJECT_NAME:test
    environment:
      - "APP_PROJECT=demo"
      - "APP_ENV=test"
    ports:
      - 9501:9501
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 5
      update_config:
        parallelism: 2
        delay: 5s
        order: start-first
    networks:
      - default-network
    configs:
      - source: demo_v1.0
        target: /opt/www/.env
configs:
  demo_v1.0:
    external: true
networks:
  default-network:
    external: true

3.登录portainer配置.env文件

url:http://172.18.1.150:9000/#/configs


2.png里面信息:

APP_NAME=demo
DB_DRIVER=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=hyperf
DB_USERNAME=root
DB_PASSWORD=
DB_CHARSET=utf8mb4
DB_COLLATION=utf8mb4_unicode_ci
DB_PREFIX=
REDIS_HOST=localhost
REDIS_AUTH=
REDIS_PORT=6379
REDIS_DB=0


4.本地项目修改好之后,提交至gitlab仓库中

3.png


5.为了测试,我直接登录至gitlab项目仓库中进行合并操作

4.png

点击合并请求->新建合并请求

5.png

合并完了只后点击ci/cd这里,发现我们的项目状态:

进行中 ,说明我们的项目正在部署

部署时间根据你的服务器配置等相关,过一会就状态:

已通过 说明项目已自动部署好了

6.png


6.进centos7系统docker swarm集群中看一下自动部署的镜像容器及访问效果

master机器:

7.png

work1机器:

8.png

到这里docker swarm集群+gitlab的集群持续自动部署就完成了

后续项目要发新版就直接提交代码到gitlab服务器项目仓库,然后合并分支就OK了

比如我这是master分支合并到tes分支,具体配置请参考上面的.yml格式文件。

相关文章