gitlab-ci搭建——第一部分:基础工具
文章目录
目标
用 gitlab-ci 实现 spring-boot 项目的自动部署
工具或技术
- gitlab-runnger
- docker
- maven
- git
- harbor
安装和配置 gitlab
(略)
安装和配置 maven(编译和打包使用)
基本过程:下载、修改配置、设置环境变量
下载
新建目录用于存放 maven
mkdir /data/maven
浏览器打开https://mirrors.tuna.tsinghua.edu.cn/,依次找到并下载maven到刚才新建的目录,并解压
修改配置(可选)
可自行修改 maven 源、本地仓库路径等信息
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
修改环境变量
vim /etc/profile
在文件最后添加
MAVEN_HOME=/data/maven
export PATH=${MAVEN_HOME}/bin:${PATH}
然后执行
source /etc/profile
验证
[root@localhost maven]# mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /data/maven
Java version: 1.8.0_221, vendor: Oracle Corporation, runtime: /usr/java/jdk1.8.0_221/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1062.4.1.el7.x86_64", arch: "amd64", family: "unix"
安装和注册 gitlab-runner
安装
# 增加源
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
# 安装
yum install gitlab-runner -y
# 设置开机启动
systemctl enable gitlab-runner
注册
gitlab-runner register
按提示,依次输入 gitlab 地址、token、runner 名称(描述)、标签、执行环境(类型)类型等信息即可完成注册。
-
token 在 gitlab 查看:
-
runner 类型填写 shell
-
检查是否注册成功
安装和配置 harbor
这里采用离线安装的模式
安装 docker-compose
# 下载,可先登录下面的地址,查看介绍和版本,组装自己的url。如果下载速度慢,直接用浏览器下载再上传到服务器
sudo curl -L https://github.com/docker/compose/releases/download/2.4.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 测试安装结果
docker-compose --version
安装harbor
官方下载地址: https://github.com/goharbor/harbor/releases
# 解压
tar -zxvf harbor.v2.8.1.tar.gz
# 配置文件
cp harbor.yml.tmpl harbor.yml
修改 hostname、port
如果有 https 访问需求,修改对应选项, 如果没有就注释调 https 选项
执行 install.sh
安装
报错: ./install.sh:行 83: ./prepare: 权限不够
修改 prepare 权限,然后重新安装
chmod 777 prepare
安装完毕,打开系统访问:默认密码在 harbor.yml 文件:admin/Harbor12345
登录系统
docker 配置,增加自己的 harbor 源
在执行 docker 的服务器,修改 docker 配置文件:/etc/docker/daemon.json
增加配置:"insecure-registries": ["192.168.128.3:9900"]
下面是我完整的配置文件
[root@localhost maven]# cat /etc/docker/daemon.json
{
"insecure-registries": ["192.168.128.3:9900"]
}
这里我使用的 IP+端口的方式,最好使用域名,可以通过 dns 服务器或者修改 hosts 来实现
修改后,重新加载 docker 配置。这个命令一般不影响 docker 正在运行的容器
systemctl reload docker
创建用户
登录系统创建用户即可,创建用户后,要在项目页面把用户添加为项目成员
测试
登录
推送
docker push 192.168.128.3:9900/mypro/myimage:lastest
浏览器登录 harbor,可以看到刚才推送的镜像
拉取
docker pull 192.168.128.3:9900/mypro/myimage:lastest
在其他服务器执行 pull 命令会报错,因为没有注册 harbor。参照前面的方法修改 daemon.json 即可
配置 SSH KEY
生成 KEY
ssh-keygen -t rsa
系统会生成 2 个文件:
- id_rsa 私钥
- id_rsa.pub 公钥
将公钥文件导入到本机认证文件,并更改权限
cat /root/.ssh/id_rsa.pub >>/root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
chmod 700 /root/.ssh/
此时把私钥下载到电脑,用 xshell 测试可以直接通过 key 登录服务器
或者把私钥拷到另一个服务器测试:
ssh root@ip -i /root/id_rsa
可能会报错:gitlabci Bad owner or permissions on /home/gitlab-runner/.ssh/config
检查文件权限:
chmod 700 /home/gitlab-runner/.ssh
chmod 600 /home/gitlab-runner/.ssh/config
chown gitlab-runner /home/gitlab-runner/.ssh
chown gitlab-runner /home/gitlab-runner/.ssh/config
ubuntu 系统的处理
ubuntu 在生成 key 以后,需要进行转换
# 安装 putty 工具
apt install -y putty
# 密钥转化
puttygen id_rsa -o id_rsa
puttygen id_rsa -O private-openssh -o id_rsa.pem
# 将公钥导入指定文件
cat id_rsa.pub > authorized_keys
在我的安装过程中,ubuntu 的 key 不能使用 xshell 登录,但可以用ssh root@ip -i /root/id_rsa
登录。已达到目的
尝试和排错
到这里,环境基本准备完成,进行了第一次尝试:做一个简单的 gitlab-ci.yml 提交触发 ci
第一次 报错
报错,意思 git 版本过低。我这台服务器安装 gitlab 较早,可能 git 版本不满足 runner 要求
升级 git 版本
yum remove git -y
yum install http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-1.noarch.rpm
yum install git
git --version
再次触发,发现 job 状态一直是 pending。排查后,是 runner 没了。应该是写在 git 的时候把 runner 一起卸载了。重新安装 runner,再提交
maven 报错
这次提交可以看到控制台有正常输出,job 被触发执行了。不过 maven 报错: 找不到程序包 java.lang
检查 pom 文件的 maven-compiler-plugin:注意 bootclasspath 的斜杠和冒号,window 系统是分号,linux 系统是冒号。通用办法是${path.separator}。修改完毕以后成功编译
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<compilerArguments>
<verbose/>
<!--注意这里,Windows是分号,linux是冒号,根治办法是使用${path.separator}-->
<!--
<bootclasspath>${java.home}/lib/rt.jar:${java.home}/lib/jce.jar</bootclasspath>
-->
<bootclasspath>${java.home}/lib/rt.jar${path.separator}${java.home}/lib/jce.jar</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
docker 相关权限报错
git 推送触发 ci,报错:Got permission denied while trying to connect to the Docker daemon socket
原因是当前执行 gitlab-runner 的用户没有权限执行 docker 命令,解决的方向是把当前用户添加到能执行 docker 命令的用户组
# 新建 docker 用户组
groupadd docker
# 将用户添加到用户组
usermod -aG docker gitlab-runner
然后查看 docker.sock 所属的用户组,如果是 root,则修改为 docker
chown root:docker /var/run/docker.sock
修改后这个报错恢复正常
RPC 失败错误
错误:RPC 失败。HTTP 403 curl 22 The requested URL returned error: 403
致命错误: 预期 'acknowledgments'
原因暂时未知,处理方法是删除 gitlab-runner 里的项目目录。项目目录会在控制台打出,自己注意查看即可
至此 gitlab-ci 平台层面的路已打通。后面是针对我的项目和环境的记录。本文最后上完整的 gitlab-ci.yml