网站首页 > 技术教程 正文
最近公司想用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查看进程
绿色就显示完成啦。
猜你喜欢
- 2024-10-13 大前端教程之Dokcer,部署方式,CICD的解决方案
- 2024-10-13 CI/CD之三:用filebeat,kafka,kylin,superset快速实现度量
- 2024-10-13 使用 GitLab CI 和 Docker 自动部署 Spring Boot 应用
- 2024-10-13 使用 Kubernetes Helm 安装 CI/CD 工具:Drone
- 2024-10-13 gitlab ci 维护记录(gitlab cicd)
- 2024-10-13 基于docker-compose的Gitlab CI/CD实践&排坑指南
- 2024-10-13 通过Nginx、Consul、Upsync实现动态负载均衡和服务平滑发布
- 2024-10-13 搭建全功能服务器(Nginx+Tomcat+PHP+SSL)
- 2024-10-13 还在用Jenkins?试试Gitlab的CI/CD功能吧,贼带劲
- 2024-10-13 将Docker镜像安全扫描步骤添加到CI/CD管道
你 发表评论:
欢迎- 最近发表
-
- Win10 TH2正式版官方ESD映像转换ISO镜像方法详解
- 使用iso镜像升级到Windows 10的步骤
- macOS Ventura 13.2 (22D49) Boot ISO 原版可引导镜像
- 安利一个用ISO镜像文件制作引导U盘的的小工具RUFUS
- CentOS 7使用ISO镜像配置本地yum源
- 用于x86平台的安卓9.0 ISO镜像发布下载:通吃I/A/N、完全免费
- AlmaLinux 9.6发布:升级工具、初步支持IBM Power虚拟化技术
- Rufus写入工具简洁介绍与教程(写入模式)
- 新硬件也能安装使用了,Edge版Linux Mint 21.3镜像发布
- 开源工程师:Ubuntu应该抛弃32位ISO镜像
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)