当前位置: 首页 > news >正文

最简单配置jenkins容器使用宿主机的docker方法

构建镜像和发布镜像到harbor都需要使用到docker命令。而在Jenkins容器内部安装Docker官方推荐直接采用宿主机带的Docker即可

设置Jenkins容器使用宿主机Docker

  • 设置宿主机docker.sock权限

chown root:root /var/run/docker.sock

chmod o+rw /var/run/docker.sock

  • 添加数据卷

version: "3.1"
services:
  jenkins:
    image: jenkins/jenkins
    container_name: jenkins
    ports:
      - 8080:8080
      - 50000:50000
    volumes:
      - ./data/:/var/jenkins_home/
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker
      - /etc/docker/daemon.json:/etc/docker/daemon.json
    restart: always

添加构建操作

添加参数化部署,这里添加一个参数projectVersion,用来给镜像指定具体的版本

 将原来使用over ssh推送jar及dockerFile文件的构建后操作步骤删除

在代码质量检测完成后执行镜像打包操作,并把镜像推送到目标服务器上

mv target/*.jar docker/
docker build -t mytest:${projectVersion} docker/
docker login -u admin -p Harbor12345 192.168.19.7:80
docker tag mytest:${projectVersion} 192.168.19.7:80/repo/mytest:${projectVersion}
docker push 192.168.19.7:80/repo/mytest:${projectVersion}

编写部署脚本

在代码部署的服务器上编写如下脚本deploy,并且将脚本移动环境变量中:

[root@localhost bin]# ls /usr/bin/ | grep deploy.sh
deploy.sh
 

[root@localhost bin]# cat /usr/bin/deploy.sh 
harbor_url=$1
harbor_project_name=$2
project_name=$3
tag=$4
port=$5

imageName=$harbor_url/$harbor_project_name/$project_name:$tag

containerId=`docker ps -a | grep ${project_name} | awk '{print $1}'`
if [ "$containerId" != "" ] ; then
    docker stop $containerId
    docker rm $containerId
    echo "Delete Container Success"
fi

imageId=`docker images | grep ${project_name} | awk '{print $3}'`

if [ "$imageId" != "" ] ; then
    docker rmi -f $imageId
    echo "Delete Image Success"
fi

docker login -u admin -p Harbor12345 $harbor_url

docker pull $imageName

docker run -d -p $port:8080 --name $project_name $imageName

echo "Start Container Success"
echo $project_name
 

配置构建后操作

在项目的参数中添加如下host_port参数:

在excu command中配置如下命名:

deploy.sh 192.168.19.7:80  repo mytest  ${projectVersion} ${host_port}

测试执行构建:

在源码中修改hello 接口为:

 把代码推送到仓库,然后执行构建

 在浏览器上输入:192.168.19.7:8081/hello,查看输出,观看响应是否已经更改。

看到确实已经修改

至此,我们已经完成了一个基本的CI/CD的流水线。

实现的功能有:

1、开发者编完代码后,将代码推送到gitlab仓库中。

2、jenkins将拉取代码,然后通过maven打包

3、打包完成后,通过sonarQube进行代码质量检测

4、质量检测完成后,将代码打包成镜像

5、将生成的镜像文件推送到Harbor服务器上

6、jenkins服务器通知部署服务器做发布操作

          6.1  如果项目有正在运行的容器,需要停止

          6.2 如果有原来项目的镜像需要把镜像进行删除

          6.3 从Harbor服务器上拉取镜像到部署服务器上

         6.4  根据拉取到的最小镜像来运行一个新的容器

http://www.lryc.cn/news/69276.html

相关文章:

  • Android aidl及binder基础知识巩固
  • [日记]LeetCode算法·二十五——二叉树⑤ AVL树(插入+删除)附代码实现
  • flink-1.13.6 例子
  • Go语音基于zap的日志封装
  • 可持续能源技术具有改变世界的潜力,并且已经在多个方面展现出积极的影响。
  • Java常用工具之StringUtils类
  • MyBatis-plus的批量插入方式对比分析
  • 【系分论文】论软件开发模型及应用
  • 渗透测试--5.3.使用john破解密码
  • Go中的变量类型
  • 基于STM32的NRF24L01 2.4G通讯模块的驱动实验(HAL库)
  • DJ5-3 多路访问链路和协议
  • 技术领导力?
  • 计算机的基本工作原理
  • 【论文简述】Cross-Attentional Flow Transformer for Robust Optical Flow(CVPR 2022)
  • 【JAVA】Java中方法的使用,理解方法重载和递归
  • 高级网络计算模式复习
  • 【笔试强训选择题】Day15.习题(错题)解析
  • 图论专题(一)
  • 新星计划2023【网络应用领域基础】————————Day4
  • [CTF/网络安全] 攻防世界 view_source 解题详析
  • 目前流行的9大前端框架
  • 【mysql】explain执行计划之select_type列
  • 网易云音乐开发--音乐播放暂停切换上下首功能实现
  • 如何学习网络安全?
  • 软件测试适合女生吗?
  • 华为云——代码托管的使用
  • ChatGPT从⼊⻔到精通
  • node + alipay-sdk 沙箱环境简单测试电脑网站支付
  • 卷积神经网络详解