Centos7-安装 GITLAB 并配置
Centos7-安装 GITLAB 并配置
网络配置
-
安装虚拟机时选择
NAT
网络,安装不开启本地网络 ( 物理环境使用路由器选择桥接模式,单机或拨号上网选择
)NAT 模式,不想用虚拟机上网则选主机模式 -
安装完毕后修改
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38cd /etc/sysconfig/network-scrips/
ls
# 每个人的名称不一样 前缀应该一样
vim ifcfg-ens33
# 自动获取IP
dhclinet
# 查看 IP 可以设置 ens 显示的 IP
ip addr
########################### 标注修改、添加部分改动,其余全部默认 ###############
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static # 修改
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=ab405b3a-ac93-4f32-8f98-1c2b6f89ec9f
DEVICE=ens33
ONBOOT=yes # 修改
# 添加
IPADDR=192.168.133.128 # NAT 网关同一网段 IP 都可以进行通信
NETMASK=255.255.255.0
GATEWAY=192.168.133.2
DNS1=192.168.133.2
DNS2=144.144.144.144
DNS3=8.8.8.8
####################################################################
# 重启网络
service network restart-
配置原因
IPADDR
-
-
SSH
连接 1
2# 检测 SSHD 服务
systemctl status sshd可运行 => 该 SSHD
服务正常 -
error
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 可能需要安装
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 -
连接
1
2
3
4
5# 获取 ip
ip addr | ipconfig(最小化安装没有该命令)
# xproperties.. 其他工具连接方式 => 输入 root 用户即密码(安装时设定的)
ssh root@ip:port -
脚本
( 创建一个 properties
)文件运行 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25# 创建一个 aliyunYum.sh
# 赋予权限 chmod 777 aliyunYum.sh
# 添加如下能容
#!/bin/sh
# 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 makecache
yum update -y
# docker
yum list installed | grep docker
sudo yum -y remove *.x86_64
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io-
验证
验证是否被篡改
-
-
Yum 源更换
-
更换
Yum
源 1
2
3
4
5
6
7
8
9
10
11
12
13
14# 注意权限问题
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
Docker 安装
-
删除之前版本
1
2yum list installed | grep docker
sudo yum -y remove *.x86_64 -
安装
1
2
3
4
5
6
7
8
9# 安装 yum-utils
sudo yum install -y yum-utils
# 设置 yum 源为阿里云方便下载 Docker Engine
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装最新版本的 Docker Engine 和 容器
sudo yum -y install docker-ce docker-ce-cli containerd.io -
Docker
启动与停止1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 启动 docker
sudo systemctl start docker
# 停止 docker
sudo systemctl stop docker
# 重启 docker
sudo systemctl restart docker
# 设置开机启动
sudo systemctl enable docker
# 查看 docker 状态
sudo systemctl status docker
# 查看 docker 内容器运行的状态
sudo docker stats
# 查看 docker 概要信息
sudo docker info
# 查看 docker 帮助文档 -
配置镜像加速
1
2
3
4
5
6
7
8
9
10
11# 修改如下文件
vim /etc/docker/daemon.json
# 添加此 json
{
"registry-mirrors":["https://hub-mirror.c.163.com/","https://ustc-edu-cn.mirror.aliyuncs.com/"]
}
# 重新加载
sudo systemctl daemon-reload
# 重启 docker
sudo systemctl restart docker -
数据卷
1
2
3
4# 查看该数据卷对应宿主机的目录地址
docker volume inspect 数据卷名称
# 数据卷挂载信息查看 Munts
docker inspect 容器id 或名称
安装GITLAB
-
切换
sshd
端口 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20vim /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
# 修改xproperties 连接端口
ssh root@ip:port -
安装
docker-compose
-
gitlab
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34# 创建本地
gitlab 存储配置文件、日志、数据等的路径
mkdir -p ~/data/gitlab ~/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 22:22 --name gitlab --restart always --privileged=true -v ~/data/gitlab:/etc/gitlab/ -v ~/data/gitlab/logs:/var/log/gitlab -v ~/data/gitlab:/var/opt/gitlab gitlab/gitlab-ce:12.9.0-ce.0
# -privileged=true 使用该参数,container内的 root 拥有真正的 root 权限。
# docker help run
# 进入容器内部
docker exec -it gitlab properties
vim /etc/gitlab/gitlab.rb
# 编辑站点地址
#可以访问GitLab 的 URL。
external_url 'http://47.104.232.247'
# 刷新配置
gitlab-ctl reconfigure
# 重启服务
# gitlab-ctl restart
# 退出容器
exit
# docker 重启
# docker restart gitlab
#服务控制
docker start gitlab
docker stop gitlab
docker rm gitlab
# 获取运行容器名称
docker ps -qa --format "{{.Names}}" -
通过绑定的
ip
访问, Eg:192.168.0.128:80(默认
80 注意是否被端口占用) -
修改密码,
登录服务器 修改 root
密码 第一次是修改 root
密码,下图是修改后的 -
安装、注册
runner
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23# docker 安装
docker pull gitlab/gitlab-runner:v12.9.0
# 创建映射路径
mkdir -p ~/data/gitlab-runner/config
# 启动容器交互式 指定名称后期需要使用 gitlab-runner 名称
docker run -d --name gitlab-runner --privileged=true --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/data/gitlab-runner/config:/etc/gitlab-runner/config \
-v /usr/bin/docker:/usr/bin/docker \
-v /usr/local/maven/apache-maven-3.6.3:/usr/local/maven/apache-maven-3.6.3 \
-v /usr/local/java/jdk1.8.0_231:/usr/local/java/jdk1.8.0_231 \
-v /usr/local/docker-compose:/usr/local/docker-compose \
gitlab/gitlab-runner:v12.9.0
sudo chown root:root /var/run/docker.socks
# 检查
docker ps | grep gitlab-runner
# 进入容器内部
docker exec -it 容器id properties
# 测试
gitlab-runner -h测试环境 v12.9.0
配置容器内环境变量 -
认识
runner
类型入口位置 注册 Runner => share
特定 Runner
IP(192.168.0.128:[port])/dashboard/groups => 1.
创建组 2. 创建 Runner
-
-
GitlabRunner
类型 share
: 运行整个平台项目的作业( gitlab
)group
: 运行特定group
下的所有项目的作业 ( group
)specific
: 运行指定的项目作业() project
)locked
: 无法运行项目作业paused
:不会运行作业
-
交互式注册
Runner
1
2# 推荐 => 执行成功了
docker exec -it gitlab-runner gitlab-runner register交互式注册 -
注册后
share
注意勾选 -
非交互式注册
Runner
-
Docker
1
2
3
4
5
6
7
8
9
10
11docker 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" -
properties
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27# 后续测试
docker run -itd --rm -v ~/data/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:v12.9.0 register \
--non-interactive \
--executor "properties" \
--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"
+ 相关命令
```properties
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
-
-
关联远程仓库
登录页面的用户名和密码而不是 Admin..
流水线任务
-
项目根目录下创建
.gitlab-ci.yml
1
2
3
4
5
6
7
8
9
10
11
12stages:
- 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
-
错误
解决前 解决后 -
解决方案
- 检测宿主机
maven,java
等的环境变量是否生效
检测所需环境 -
获取环境变量所在路径
获取路径 -
重新启动容器并添加对应文件数据卷路径
-
或者重新启动
gitlab-runner
容器时指定数据卷1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32# 查看正在运行的容器
docker ps
# 停止容器
docker stop 上述获取的容器id
# 删除容器
docker rm 上述获取的容器id
# 参数解释 gitlab-runner => properties 权限比较低
# 将宿主机的 maven、java 环境映射到 docker 内 前面是系统(宿主机) 相关环境变量位置: 后面是 docker 内映射路径
# 添加 maven 环境
-v /usr/local/maven/apache-maven-3.6.3:/usr/local/maven/apache-maven-3.6.3
# 添加Jdk 环境
-v /usr/local/java/jdk1.8.0_231:/usr/local/java/jdk1.8.0_231 \
# 添加 docker-compose的环境变量路径
-v /usr/local/docker-compoe:/usr/local/docker-compoe
# 启动容器交互式 指定名称后期需要使用 gitlab-runner 名称 数据卷问题困扰,可以将文件放在默认数据卷路径下
# TODO: 数据卷如何进行附加添加文件路径 Eg:对已经创建运行的容器单独添加数据卷路径指定操作
docker run -d --name gitlab-runner --privileged=true --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /etc/gitlab-runner \
-v /usr/local/maven/apache-maven-3.6.3:/usr/local/maven/apache-maven-3.6.3 \
-v /usr/local/java/jdk1.8.0_231:/usr/local/java/jdk1.8.0_231 \
-v /usr/local/docker-compoe:/usr/local/docker-compoe \
gitlab/gitlab-runner:v12.9.0
# gitlab-runner:v12.9.0 容器名称 和 版本号
# 交互式注册
docker exec -it gitlab-runner gitlab-runner register -
配置所需环境变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 进入容器内
docker exec -it 容器id properties
# 配置容器内 maven,java 环境变量
vim /etc/profile
# 填写下面内容 系统内和docker 都配置
JAVA_HOME=/usr/local/java/jdk1.8.0_231
JRE_HOME=/usr/local/java/jdk1.8.0_231/jre
MAVEN_HOME=/usr/local/maven/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
项目 1
2
3
4
5
6
7
8
9
10
11
12
13stages:
- test
test:
stage: test
script:
- echo first build ci
- /usr/local/maven/apache-maven-3.6.3/bin/mvn package # 注意环境变量位置
- cp target/gitlab-ci-1.0-SNAPSHOT.war docker/coderitl.war
- docker-compose down
- docker-compose up -d --build
- docker rmi $(docker images -qf dangling=true)mvn
项目 mvn
项目运行结果 -
配置容器内的
maven
、镜像 本地存储库
等 -
测试
Maven=>JavaWeb
项目
-
- 检测宿主机
Docker in Docker
-
错误信息
-
启动
gitlab-runner
时,添加参数 1
--privileged=true
-
成功运行
JavaWeb
项目构建 JavaWeb
项目构建
资源访问
-
Tomcat
端口需要了解 -
IP:8080/Dockerfile
中复制的 xx.war 就是项目访问路径 项目访问 输出
job、script、stages
-
job
在每个项目中,
使用名为 .gitlab-ci.yml
的 YAML
文件配置 Gitlab CI / CD
管道,在文件中可以定义多个或一个作业 job
,每个作业必须具有唯一的名称(不能使用关键字), 每个作业是独立的, 作业定义了在约束条件下进行相关操作, 每个作业至少要包含一个 script
-
script
1
2
3
4
5
6
7
8job:
script:
- command x
- connmand
- ...
正则字符需要使用单|双引号 包裹
-
before_script
用于定义一个命令,
该命令在每个作业之前运行, 必须是一个数组
。指定的script
与主脚本中指定的任何脚本串联在一起,, 并在单个 properties
中一起执行 before_script
失败导致整个作业失败, 其他作业将不在执行. 作业失败不会影响 after_script
运行 -
after_script
用于定义将在每个作业
(包括失败的作业) 之后运行的命令 这
必须是一个数组
-
stages
用于定义可以使用的阶段,
并且是全局定义的 同一阶段的作业并行运行,
不同节点按顺序执行 1
2
3
4
5stages:
- build
- test
- codescan
- deploy -
.pre & .post
1
2
3
4
5
6
7.pre 始终是整个管道的第一个运行阶段
.post始终是整个管道的最后一个运行阶段
用户定义的阶段都在两者之间运行
.pre 和 .post 的顺序无法更改
如果管道仅包含 .pre 或 .post 阶段的作业,则不会创建管道 -
测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46before_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
延迟执行作业 1
2
3
4
5
6
7
8
9codescan:
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
特定的超时 1
2
3job:
script: echo ""
timeout: 2 hours 30 minutes
-
-
parallel
-并行作业- 配置要并行运行的作业实例数,此值必须大于或等于
2
并且小于或等于 50
- 这将创建
N
哥并行运行的同一作业实例, 他们从 job_name 1
/N
依次命名
- 配置要并行运行的作业实例数,此值必须大于或等于
Pipeline
-
only
&&except
用分支策略来限制 jobs
构建 -
only
定义那些分支和标签的 git
项目将会被 job
执行 -
except
定义那些分支和标签的 git
项目不会被执行 -
实例
1
2
3
4
5
6
7
8
9
10
11
12# 独立阶段任务: 构建
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
指定文件存在 -
测试实例
1
-
-
-
workfly
问题总结
-
clone
: 地址携带tocken
类似字符串, 导致 hosts
解析报错 -
gitlab
注册由于版本不同导致需要获取密码问题 -
gitlab-runneer
页面 500
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21# 进入 gitlab 容器内部
# 进入控制台
gitlab-rails console
# 输入如下
ApplicationSetting.current.reset_runners_registration_token!
# Clear project tokens
UPDATE projects SET runners_token = null, runners_token_encrypted = null;
# Clear group tokens
UPDATE namespaces SET runners_token = null, runners_token_encrypted = null;
# Clear instance tokens
UPDATE application_settings SET runners_registration_token_encrypted = null;
# Clear key used for JWT authentication
# This may break the $CI_JWT_TOKEN job variable:
# https://gitlab.com/gitlab-org/gitlab/-/issues/325965
UPDATE application_settings SET encrypted_ci_jwt_signing_key = null;
# Clear runner tokens
UPDATE ci_runners SET token = null, token_encrypted = null; -
http
无法使用问题 -
mvn
权限不足问题 -
docker in docker
问题