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。 如果安装了这些组件,运行以下命令进行卸载:

$ 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

# FirewallBackend=nftables
FirewallBackend=iptables
复制代码

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

设置仓库

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

$ 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 请执行以下命令:

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

安装Docker引擎

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

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

3、启动Dokcer

$ sudo systemctl enable docker
$ sudo systemctl start docker
复制代码

4、测试Docker安装是否正确

$ 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、后置配置

镜像加速

使用阿里云镜像加速服务

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 看到下面的这些警告信息:

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

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

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

然后重新加载 sysctl.conf 即可

$ sudo sysctl -p
复制代码

二、配置Docker对外开放接口

1、配置对外接口

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

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

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

或者直接执行

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

2、开放端口宿主机访问

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

3、查看docker版本信息

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

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

三、安装配置Gitlab

1、拉取Gitlab镜像

docker pull gitlab/gitlab-ce
复制代码

2、构建启动容器

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

启动容器

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
复制代码

添加配置

vim /docker/gitlab/config/gitlab.rb
复制代码
  • 添加下面3行
#配置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
docker update --memory 4096m --memory-swap -1 gitlab
复制代码
  • 重启gitlab
docker restart gitlab
复制代码
  • 进入gitlab容器
docker exec -it gitlab bash 
复制代码
  • 重新载入配置文件,并开启
gitlab-ctl reconfigure
gitlab-ctl start
复制代码

3、修改root用户密码

  • 进入gitlab控制台
gitlab-rails console -e production
复制代码
  • 获得用户数据,修改用户密码
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日志
docker restart gitlab
复制代码

四、安装配置Jenkins

1、准备工作

安装jdk

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

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

提取码: qxu5

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

安装maven

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

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

提取码: 87qb

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

安装git

这里使用yum安装

yum -y install git
复制代码

配置环境变量

  • 修改环境变量配置文件
vim /etc/profile
复制代码
  • 在最后一行添加java环境变量和maven环境变量
#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
复制代码
  • 立即重载配置
source /etc/profile
复制代码

检查安装是否完成

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

2、安装jenkins

拉取镜像

docker pull jenkinsci/blueocean
复制代码

运行jenkins容器

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

访问jenkins主页

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

微信截图_20211126093234.png

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

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

20211126093306250.png

  • 创建用户

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

微信截图_20211126094104.png

  • jenkins主页

微信截图_20211126102520.png

3、配置

下面对 gitlab 以及 jenkins 进行配置

在容器内生成 ssh 公钥

  • 进入容器
docker exec -it jenkins bash
复制代码
  • 生成密钥
ssh-keygen -t rsa -C [email protected]
复制代码

连续回车三下生成密钥

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

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

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正式部署项目,并持续集成,敬请期待。

Guess you like

Origin juejin.im/post/7034758683200323597