基于Git+Jenkins+Docker的CI/CD实现

一.What is CI/CD

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二. 环境准备

1.搭建Gitlab私有仓库
docker run -itd --name=gitlab -p 80:80 -v v1:/etc/gitlab -v v2:/var/opt/gitlab gitlab/gitlab-ce

等待几分钟后访问设置的端口,为root用户设置密码,之后便可以使用root用户登录.
在这里插入图片描述

2.搭建harbor私有镜像仓库
wget https://github.com/goharbor/harbor/releases/download/v2.2.0/harbor-offline-installer-v2.2.0.tgz
# 解压
tar -zxvf harbor-offline-installer-v2.2.0.tgz
# 修改配置文件
cd harbor
cp harbor.yml.tmpl harbor.yml
vim harbor.yml

./prepare
# 启动
./install.sh

harbor.yml

# 注释掉https相关,使用http访问
# https related config
#https:
# https port for harbor, default is 443
#port: 443
# The path of cert and key files for nginx
#certificate: /your/certificate/path
#private_key: /your/private/key/path

# 访问ip
hostname: ${ip}
# 启动端口
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
 port: ${port}
# amdin账户密码
harbor_admin_password: ${password}

在这里插入图片描述

# 使配置文件生效
systemctl reload docker

向私有仓库提交镜像

私有仓库搭建好后,还不能直接向仓库提交镜像,需要修改/etc/docker/daemon.json文件,加入镜像仓库的访问地址和端口
/etc/docker/daemon.json


{
    "insecure-registries": ["${ip}:${port}"],
    "registry-mirrors": ["http://${ip}:${port}"]
}
docker pull hello-world
docker tag hello-world:latest ${ip}:${port}/${项目名称}/hello-world:latest
docker login ${ip}:${port} -u admin -p ${password}
docker push ${ip}:${port}/${项目名称}/hello-world:latest

在这里插入图片描述

3.安装jenkins
docker run -itd -u root -p 8080:8080 -p 50000:50000 -v v1:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock --name=jenkins  jenkinsci/blueocean

打开界面,发现要输入密码
在这里插入图片描述

# 查看jenkins密码
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

三.使用Jenkins实现CI/CD

  1. 安装插件
    Jenkins的很多功能依赖于安装的插件,由于我们要在别的服务器执行脚本,所以需要安装Publish Over SSH插件。

安装插件(系统管理–>插件管理–>可选插件 )
在这里插入图片描述
配置服务器信息(系统管理–>系统配置–>Publish over SSH )

在这里插入图片描述

  1. 创建并配置项目
  • 输入项目名,选择构建一个自由风格的软件项目
    在这里插入图片描述
  • General

输入项目描述和项目URL
在这里插入图片描述

  • 源码管理

选择Git,输入项目的URL和需要build的指定分支
在这里插入图片描述

  • 构建触发器
    在这里插入图片描述

在jenkins上这么设置后,git push 后仍然不会触发构建,还需要在gitlab上创建项目的webhook.

填入上图中绿框中的webhook URL和生成的Secret token,完成后点击Add Webhook.

点击WebHook的Test请求,可以模拟事件触发.

在这里插入图片描述

  • 构建环境

在构建环境中进入构建目录,拉取代码,执行构建命令.
在指定镜像的tag名称时,用到了jenkins提供的BUILD_NUMBER环境变量,代表构建的次数,更多的环境变量可以点击Jenkins enviroment variables进行查看.
在这里插入图片描述
构建过程中报错1
ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 120,004 ms]

原因:
默认的构建超时是120000ms,构建时间太长导致了超时

解决办法:
点击高级,在可能超时的构建步骤那里设置 Exec timeout(ms) 合理的时间,以防止构建步骤超时,同时勾选上 Exec in pty 让控制台及时输出相关日志信息
在这里插入图片描述

构建过程中报错2
SSH: Connecting from host [RITS20200001]
SSH: Connecting with configuration [172.25.78.130] …
ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [-125]]

原因:
git pull未设置免密登录,需要输入用户名和密码,一直阻塞着.

解决办法:
git设置免密登录,并且修改.git/config文件中的url为git开头的url而不是http开头的url,最后一定要记得,清空工作区间

tips: 构建的命令最好在构建的机器上手动的敲一下,通过log不方便排查问题。
在这里插入图片描述
在这里插入图片描述

  • 构建完成后操作
    构建完成后,将镜像提交到78.130上的harbor私有仓库,并且在72.46上创建新的容器
    在这里插入图片描述
    在这里插入图片描述

四. 测试CI/CD流程

  1. 点击立即构建
  2. push 代码
  3. 点击Webhook的Test按钮

以上三种操作都能够触发构建,并且可以看到Build History,查看所有的构建历史。
在这里插入图片描述
点击单条构建历史,控制台输出,可以看到构建时的log输出.
在这里插入图片描述
最后的效果就是,开发者往gitlab上push代码,触发事件,拉取代码,构建新的镜像,将镜像提交到harbor私有仓库,并且以此新镜像在测试环境上构建新的容器,完全的自动化。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Selenium399

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值