作者:javastarboy
背景:前几年(2018 年前后)的 jenkins+docker+k8s 的CI/CD 在工作之中受益不少。提升了不少工作效率。而随着这几年的使用发现,目前 gitlab-CI/CD 在持续集成部署中更加方便、高效。 尤其是在测试环节中,研发无需编写复杂的 jenkins 脚本,只要提交代码,即可自动构建部署。 环境的处理也与 git 思想一致,在敏捷迭代中,效果显著。 最近,小编的其中一个客户也有此方面诉求,便着手搭建了一下这套流程,奈何网上资料过于零散,虽然仅用一天时间便搭建起来,但是我认为,前面已经这么多人(项目组)用过了,在开源的浪潮下,就不应该让后人这么繁琐的搭建这套流程。 所以此篇文章旨在读此一篇,便可拿到所有资料链接、便可成功搭建 Gitlab-CI/CD。
建议使用原生的 CentoOS7.6,可以规避很多问题
)无论买哪个,一定要珍惜自己的新人机会,就一次,能省下很多钱
此文章写于 2023 年 3 月 5 日,相关软件版本用的当下最新版
安装参考链接
官网 gitlab ce 安装包
安装依赖包
yum install -y curl policycoreutils-python openssh-server
设置 SSH 开机自启动并启动 SSH 服务
systemctl enable sshd
systemctl start sshd
安装 Postfix
yum install -y postfix
Postfix 设置
# 设置 Postfix 服务开机自启动
systemctl enable postfix
# 打开 Postfix 的配置文件 main.cf
vim /etc/postfix/main.cf
按 i 进入编辑模式,删除 inet_interfaces = all 前的 #,在 inet_interfaces = localhost 前加上 #。修改完成后如下图所示。 然后按 Esc 并输入 :wq 保存修改并退出文件
启动 Postfix
systemctl start postfix
执行以下命令,添加 GitLab 软件包仓库(CentoOS 8.2以上会有问题)
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
安装 GitLab
sudo EXTERNAL_URL="服务器的公网IP地址" yum install -y gitlab-ce
bash cat /etc/gitlab/initial_root_password
# 安装 git
yum -y install git
# 查看是否安装成功
git --version
# 查找openjdk
yum search java|grep jdk
# 或者带颜色查找,看着方便点
yum search java | grep -i --color jdk
# 选择需要的文件进行安装(以 1.8 为例)
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
# 或者如下命令,安装 open jdk1.8 的所有文件(省事)
yum install -y java-1.8.0-openjdk*
# ========================================
# 其他命令
# 查找已安装的jdk
yum list installed | grep [java][jdk]
# 卸载所有openjdk相关文件
yum -y remove java-1.8.0-openjdk*
# 安装OpenJDK 8 JRE
yum install java-1.8.0-openjdk
# 安装OpenJDK 8 JDK
yum install java-1.8.0-openjdk-devel
# 查找已安装的jdk
yum list installed | grep [java][jdk]
# 卸载所有openjdk相关文件
yum -y remove java-1.8.0-openjdk*
mv /usr/local/apache-maven-3.8.6/ /usr/local/bin/maven3.6
<mirror>
<id>alimavenid>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<mirrorOf>centralmirrorOf>
mirror>
# 输入如下命令打开配置文件
vi /etc/profile
# 输入 i 进入编辑模式
export MAVEN_HOME=/usr/local/bin/maven3.6
export PATH=$PATH:$MAVEN_HOME/bin
# 按 esc 键,然后疏忽 :wq 回车保存
# 输入如下命令,生效配置
source /etc/profile
# 输入命令,验证安装是否成功,打印出 maven 版本即成功,如图:
mvn -v
注意:此时已经切换到另外一台服务器了,后面CI/CD 主要在这里执行
# Download the binary for your system
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
# Give it permission to execute
sudo chmod +x /usr/local/bin/gitlab-runner
# Create a GitLab Runner user
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
# Install and run as a service
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
1、命令注册
# 注册命令(注意 gitlab 服务器地址以及获取 token 方式见后图)
sudo gitlab-runner register --url `http://你 gitlab 服务器的公网IP`/ --registration-token `我是项目的token值(获取方式见后图)`
# 接下来就是输入一些列命令,按照提示操作即可,示例如下($为服务器的步骤提示):
# 1. 填写gitlab的地址,确保容器内能够顺利访问到该地址
$ Enter the GitLab instance URL (for example, https://gitlab.com/):
输入:http://gitlab服务器公网ip/
# 填写需要注册的runner token,此处选择shared runner token【获取方式见后面截图】
$ Enter the registration token:
输入:BHRagrsztQAxdMPPhxGm
# 描述信息随意填写,也可不填
$ Enter a description for the runner:
输入:gitlab-runner-01
# tag随意填写
$ Enter tags for the runner (comma-separated):
输入:lmx-runner-4
# 随意填写,可不填
$ Enter optional maintenance note for the runner:
Registering runner... succeeded
# 选择执行器的种类,建议选择docker【小编为演示方便,选择了 shell】
$ Enter an executor: docker, shell, ssh, kubernetes, custom, docker-ssh, parallels, virtualbox, docker+machine, docker-ssh+machine:
输入:shell
token 获取位置如图:
Setting -> CI/CD -> Genneral pioelines settings -> Expand
2、回到 gitlab 查看 runne
gitlab 页面如下,部分信息可以再次修改
# 启动 重起 停止
gitlab-runner start
gitlab-runner restart
gitlab-runner stop
# 查看gitlab-runner运行状态
gitlab-runner status
见 3.2.2 注册runner 章节的注册一个 runner 说明
gitlab-ci templates
1、先初始化 .gilab-ci.yml 文件,然后编辑脚本
2. 编写一个 java SpringBoot 项目的 .gitlab-ci.yml
# 定义一些变量, 下面各阶段会使用
variables:
# 运行的 jar 名称
JAR_NAME: test-0.0.1-SNAPSHOT.jar
# jar 包存放位置,不能是 git 目录,否则下一个 stage 阶段会清除文件, 这里默认放到上一级了
JAR_PATH: ../
# 本次构建的阶段: test、package、deploy
stages:
- test
- package
- deploy
# 测试流水线
test:
stage: test
tags:
- lmx-runnser-4
only:
- main
script:
- echo "流水线成功运行!"
# 打包
package:
stage: package
tags:
- lmx-runnser-4
only:
- main
script:
- echo "=============== 开始install任务 ==============="
- pwd
- mvn clean
- mvn package
- rm -rf $JAR_PATH/$JAR_NAME
- mv ./target/$JAR_NAME $JAR_PATH/$JAR_NAME
- cd $JAR_PATH
- ls
# 启动jar包
deploy:
stage: deploy
tags:
- lmx-runnser-4
only:
- main
script:
- echo "=============== 开始部署任务 ==============="
- cd $JAR_PATH
- pwd
- ls
- ./test.sh
- echo "发布完成!"
#!/bin/bash
set -ex
pkill -9 java
nohup java -Dfile.encoding=utf-8 -jar test-0.0.1-SNAPSHOT.jar > test.log
exit 0
1、查看构建状态
2、浏览器输入自己的 test 接口,验证一下项目运行情况
报错:fatal: The remote end hung up unexpectedly
解决:git config --global http.postBuffer 524288000
查看:git config --global --list
继续报错:fatal: Out of memory, malloc failed (tried to allocate 262144000 bytes)
解决(内存不足,干脆删掉):git config --global --unset http.postbuffer
写的比较详细的链接可参考,主要是调整 gitlab.rb 配置参数(我目前试了没搞定)
报错:sudo: /usr/libexec/sudo/sudoers.so 必须属于用户 ID 0(的用户)
sudo: 在加载插件“sudoers_policy”时在 /etc/sudo.conf 第 14 行出错
问题原因:有人将/usr/bin/sudo的权限改为777或将目录/usr的权限授权给非root用户了
解决办法:
chmod 4755 /usr/bin/sudo
chown -R root:root /usr
Gitlab CI/CD 简单介绍
Gitlab CI/CD 介绍
Gitlab-Runner 相关命令