1. 简介

开发运维一体化
CI/CD持续集成,持续交付

2. 部署harbor服务器

2.1 安装docker-ce

通过文章docker安装和加速安装docker-ce

2.2 安装harbor

通过文章harbor安装harbor

2.3 集群节点配置私有harbor

1
2
3
vim /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.10.251"]
endpoint = ["http://192.168.10.251"]

重启服务

1
systemctl restart containerd

3. 部署ops服务器

3.1 安装docker

通过文章docker安装和加速安装docker-ce

3.2 配置docker

配置私有harbor

1
2
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry=192.168.10.252 -H tcp://0.0.0.0:2376 -H fd:// --containerd=/run/containerd/containerd.sock

重启docker

1
2
systemctl daemon-reload
systemctl restart docke

3.2 安装gitlab

下载镜像

1
docker pull beginor/gitlab-ce

部署

1
2
3
4
mkdir -p /data/gitlab/etc /data/gitlab/log /data/gitlab/data
chmod 777 /data/gitlab/etc /data/gitlab/log /data/gitlab/data/

docker run -dit --name=gitlab --restart=always -p 8443:443 -p 80:80 -p 222:22 -v /data/gitlab/etc:/etc/gitlab -v /data/gitlab/log:/var/log/gitlab -v /data/gitlab/data:/var/opt/gitlab --privileged=true beginor/gitlab-ce

修改一下两处位置
1.用 vim 编辑器修改/data/gitlab/etc/gitlab.rb 以下几处内容:

1
2
3
external_url 'http://192.168.26.9' 
gitlab_rails['gitlab_ssh_host'] = '192.168.26.9'
gitlab_rails['gitlab_shell_ssh_port'] = 222

2.用 vim 编辑修改/data/gitlab/data/gitlab-rails/etc/gitlab.yml 以下内容:

1
2
3
4
5
gitlab:
## Web server settings (note: host is the FQDN, do not include http://)
host: 192.168.26.9
port: 80
https: false

重启

1
docker restart gitlab

在浏览器里输入 192.168.26.9,会让我们为 root 用户设置新的密码

如果密码设置的没有满足一定的复杂性,则会有如下报错

登录之后,点击创建一个项目

然后在项目名称位置写入 p1,可见登记选中公开,然后点击创建项目

然后点击复制按钮获取 clone 的链接:

在客户端上测试
用命令 yum install git -y 安装 git 客户端软件,然后用 git clone 把此项目的版本库克隆下来:

1
2
[root@vms9 ~]# git clone http://192.168.26.9/root/p1.git
正克隆到 'p1'... warning: 您似乎克隆了一个空版本库。

设置一些变量

1
2
3
4
5
[root@vms9 ~]# cd p1/
[root@vms9 p1]# git config --global user.name "lduan"
[root@vms9 p1]# git config --global user.email lduan@example.com
[root@vms9 p1]# git config --global push.default simple
[root@vms9 p1]#

创建 index.html 并推送到代码仓库

1
2
3
4
5
6
7
8
[root@vms9 p1]# echo 1111 > index.html
[root@vms9 p1]# git add . [root@vms9 p1]# git commit -m 111
[root@vms9 p1]# git push
Username for 'http://192.168.26.9': root
Password for 'http://root@192.168.26.9':
Counting objects: 3, done. Writing objects: 100% (3/3), 207 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0)
To http://192.168.26.9/root/p1.git * [new branch] master -> master
[root@vms9 p1]#

至此,gitlab 配置完毕

3.3 安装jenkins

把 jenkins 的镜像下载下来

1
docker pull jenkins/jenkins:2.249.2-lts-centos7

创建数据卷所需要的目录,并把所有者和所属组改为 1000

1
mkdir /jenkins ; chown 1000.1000 /jenkins

这里为什么要改成 1000,是因为容器里是以 jenkins 用户的身份去读写数据,而在容器里
jenkins 的 uid 是 1000,可以看下此镜像的 Dockerfile 内容

创建 jenkins容器

1
docker run -dit -p 8080:8080 -p 50000:50000 --name jenkins --privileged=true --restart=always -v /jenkins:/var/jenkins_home jenkins/jenkins:2.289.2-lts-centos7

打开浏览器,输入 192.168.10.252:8080

记住,此时一定要先打开浏览器打开这个页面,让其初始化一下,直到看到界面
cat /jenkins/secrets/initialAdminPassword

因为要修改 jenkins 的配置,所以此时关闭 jenkins 容器

1
docker stop jenkins

然后用 vim 编辑打开/jenkins/hudson.model.UpdateCenter.xml,按如下修改

1
2
3
4
5
6
7
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>https://updates.jenkins.io/update-center.json</url>
</site>
</sites>

改为

1
2
3
4
5
6
7
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins</url>
</site>
</sites>

用 vim 编辑器打开/jenkins/updates/default.json
{“connectionCheckUrl”:“http://www.google.com/” 改成
{“connectionCheckUrl”:“http://www.baidu.com/

sed -i ‘s/google/baidu/’ /jenkins/updates/default.json

再次启动 jenkins

1
systemctl start jenkins

直到所有插件全部安装完成

填写必要的网络信息,点击保存并完成

3.4 安装 docker 插件

在 jenkins 主页面依次点击左侧的系统管理-插件管理-可选插件,在搜索栏搜索 docker,选中 docker 和 docker-build-step,然后点击下面的直接安装

点击下面的直接安装

点击返回首页,再依次点击系统管理-节点管理-Configure Clouds

在 add a new cloud 里选择 docker 之后页面跳转到如下页

点击 docker cloud details,输入 tcp://192.168.10.251:2376,然后点击 test connection

可以看到当前 docker 的信息,点击最下面的 save。

在 jenkins 首页,依次点击系统管理-系统配置,找到 docker build,在 docker build 里输入tcp://192.168.26.9:2376,点击 test connection

点击最下面的保存,这样 jenkins 就和 docker 关联起来了。

3.5 jenkins 安全设置

后面 gitlab 要和 jenkins 进行联动,所以必须要需要对 jenkins 的安全做一些设置,依次点击系统管理-全局安全配置-授权策略,勾选"匿名用户具有可读权限"

注意下面的的跨站点伪造保护(CSFR)请求必须要关闭,但是在Jenkins版本自2.2xx版本之后,
在 web 界面里已经没法关闭了:

所以在当前 web 界面里暂且不要管它,点击下面的保存

gitlab 要触发 jenkins 的话,就必须要关闭跨站点伪造请求,web 界面里已经没法关闭了,
所以要需要做如下设置

1
2
3
4
5
6
7
8
docker exec -u root -it jenkins bash

vi /usr/local/bin/jenkins.sh
找到 exec java 那行(大概是在第 37 行),添加
-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
exec java -Duser.home="$JENKINS_HOME"
-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
"${java_opts_array[@]}" -jar ${JENKINS_WAR} "${jenkins_opts_array[@]}" "$@"

然后重启 jenkins 容器

1
docker restart jenki

再次登录到 web 界面查看 跨站点伪造请求的设置

这里已经是关闭了