ㅤcoderitl
2022/02/15阅读:75主题:萌绿
Centos7-Gitlan-GitlabRunner
Centos7-安装 GITLAB 并配置
网络配置
-
安装虚拟机时选择 NAT
,安装不开启本地网络 -
安装完毕后修改
cd /etc/sysconfig/network-scrips/
ls
# 每个人的名称不一样 前缀应该一样
vim ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static # 修改此处 必须是静态,后期搭建 gitlab 由于没改变,时不时 ip 自己发生变化,搞蒙了
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=442728f9-6417-486f-84a0-e97eacf6319b
DEVICE=ens33
ONBOOT=yes
# 添加如下
DNS1=8.8.8.8
DNS2=8.8.4.4
-
SSH
连接
# 检测 SSHD 服务
systemctl status sshd
可运行 => 该SSHD 服务正常 |
---|
![]() |
-
error
# 可能需要安装
yum install openssh-server
# 端口占用修改
vim /etc/sshd/sshd_config
# 将文件中的监听端口,监听地址、开启远程登陆和密码登陆 前的 # 号去掉
systemctl status sshd
systemctl start sshd
# 检测是否启动
ps -e | grep sshd | netstat -an | grep 22
# 防火墙问题 => 关闭 active时
systemctl status firewalld
# 关闭防火墙
systemctl stop firewalld
# 关闭开机自动开启
systemctl disable firewalld
init 6
-
连接
# 获取 ip
ip addr | ipconfig(最小化安装没有该命令)
# xshell.. 其他工具连接方式 => 输入 root 用户即密码(安装时设定的)
ssh root@ip:port
Yum 源更换
-
解析 DNS
# Could not resolve host: mirrors.aliyun.com; 未知的错误时操作 直接执行,由于是后面引起
# 打开文件,编辑文件(上面提到,注意补全)
vi /etc/sysconfig/network-scripts/ifcfg-
# 增加下面的dns
DNS1=8.8.8.8
DNS2=8.8.4.4
# 重启服务
service network restart
-
更换 Yum
源
# 注意权限问题
yum install -y wget
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bk
cd /etc/yum.repos.d
wget -nc http://mirrors.aliyun.com/repo/Centos-7.repo
mv Centos-7.repo CentOS-Base.repo
# 全部清除
yum clean all
# 更新列表
yum list
# 缓存yum包信息到本机,提高搜索速度
yum makecache
# 更新 yum
yum update -y
-
后面找到新方案
#开放ssh、http服务
sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --add-service=http --permanent
#重载防火墙规则
sudo firewall-cmd --reload
# 防火墙关闭
systemctl stop firewalld
systemctl disable firewalld
安装GITLAB
-
切换 sshd
端口
vim /etc/ssh/sshd_config
# 修改 Port 22
# 关闭 selinux
vim /etc/selinux/config
# 修改如下
SELINUX=enforcing 改为 SELINUX=disable
# 重启
init 6
# 检测 sshd状态
systemctl status sshd
# 如果sshd是关闭状态,则关闭防火墙
systemctl stop firewalld
# 开机禁用
systemctl disable firewalld
# 重启 sshd
systemctl restart sshd
# 修改xshell 连接端口
ssh root@ip:port
-
安装
docker-compose
-
gitlab
# 创建本地gitlab 存储配置文件、日志、数据等的路径
mkdir -p ~/data/gitlab/config ~/data/gitlab/logs ~/data/gitlab/data
# 拉取 gitlab
docker pull gitlab/gitlab-ce:12.9.0-ce.0
# 运行 gitlab
docker run -d -p 443:443 -p 80:80 -p 222:22 --name gitlab --restart always -v ~/data/gitlab/config:/etc/gitlab -v ~/data/gitlab/logs:/var/log/gitlab -v ~/data/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:12.9.0-ce.0
# 进入容器内部
docker exec -it gitlab bash
vim /etc/gitlab/gitlab.rb
# 编辑站点地址
#可以访问GitLab的URL。
external_url 'GENERATED_EXTERNAL_URL'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['smtp_enable'] = true
gitlab_rails['gitlab_shell_ssh_port'] = 222
# 刷新配置
gitlab-ctl reconfigure
# 重启服务
gitlab-ctl restart
# 退出容器
exit
# docker 重启
docker restart gitlab
#服务控制
docker start gitlab
docker stop gitlab
docker rm gitlab
-
修改密码, 登录服务器
修改root 密码 |
|
---|---|
![]() |
第一次是修改root 密码,下图是修改后的 |
|
---|---|
![]() |
-
安装、注册 runner
# docker 安装
docker pull gitlab/gitlab-runner:v12.9.0
# 创建映射路径
# mkdir -p ~/data/gitlab/gitlab-runner/config
# docker run -itd -v ~/data/gitlab/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:v12.9.0
# 启动容器交互式 指定名称后期需要使用 gitlab-runner 名称
docker run -d --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /etc/gitlab-runner \
-v /usr/local/maven_home/apache-maven-3.6.3:/usr/local/maven_home/apache-maven-3.6.3 \
-v /usr/local/maven_home/jdk1.8.0_231:/usr/local/maven_home/jdk1.8.0_231 \
-v /usr/local/bin/docker-compose:/usr/local/bin/docker-compose \
gitlab/gitlab-runner:v12.9.0
sudo chown root:root /var/run/docker.sock
docker exec -it gitlab-runner usermod -aG root gitlab-runner
# 检查
docker ps | grep gitlab-runner
# 进入容器内部
docker exec -it 容器id bash
# 测试
gitlab-runner -h
测试环境v12.9.0 |
配置容器内环境变量 |
---|---|
![]() |
![]() |
-
注册
runner
注册 Runner => share
特定 Runner
IP/dashboard/groups => 1.创建组 2. 创建Runner
-
GitlabRunner
类型-
share
: 运行整个平台项目的作业(gitlab
) -
group
: 运行特定group
下的所有项目的作业(group
) -
specific
: 运行指定的项目作业()project
) -
locked
: 无法运行项目作业 -
paused
:不会运行作业
-
-
交互式注册
Runner
# 推荐 => 执行成功了
docker exec -it gitlab-runner gitlab-runner register交互式注册 -
注册后
share
注意勾选
-
非交互式注册
Runner
-
Docker
docker run --rm -v ~/data/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:v12.9.0 register \
--non-interactive \
--executor "docker" \
--docker-image alpine:latest \
--url "http://192.168.0.128/" \
--registration-token "sxVUoFYsF6q-JnZpKCnV" \
--description "docker-runner" \
--tag-list "docker,aws" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected"
-
shell
# 后续测试
docker run -itd --rm -v ~/data/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:v12.9.0 register \
--non-interactive \
--executor "shell" \
--url "http://192.168.0.129/" \
--registration-token "1bnZNUEweD2ijpXMnCPP" \
--description "devops-runner" \
--tag-list "build,deploy" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected"
-
相关命令
gitlab-runner list # 此命令检查注册在配置文件中的所有运行程序
gitlab-runner verify # 此命令检查注册的 runner 是否是可以连接的,但不验证 Gitlab 服务器是否是正在使用 runner
gitlab-runner --delete # 删除
gitlab-runner unregister # 该命令使用 Gitlab 取消已经注册的 runner
# 使用令牌注销
gitlab-runner unregister --url http://192.168.0.128/ --tocken xxx
# 使用名称注销(同名删除第一个)
gitlab-runner unregister --name xxx
# 注销所有
gitlab-runner unregister --all-runners
流水线任务
-
项目根目录下创建 .gitlab-ci.yml
stages:
- test
test:
stage: test
script:
- echo first build ci
- /usr/local/maven_home/apache-maven-3.6.3/bin/mvn package
- cp target/gitlab-ci-1.0-SNAPSHOT.war docker/coder-itl.war
- docker-compose down
- docker-compose up -d --build
-
流水线语法检测
流水线语法检测
GitlabRunner 使用Maven
-
错误
解决前 解决后 提示权限不足,是完全不需要理会权限问题,就算设置后,依然读取不到 mvn
-
解决方案
-
检测宿主机 maven,java
等的环境变量是否生效
检测所需环境 -
获取环境变量所在路径
获取路径
-
-
添加数据卷
-
或者重新启动
gitlab-runner
容器时指定数据卷
# 查看正在运行的容器
docker ps
# 停止容器
docker stop 上述获取的容器id
# 删除容器
docker rm 上述获取的容器id
# 参数解释
# 将宿主机的 maven、java 环境映射到 docker 内 前面是系统(宿主机)相关环境变量位置:后面是docker内映射路径
-v /usr/local/maven_home/apache-maven-3.6.3:/usr/local/maven_home/apache-maven-3.6.3
-v /usr/local/maven_home/jdk1.8.0_231:/usr/local/maven_home/jdk1.8.0_231
# 启动容器交互式 指定名称后期需要使用 gitlab-runner 名称 数据卷问题困扰,可以将文件放在默认数据卷路径下
# TODO: 数据卷如何进行附加添加文件路径 Eg:对已经创建运行的容器单独添加数据卷路径指定操作
docker run -d --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /etc/gitlab-runner \
-v /usr/local/maven_home/apache-maven-3.6.3:/usr/local/maven_home/apache-maven-3.6.3 \
-v /usr/local/maven_home/jdk1.8.0_231:/usr/local/maven_home/jdk1.8.0_231 \
gitlab/gitlab-runner:v12.9.0
# gitlab-runner:v12.9.0 容器名称 和 版本号
# 交互式注册
docker exec -it gitlab-runner gitlab-runner register
-
配置所需环境变量
# 进入容器内
docker exec -it 容器id bash
# 配置容器内 maven,java 环境变量
vim /etc/profile
# 填写下面内容 系统内和docker都配置
JAVA_HOME=/usr/local/maven_home/jdk1.8.0_231
JRE_HOME=/usr/local/maven_home/jdk1.8.0_231/jre
MAVEN_HOME=/usr/local/maven_home/apache-maven-3.6.3
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$MAVEN_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 使其生效
source /etc/profile
# 容器内检测环境是否生效
mvn -version
-
测试一个
maven
项目stages:
- test
test:
stage: test
script:
- echo first build ci
- /usr/local/maven_home/apache-maven-3.6.3/bin/mvn package
mvn 项目 |
mvn 项目运行结果 |
---|---|
![]() |
![]() |
-
配置容器内的 maven镜像
、本地存储库
等
job、script、stages
-
job
在每个项目中,使用名为
.gitlab-ci.yml
的YAML
文件配置Gitlab CI / CD
管道,在文件中可以定义多个或一个作业job
,每个作业必须具有唯一的名称(不能使用关键字),每个作业是独立的,作业定义了在约束条件下进行相关操作,每个作业至少要包含一个script
-
script
job:
script:
- command x
- connmand
- ...
正则字符需要使用单|双引号 包裹
-
before_script
用于定义一个命令,该命令在每个作业之前运行,
必须是一个数组
。指定的script
与主脚本中指定的任何脚本串联在一起,,并在单个shell
中一起执行before_script
失败导致整个作业失败,其他作业将不在执行.作业失败不会影响after_script
运行 -
after_script
用于定义将在每个作业(包括失败的作业)之后运行的命令
这
必须是一个数组
-
stages
用于定义可以使用的阶段,并且是全局定义的
同一阶段的作业并行运行,不同节点按顺序执行
stages:
- build
- test
- codescan
- deploy
-
.pre & .post
.pre 始终是整个管道的第一个运行阶段
.post始终是整个管道的最后一个运行阶段
用户定义的阶段都在两者之间运行
.pre 和 .post 的顺序无法更改
如果管道仅包含 .pre 或 .post 阶段的作业,则不会创建管道
-
测试
before_script:
- echo "before-script"
# 定义全局变量
variables:
DOMAIN: example.com
# 阶段(顺序执行)
stages:
- build # 构建阶段
- test # 测试阶段
- codescan
- deploy
# 独立阶段任务: 构建
build:
before_script:
- echo "before_script in job"
stage: build
script:
- echo "mvn clean"
- echo "mvn install"
- echo "$DOMAIN" # 获取全局变量
after_script:
- echo "after_script int buildjob"
# 单元测试
unitites:
stage: test
script:
- echo "run test"
# 发布
deploy:
stage: deploy
script:
- echo "hello deploy"
- sleep 2;
codescan:
stage: codescan
script:
- echo "codescan"
- sleep 5;
after_script:
- echo "after_script"
- ech
-
输出
测试任务 测试任务
tags、allow_failure、when、retry、timeout、parallel
-
tags
用于指定
runner
用于从允许运行该项目的所有
Runner
列表中选择特定的Runner
,在Runner
注册期间,您可以指定Runner
的标签 -
allow_failure
allow_failure
允许作业失败,默认值为false
,启用后,如果作业失败,改作业将在用户界面显示橙色警告,但是,管道的逻辑流程将认为作业成功/通过,并且不会阻塞,假设所有其他作业均成功,则该作业的阶段及其管道将显示相同的橙色警告,但是,关联的提交将会被标记为通过
,而不会发出警告 -
when
-
on_success
前面阶段中的所有作业都成功时才会执行,默认值
-
on_failure
当前面阶段出现失败时执行 -
always
总是执行作业 -
manual
手动执行作业 -
delayed
延迟执行作业codescan:
stage: codescan
allow_failure: true
script:
- echo "codescan"
- sleep 5;
when: delayed
start_in: '30' # 单位秒
-
-
retry
-
配置在失败的情况下重试作业的次数 -
当作业失败并配置了 retry
,将再次处理该作业,直到达到retry
关键字指定的次数 -
如果 retry
设置为2
,并且作业在第二次运行成功(第一次重试),则不会再次重试,retry
值必须是一个整数,等于或大于0
,但小于或等于2
(最多两次重试,总共运行3
次)
-
-
timeout
-
作业级别的超时可以超过项目级别超时,但不能超过
Runner
特定的超时job:
script: echo ""
timeout: 2 hours 30 minutes
-
-
parallel
-并行作业-
配置要并行运行的作业实例数,此值必须大于或等于 2
并且小于或等于50
-
这将创建 N
哥并行运行的同一作业实例,他们从job_name 1
/N
依次命名
-
Pipeline
-
only
&&except
用分支策略来限制jobs
构建-
only
定义那些分支和标签的git
项目将会被job
执行 -
except
定义那些分支和标签的git
项目不会被执行 -
实例
-
# 独立阶段任务: 构建
build:
before_script:
- echo "before_script in job"
stage: build
script:
- echo "mvn clean"
- echo "mvn install"
- echo "$DOMAIN" # 获取全局变量
only:
- main # 只允许main 运行 可以匹配正则 /^*.gif$/
限制 |
---|
![]() |
-
rules
-
允许按顺序评估单个规则,直到匹配并为作业动态提供属性
-
不能
only except
组合使用 -
可用规则
-
if
如果条件匹配 -
changes
指定文件发生变化 -
exists
指定文件存在
-
-
作者介绍