Docker+gitlab+jenkins实现项目自动部署(

一、Docker安装(CentOS)

1、准备工作

系统要求

以下为官网原文

To install Docker Engine, you need a maintained version of CentOS 7 or 8. Archived versions aren’t supported or tested.

The centos-extras repository must be enabled. This repository is enabled by default, but if you have disabled it, you need to re-enable it.

The overlay2 storage driver is recommended.

Docker 支持 64 位版本 CentOS 7/8,并且要求内核版本不低于 3.10。 CentOS 7 满足最低内核的要求,但由于内核版本比较低,部分功能(如 overlay2 存储层驱动)无法使用,并且部分功能可能不太稳定。

卸载旧版本

旧版本的Docker被称为Docker或Docker -engine。 如果安装了这些组件,运行以下命令进行卸载:

1
2
3
4
5
6
7
8
9
10
bash复制代码$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

CentOS8额外设置

由于 CentOS8 防火墙使用了 nftables,但 Docker 尚未支持 nftables, 我们可以使用如下设置使用 iptables

更改 /etc/firewalld/firewalld.conf

1
2
bash复制代码# FirewallBackend=nftables
FirewallBackend=iptables

2、使用仓库方式进行安装

设置仓库

在新主机上首次安装Docker引擎之前,需要设置Docker仓库。安装yum-utils包(用到yum-config-manager工具)并设置仓库,鉴于国内网络问题,强烈建议使用国内源,官方源请在注释中查看。

1
2
3
4
5
6
7
8
9
bash复制代码$ sudo yum install -y yum-utils
$ sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 官方源
# $ sudo yum-config-manager \
# --add-repo \
# https://download.docker.com/linux/centos/docker-ce.repo

如果需要测试版本的 Docker 请执行以下命令:

1
bash复制代码$ sudo yum-config-manager --enable docker-ce-test

安装Docker引擎

安装最新版本的Docker Engine和容器

1
bash复制代码$ sudo yum install docker-ce docker-ce-cli containerd.io

3、启动Dokcer

1
2
bash复制代码$ sudo systemctl enable docker
$ sudo systemctl start docker

4、测试Docker安装是否正确

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
bash复制代码$ docker run --rm hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:cc15c5b292d8525effc0f89cb299f1804f3a725c8d05e158653a563f15e4f685
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/

5、后置配置

镜像加速

使用阿里云镜像加速服务

1
2
3
4
5
6
7
8
bash复制代码sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

registry-mirrors参数即镜像加速地址,开通服务获取即可。

添加内核参数

如果在 CentOS 使用 Docker 看到下面的这些警告信息:

1
2
bash复制代码WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

请添加内核配置参数以启用这些功能。

1
2
3
4
bash复制代码$ sudo tee -a /etc/sysctl.conf <<-EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

然后重新加载 sysctl.conf 即可

1
bash复制代码$ sudo sysctl -p

二、配置Docker对外开放接口

1、配置对外接口

  • 修改docker配置文件
1
bash复制代码vim /usr/lib/systemd/system/docker.service

找到 ExecStart=/usr/bin/dockerd在后面添加tcp://0.0.0.0:端口号

1
bash复制代码ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:9004 -H fd://

或者直接执行

1
bash复制代码sed -i 's#/usr/bin/dockerd#& -H tcp://0.0.0.0:9004#' /usr/lib/systemd/system/docker.service
  • 重启docker
1
bash复制代码 systemctl restart docker

2、开放端口宿主机访问

  • centos开放端口宿主机访问
1
2
bash复制代码firewall-cmd --add-port=9004/tcp --permanent
firewall-cmd --reload
  • 查询端口是否开启
1
bash复制代码firewall-cmd --query-port=9004/tcp
  • 除此之外还可以开机自启动,将firewalld起起来即可,并且允许其自启动
1
2
bash复制代码systemctl start firewalld 
systemctl enable firewalld

3、查看docker版本信息

  • 浏览器访问:
1
bash复制代码 http://xx.xx.xx.xx:9004/version

看到json信息则表示配置成功

三、安装配置Gitlab

1、拉取Gitlab镜像

1
bash复制代码docker pull gitlab/gitlab-ce

2、构建启动容器

  • 创建gitlab日志,数据,配置的存放路径,通常会在构建容器的时间,会把配置 (etc) 、 日志 (log) 、数据 (data) 放到容器外面,方便后期数据迁移或者修改配置
1
bash复制代码sudo mkdir -p /docker/gitlab/config   /docker/gitlab/logs   /docker/gitlab/data

启动容器

1
2
3
4
5
6
7
8
9
10
11
12
13
bash复制代码sudo docker run --d \
--hostname gitlab \
--publish 8011:443 \
--publish 8012:8012 \
--publish 8013:22 \
--privileged=true \
--name gitlab \
--restart always \
-v /docker/gitlab/config:/etc/gitlab \
-v /docker/gitlab/logs:/var/log/gitlab \
-v /docker/gitlab/data:/var/opt/gitlab \
-v /docker/gitlab/logs/reconfigure:/var/log/gitlab/reconfigure \
gitlab/gitlab-ce:latest

添加配置

1
bash复制代码vim /docker/gitlab/config/gitlab.rb
  • 添加下面3行
1
2
3
4
5
6
7
8
bash复制代码#配置http协议所使用的访问地址,不加端口号默认为80
external_url 'http://xx.xx.xxx.xxx:8012'
#配置ssh协议所使用的访问地址和端口
gitlab_rails['gitlab_ssh_host'] = 'xx.xx.xxx.xxx'
#此端口是run时22端口映射的8013端口
gitlab_rails['gitlab_shell_ssh_port'] = 8013
#保存推出
:wq
  • 看个人需要,一般而已都会限制内存,也可以在docker启动的时候配置,命令为-m 4G
1
css复制代码docker update --memory 4096m --memory-swap -1 gitlab
  • 重启gitlab
1
复制代码docker restart gitlab
  • 进入gitlab容器
1
bash复制代码docker exec -it gitlab bash
  • 重新载入配置文件,并开启
1
2
bash复制代码gitlab-ctl reconfigure
gitlab-ctl start

3、修改root用户密码

  • 进入gitlab控制台
1
bash复制代码gitlab-rails console -e production
  • 获得用户数据,修改用户密码
1
2
3
4
5
bash复制代码user = User.where(id: 1).first
user.password='2YkDixw6xJiD/68kCsAZBu9W9ZhGdRlT0YykDYiOvOAE=1'
user.password_confirmation='2YkDixw6xJiD/68kCsAZBu9W9ZhGdRlT0YykDYiOvOAE=1'
user.save!
quit
  • 重启gitlab需要等待一段时间才能访问,否则会出现502,如果出现502,还有可能是内存不够的原因,建议查看docker容器的gitlab日志
1
bash复制代码docker restart gitlab

四、安装配置Jenkins

1、准备工作

安装jdk

  • 上传jdk压缩包到自定义目录,这里提供从官网拉下来的jdk1.8的linux版本

链接: pan.baidu.com/s/1DQxkbr4J…

提取码: qxu5

  • 解压jdk压缩包到指定目录
1
bash复制代码tar -zxvf jdk-8u202-linux-x64.tar.gz -C /opt/

安装maven

  • 上传jdk压缩包到自定义目录,这里提供从官网拉下来的maven-3.8.4版本

链接: pan.baidu.com/s/198GSQQZT…

提取码: 87qb

1
bash复制代码 tar -zxvf apache-maven-3.8.4-bin.tar.gz -C /opt/

安装git

这里使用yum安装

1
复制代码yum -y install git

配置环境变量

  • 修改环境变量配置文件
1
bash复制代码vim /etc/profile
  • 在最后一行添加java环境变量和maven环境变量
1
2
3
4
5
6
7
8
bash复制代码#java环境配置
export JAVA_HOME=/opt/jdk1.8.0_202
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=./:JAVA_HOME/lib:$JRE_HOME/lib
#maven环境配置
export M2_HOME=/opt/apache-maven-3.8.4
#path
export PATH=/bin:/usr/bin:/sbin:/usr/sbin:$JAVA_HOME/bin:$M2_HOME/bin:$PATH
  • 立即重载配置
1
bash复制代码source /etc/profile

检查安装是否完成

  • java
1
复制代码java -version
  • maven
1
复制代码mvn -v
  • git
1
css复制代码git --version

2、安装jenkins

拉取镜像

1
bash复制代码docker pull jenkinsci/blueocean

运行jenkins容器

1
css复制代码docker run -d --name docker-jenkins -p 8008:8080 -p 50000:50000 jenkinsci/blueocean

访问jenkins主页

浏览器打开ip:8008, 正常情况下会出现解锁jenkins页面

微信截图_20211126093234.png

  • 查看jenkins初始密码
1
bash复制代码docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

将打印出的密码粘贴到管理员密码输入框中, 点击继续进入配置页面,这里选择安装推荐的插件,可能会有安装失败的插件,重试即可

20211126093306250.png

  • 创建用户

插件安装完成后,输入信息创建用户, 点击保存并完成即可进入jenkins主页

微信截图_20211126094104.png

  • jenkins主页

微信截图_20211126102520.png

3、配置

下面对 gitlab 以及 jenkins 进行配置

在容器内生成 ssh 公钥

  • 进入容器
1
bash复制代码docker exec -it jenkins bash
  • 生成密钥
1
bash复制代码ssh-keygen -t rsa -C test@test.com

连续回车三下生成密钥

  • 查看密钥
1
bash复制代码ls ~/.ssh

微信截图_20211126103229.png
可从容器中取出密钥文件

1
bash复制代码docker cp jenkins:/var/jenkins_home/.ssh /tmp/

然后ftp下载文件查看密钥文件内容

gitlab配置公钥

gitlab主页右上角找到Preferences菜单打开,找到SSH Keys栏,将从上面获取id_rsa_pub文件中的公钥配置到SSH keys中

20211126111521445.png

jenkins配置

主要配置介绍

20211126112905379.png

  • 配置凭据
  1. 找到Manage Credentials菜单
  2. 点击全局凭据
  3. 点击添加凭据

进行如下配置:

微信截图_20211126134834.png
其中Key为之前在jenkins容器中生成的RSA私钥, id_rsa文件中的内容

  • 系统配置中配置jdk,maven路径

微信截图_20211126133158.png

  • 全局工具配置,配置jdk,maven,git路径和上面的路径要保持一致(先忽略出现的黄字警告,后面会进行解决)

20211126135346009.png

20211126135400245.png

20211126135406453.png

五、项目配置

1、jenkins新建项目

20211126135833961.png

2、进行如下配置

微信图片_20211126140438.png

3、保存项目并构建

查看控制台输出,出现如下图所示输出表示jenkins已经可以从gitlab上拉取代码到服务器了

20211126140553883.png

接下来的一章介绍的是jenkins正式部署项目,并持续集成,敬请期待。

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%