Docker(三) docker通过gitlab部署CICD
一、 部署gitlab
1.1 拉取gitlab镜像
# gitlab-ce为稳定版本,后面不填写版本则默认pull最新latest版本
# 注意需要配置镜像加速器,不然会非常慢
docker pull gitlab/gitlab-ce
1.2 运行gitlab镜像
docker run -d -p 443:443 -p 80:80 -p 222:22 --name gitlab --restart always -v /opt/gitlab/config:/etc/gitlab -v /opt/gitlab/log:/var/log/gitlab -v /opt/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce
# -d:后台运行
# -p:将容器内部端口向外映射
# --name:命名容器名称
# -v:将容器内数据文件夹或者日志、配置等文件夹挂载到宿主机指定目录
1.3 配置
# gitlab.rb文件内容默认全是注释
vim /opt/gitlab/config/gitlab.rb
# 配置内容如下:
# 配置http协议所使用的访问地址,不加端口号默认为80
external_url 'http://192.168.6.21'
# 配置ssh协议所使用的访问地址和端口
gitlab_rails['gitlab_ssh_host'] = '192.168.6.21'
gitlab_rails['gitlab_shell_ssh_port'] = 222 # 此端口是run时22端口映射的222端口
# 重启gitlab容器
docker restart gitlab
1.4 若发生502报错
docker exec -it gitlab bash # 进入容器内部
gitlab-ctl restart sidekiq
gitlab-ctl hup unicorn
二、 CI
GitLab-CI/CD是GitLab的一套内置的工具,主要实现了对程序开发的持续化集成、连续发布、自动化部署等功能。
以下引用官方文档进行介绍:
持续集成的工作原理是将小的代码块推送到Git存储库中托管的应用程序代码库中,并且每次推送时,都要运行脚本管道来构建,测试和验证代码更改,然后再将其合并到主分支中。
持续交付和部署包括进一步的CI,可在每次推送到存储库默认分支时将应用程序部署到生产环境。
这些方法使您可以在开发周期的早期发现错误和错误,从而确保部署到生产环境的所有代码均符合为应用程序建立的代码标准。
CI(continuous intergration)持续集成
持续集成:编写代码时,完成了一个功能后,立即提交代码到Git仓库中,将项目重新的构建并且测试。1.快速发现错误。
2.防止代码偏离主分支。
2.1 Runner 搭建
Runner是CI/CD中必不可少一个组件,它是我们持续化集成的实际操作者,当我们通过GitLab Service端发起操作时,实际都是分配到各个Runner服务器进行执行,Runner可以在任意服务器中部署然后再Service端中进行注册。
#1.为了方便操作,请先进入到root权限
sudo su
#2.下载安装包文件
curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
#3.添加权限
chmod +x /usr/local/bin/gitlab-runner
#4.新建一个操作用户
useradd --comment 'gitlab-runner' --create-home gitlab-runner --shell /bin/bash
#5.安装
#注意: --working-directory 是runner实际执行目录,所有从service端发起的请求命令,都会到该目录下进行执行。
gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
#6.启动
gitlab-runner start
-
常用命令
gitlab-runner stop 停止服务 gitlab-runner start 启动服务 gitlab-runner restart 重启服务 gitlab-runner list #查看各个 Runner 的状态 gitlab-runner verify #此命令检查注册的runner是否可以连接,但不验证GitLab服务是否正在使用runner。 --delete 删除 gitlab-runner register #默认交互模式下使用,非交互模式添加 --non-interactive gitlab-runner unregister #该命令使用GitLab取消已注册的runner。 #使用令牌注销 gitlab-runner unregister --url http://gitlab.example.com/ --token t0k3n #使用名称注销(同名删除第一个) gitlab-runner unregister --name test-runner #注销所有 gitlab-runner unregister --all-runners
因为gitlab-runner可能会用到maven,docker,git,所以需要提前安装好这些东西
yum install java-1.8.0-openjdk* -y
yum install git
# 安装docker略
usermod -aG docker gitlab-runner # 保证可以使用docker
sudo -u gitlab-runner -H docker info # 验证是否有效
# 安装docker-compose 略
# 安装maven
yum -y install maven
mvn -v #查看maven版本
# 配置aliyun镜像
vim /etc/maven/settings.xml
# mirrors节点下添加(注意不能有tab键)
<mirrors>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<mirror>
<id>repo1</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo1.maven.org/maven2/</url>
</mirror>
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
</mirrors>
2.2 注册Runner
gitlab-runner register
会要求输入gitlab的url和Token.
查找过程如下:
进入仓库->settings->CI/CD,找到Runner Settings这一项,点击Expend,即可在Setup a specific Runner manually
这项中找到。
2.3 样例测试
2.3.1 新建maven-tomcat项目
下方为
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="