[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)]

这篇具有很好参考价值的文章主要介绍了[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)]。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

11、自由风格的CI操作(最终)

        前面的架构存在的问题是,若有多个目标服务器都需要使用该镜像,那么每个目标服务 器都需要在本地构建镜像,形成系统资源浪费。若能够在 Jenkins 中将镜像构建好并推送到 Harbor 镜像中心,那么无论有多少目标服务器需要该镜像,都只需要从 Harbor 拉取即可

Jenkins容器化实现方案

        如果想在Jenkins中构建镜像,则需要Jenkins中有Docker引擎,指的是Jenkins容器内有Docker,因为我们的Jenkins是用docker起的,可以在Jennkins内再安装docker,但这种方式不太方便,不好维护,可以使用与宿主机共享Docker引擎。

修改 docker.sock 权限

        /var/run/docker.sock 文件是 docker clientdocker daemon 在本地进行通信的 socket 文件。默认的组为 docker,且 other 用户不具有读写权限,这样 Jenkins 是无法来操作该文 件的。

[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)],docker,ci/cd,架构

将其组调整为 root,且为其分配读写权限

[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)],docker,ci/cd,架构

修改 Jenkins 启动命令后重启

首先强制删除正在运行的 Jenkins 容器。

[root@jenkins run]# docker rm -f jenkins
jenkins

        然后在 Jenkins 启动命令中新增/var/run/docker.sock,docker 命令文件/usr/bin/docker, 及/etc/docker/daemon.json 文件为数据卷。
重启 Jenkins 容器。

[root@jenkins run]# docker run --name jenkins \
> --restart always \
> -p 8080:8080 \
> -p 50000:50000 \
> -v /var/jenkins_home:/var/jenkins_home \
> -v /var/run/docker.sock:/var/run/docker.sock \ 
> -v /usr/bin/docker:/usr/bin/docker \
> -v /etc/docker/daemon.json:/etc/docker/daemon.json \ # 实现推送harbor时使用的http信任,而不是https
> -d jenkins/jenkins:lts

进入Jenkins容器查看是否可以使用docker了。

[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)],docker,ci/cd,架构

Jenkins构建镜像推送到Harbor

        先把idea的compose.yml文件删除,push到gitlab,因为我们使用jenkins帮忙构建镜像然后推送到Harbor,不需要到目标服务器进行本地制作镜像并启动容器。(操作没截图,自己记得删除)

修改 daemon.json 文件

        Jenkins 是 Harbor 的客户端,需要修改/etc/docker/daemon.json 文件。修改后重启 Docker

[root@jenkins ~]# vim /etc/docker/daemon.json
[root@jenkins ~]# cat /etc/docker/daemon.json 
{
    "insecure-registries": [
        "192.168.40.138:8888" # harbor服务器所在的IP和端口
    ]
}

重启

[root@jenkins my_hellojenkins]# service docker restart

Jenkins 删除构建后操作

        原来的 Jenkins 中配置的“构建后操作”完成的是将代码推送到目标服务器后,让目标服务器通过 docker compose 完成镜像的构建与启动。但现在不需要了,因为镜像构建任务要由 Jenkins 自己完成了。在 Jenkins 当前任务下的“配置”中删除

[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)],docker,ci/cd,架构

Jenkins 添加 shell 命令

        在 sonarqube 对代码质量检测完毕后,再添加一个“构建步骤”。这个构建步骤通过 shell 命令方式完成。

[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)],docker,ci/cd,架构

[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)],docker,ci/cd,架构

mv target/*.jar docker/
cd docker
docker build -t hellojenkins .
docker login -u admin -p Harbor12345 192.168.40.138:8888
docker tag hellojenkins 192.168.40.138:8888/jks/hellojenkins
docker image prune -f
docker push 192.168.40.138:8888/jks/hellojenkins

重新构建

        Jenkins 中在返回的任务首页中,再次执行立即构建。构建成功后,在 Jenkins 主机中可以查看到构建好的镜像与重新tag 过的镜像。

[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)],docker,ci/cd,架构

在 harbor 的仓库中也可以看到推送来的镜像。
[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)],docker,ci/cd,架构

[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)],docker,ci/cd,架构
[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)],docker,ci/cd,架构

Jenkins通知目标服务器拉取镜像

目标服务器修改 daemon.json 文件

        目标服务器是 Harbor 的客户端,需要修改/etc/docker/daemon.json 文件。修改后重启 Docker

[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)],docker,ci/cd,架构

定义脚本文件

        在目标服务器 PATH 路径下的任意目录中定义一个脚本文件 deploy.sh。例如,定义在/usr/local/bin目录下。然后再为其赋予可执行权限。这样该 deploy.sh命令就可以在任意目录下运行了。

文件内容如下

#!/bin/bash
#harbor的IP地址和端口
harbor_addr_port=$1
#harbor的项目名
harbor_proj=$2
#harbor里的镜像名
image_repo=$3
#标签
image_tag=$4
#容器内部端口
app_port=$5
#宿主机端口
export_port=$6
#镜像名
image=$harbor_addr_port/$harbor_proj/$image_repo:$image_tag
#如果容器已经存在,就删除容器
exist_container_id=`docker ps -a | grep $image_repo | awk '{print $1}'`
if [ -n "$exist_container_id" ];then
        docker stop "$exist_container_id"
        docker rm "$exist_container_id"
fi
#判断tag是否存在,如果存在就删除,然后拉取最新镜像
exist_image_tag=`docker images | grep $harbor_addr_port/$harbor_proj/$image_repo | awk '{print $2}'`
if [[ "$exist_image_tag" =~ "$image_tag" ]]; then
        docker rmi -f $image
fi
docker login -u admin -p Harbor12345 $harbor_addr_port
docker pull $image
docker run --name $image_repo -d -p $export_port:$app_port $image
echo "SUCCESS"

授予可执行权限

[root@target bin]# chmod +x deploy.sh 

执行脚本后可以看到

[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)],docker,ci/cd,架构

修改idea代码

[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)],docker,ci/cd,架构

再次构建,构建完成之后执行脚本

[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)],docker,ci/cd,架构

浏览器查看

[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)],docker,ci/cd,架构

Jenkins 添加端口号参数

[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)],docker,ci/cd,架构

Jenkins 添加构建后操作

还是在 Jenkins 当前任务下的“配置”中,为任务添加构建后操作
[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)],docker,ci/cd,架构

[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)],docker,ci/cd,架构

重新构建工程

        这次重新构建,可以看到出现了 export_port 的文本框。在这里可以修改容器对外暴露的端口号
[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)],docker,ci/cd,架构

        构建成功后可以看到,目标服务器中增加了新的镜像,该镜像是从 harbor 拉取的,还可以看到,该镜像的容器也已经启动。

[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)],docker,ci/cd,架构

浏览器访问没有问题

[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)],docker,ci/cd,架构文章来源地址https://www.toymoban.com/news/detail-624479.html

到了这里,关于[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)]的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker部署Jenkins(Jenkins+Gitlab+Maven实现CI/CD)

          GitLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。       GitLab是由GitLabInc.开发,使用MIT许可证的基于

    2024年02月03日
    浏览(47)
  • 【持续集成CI/持续部署CD】六、Docker Compose构建CI全流程

    1. 创建宿主机挂载目录并赋权 2. 新建 Jenkins+Sonar 安装脚本 jenkins-compose.yml 脚本,这里的 Jenkins 使用的是 Docker 官方推荐的镜像 jenkinsci/blueocean,在实际使用中发现,即使不修改插件下载地址,也可以下载插件,所以比较推荐这个镜像。 3. 在 jenkins-compose.yml 文件所在目录下执行

    2024年02月10日
    浏览(55)
  • docker部署gitlab CI/CD (一)第一篇:部署gitlab及汉化

    网上很多类似教程,但多少有点夹带私货,有的竟然拉取的第三方镜像,而且很多都要修改配置文件,完全不知道是为什么,于是结合其他人的博客和官方文档, 知其然也要知其所以然,于2023年4月17日写下这篇。 官方文档: https://docs.gitlab.com/ee/install/docker.html 主要参考博客

    2023年04月17日
    浏览(48)
  • nodejs前端项目的CI/CD实现(二)jenkins的容器化部署

    docker安装jenkins,可能你会反问,这太简单了,有什么好讲的。 我最近就接手了一个打包项目,它是一个nodejs的前端项目,jenkins已在容器里部署且运行OK。 但是,前端组很追求新技术,不断地升级Nodejs的版本,之前是14,现在需要升级到16。 也就是说,原本运行顺畅的打包不

    2024年01月20日
    浏览(54)
  • gitlab ci/cd+harbor+k8s实现一键部署(python项目)

    使用 kaniko 构建 Docker 镜像 如果仓库使用http

    2024年02月13日
    浏览(65)
  • 在服务器部署Next.js、Node.js项目,并实现自动部署(伪CI\CD)超详细

    目录 一、引言 二、配置服务器 1. 远程连接服务器 · 用服务商提供的远程连接 · 用MotaXterm来远程连接 ​编辑​编辑​编辑  2. 登录实例 · 如何获取账号和密码 · 服务商远程连接方式:  · MotaXterm连接方式 三、项目准备与测试 1. 安装nodejs · 进入安装目录 · 下载 · 解压 ·

    2024年02月05日
    浏览(96)
  • 《DevOps企业级CI/CD实战》:一站式掌握DevOps核心方法论,实现高效自动化部署

    DevOps是一组实践,由人、工具和文化理念组成。DevOps的核心是实现软件开发团队和IT运维团队之间的流程自动化。自2018年起,笔者参与了大型企业中多个项目的DevOps项目实施和改进,从中积累了丰富的实践经验。于是将实践思考与开发经验整理成一本书分享给同路人共同学习

    2024年04月14日
    浏览(72)
  • CI/CD部署

    CI和CD是软件开发中持续集成和持续交付的缩写。 CI代表持续集成(Continuous Integration),是一种实践,旨在通过自动化构建、测试和代码静态分析等过程,频繁地将代码变更合并到共享存储库中。其目的是快速发现和修复代码问题,确保开发团队对软件产品持续交付。其中,

    2024年02月19日
    浏览(46)
  • CI/CD持续测试的未来...

    如果您想知道为什么持续测试如此重要,请考虑以下几点:在过去,软件测试通常是在编写代码并发送给 QA 部门进行独立测试之后进行的。当发现错误时,代码将返回给开发人员进行更正。虽然这种测试方法有效,但非常耗时。如今,企业想要快速生产出高质量的产品,因此

    2024年02月12日
    浏览(52)
  • CI/CD—Docker中深入学习

    什么是容器数据卷: 将应用和环境打包成一个镜像! 数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久 化。MySQL容器删除了,删容器跑路!需求:MySQL数据可以存储在本地 容器之间可以有一个数据共享的技术!Docker 容器中产生的数据,同

    2024年02月14日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包