编程技术分享平台

网站首页 > 技术教程 正文

基于docker完成项目的CI/CD功能(docker部署cdh)

xnh888 2024-10-13 10:13:31 技术教程 33 ℃ 0 评论

最近公司想用docker取代传统模式的项目部署,并完成项目的ci/cd流程,我在网上翻阅资料发现这方面的资料少之又少,于是写下此篇文章,希望能对有此需求的小伙伴有点帮助,少走弯路。(因为我踩了无数个坑)

我用了docker+GitLab Runner的组合,因为公司本身就在用gitlab

GitLab Runner 简介

gitlab-ci全称是gitlab continuous integration的意思,也就是持续集成。中心思想是当每一次push到gitlab的时候,都会触发一次脚本执行,然后脚本的内容包括了测试,编译,部署等一系列自定义的内容。而gitlab-runner 是 gitlab 提供的持续集成工具,因为 GitLab Runner 可以安装到不同的机器上,所以在构建任务运行期间并不会影响到 GitLab 的性能

基于docker安装 gitlab runner

Dockerfile

在 /usr/local/docker/runner/environment 目录下创建 Dockerfile(或其他自己指定的目录)

FROM gitlab/gitlab-runner
MAINTAINER gao
# 把gitlab-runner加入root用户组,这样gitlab-ci/cd在跑gitlab-runner的时候就有权限处理它自身意外的目录文件了
# 先将gitlab-runner用户加入root组
RUN usermod -g root gitlab-runner
# 再将gitlab-runner用户的UID修改成root一样的UID,这样gitlab-runner就拥有了跟root一样的权限了
# 这里一定要加上 -o 不然回提示uid为0的用户已存在

RUN usermod -u 0 -o gitlab-runner

RUN  sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN  apt-get clean

RUN apt-get update
RUN apt-get install gcc -y
RUN apt-get install g++ -y
RUN apt-get install make -y
RUN apt-get install openssl -y
RUN apt-get install libssl-dev -y

#安装docker
RUN apt-get -y install apt-transport-https ca-certificates curl software-properties-common && \
    curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add - && \
    add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" && \
    apt-get update -y && \
    apt-get install -y docker-ce
COPY daemon.json /etc/docker/daemon.json
# 容器默认启动命令
ADD gitlab-runner-default.sh /home/gitlab-runner-default.sh
RUN chmod +x /home/gitlab-runner-default.sh
ENTRYPOINT ["sh","/home/gitlab-runner-default.sh"]

#安装docker compose
RUN curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
RUN chmod +x /usr/local/bin/docker-compose

ADD env.sh /etc/profile.d
RUN chmod +x /etc/profile.d/env.sh

我们在dockerfile中做了什么

1,gitlab-runner用户加入root组,我们ci/cd的时候经常涉及读写的权限问题,这里直接将gitlabrunner赋予root权限。

2,安装docker,编译好的class文件需要打成镜像,所以我们需要安装docker。

3,安装dockercompose,方便我们使用docker。

docker-compose.yml

在 /usr/local/docker/runner 目录下创建 docker-compose.yml,用于启动容器

#更多的配置项可访问官网
version: '3.1'
services:
  gitlab-runner:
    build: environment
    restart: always
    container_name: gitlab-runner
    environment:
      TZ: Asia/Shanghai
  #    CI_SERVER_URL: http://192.168.40.125/
   #   RUNNER_TOKEN: r7gTKs-esQx7RiQpdadN
    #  RUNNER_EXECUTOR: shell
    ports:
    - "6606:6606
    # command: gitlab-ci-multi-runner restart
    privileged: true
    volumes:
      - ./config:/etc/gitlab-runner
      - /var/run/docker.sock:/var/run/docker.sock
      - ./environment/daemon.json:/etc/docker/daemon.json
      - /home/autotsg/autotsg:/builds/R7HDmPxF/0/auto_test/tsg-autotest-test 

创建镜像 docker-compose build

启动容器 docker-compose up -d

然后我们的gitlabrunner容器就运行起来了。我们还需要将我们的gitlab地址注册上去,使他们可以通讯,可以通讯后,就可以执行ci/cd任务了

注册 Runner

GitLab CI 地址与令牌参数

项目 –> 设置 –> CI/CD –> Runner 设置(需管理员账号)


docker exec -it gitlab-runner gitlab-runner register
# 输入 GitLab 地址
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
项目设置中的地址
# 输入 GitLab Token
Please enter the gitlab-ci token for this runner:
项目设置中的token
# 输入 Runner 的说明
Please enter the gitlab-ci description for this runner:
可以为空
# 设置 Tag,可以用于指定在构建规定的 tag 时触发 ci
Please enter the gitlab-ci tags for this runner (comma separated):
deploy
# 选择 runner 执行器,这里我们选择的是 shell
Please enter the executor: virtualbox, docker+machine, parallels, shell, ssh, docker-ssh+machine, kubernetes, docker, docker-ssh:
shell	

注册完之后我们需要编写 .gitlab-ci.yml,告诉gitlabrunner需要做什么操作

在项目工程下编写 .gitlab-ci.yml 配置文件(文件名必须叫.gitlab-ci.yml,注意前面有个 .)

#更详尽的配置解释,请查阅官网
stages:
  - deploy #运行的类型,有
  
 
api: #随意填写,起标示作用
  stage: deploy #和上述的类型对应

  only:
    - develop #指定触发分支

  script: 
    - pwd
    - docker stop auto-custom-clibrary-api || true && docker rm auto-custom-clibrary-api || true
    - cd docker/api
    - docker-compose build
    - docker-compose up -d
   

cli: #随意填写,起标示作用
  stage: deploy #和上述的类型对应

  only:
    - develop #指定触发分支

  script: 
    - pwd
    - docker stop auto-custom-clibrary-cli || true && docker rm auto-custom-clibrary-cli || true
    - cd docker/cli
    - docker-compose build
    - docker-compose up -d

因为我们在.gitlab-ci.yml 中决定以docker方式启动服务的,所以我们还需创建docker-compose.yml,在项目的根路径下创建docker目录,在docker目录下创建api和cli文件夹,然后分别编写Dockerfile和docker-compose.yml

目录结构如下


后端的docker compose

version: '3.5'
services:
    jwt:
        container_name: jwt
        restart: always
        build: .
        ports:
          - "6608:6608"
        environment:
          TZ: Asia/Shanghai
        networks:
          - tsg
networks:
        tsg:
          external: true

后端的dockerFlie

FROM openjdk:8-jdk-alpine
RUN mkdir /app
COPY febs_shiro_jwt-1.0.0-release.jar  /app/app.jar
ENTRYPOINT ["java","-jar","/app/app.jar"]
EXPOSE 6608

前端的docker compose

version: '3.5'
services:
  jwt-nginx:

   container_name: jwt-nginx
   build: .
   restart: always
   ports:
    - "6609:80"
   environment:
    TZ: Asia/Shanghai
   volumes:
    - /home/nginx/conf.d:/etc/nginx/conf.d
    - /home/nginx/logs:/var/log/nginx
   networks:
    - runner_default
networks:
  runner_default:
    external:
      name: runner_default

前端的dockerFlie

FROM febs_shiro_jwt_nginx_jwt-nginx
MAINTAINER gao
COPY dist/  /usr/share/nginx/html/
EXPOSE 6609

然后git push代码

打开ci/cd查看进程


绿色就显示完成啦。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表