推荐几个手机能看的网站,wordpress 替换jquery,建网站衡水哪家强?,网站建设好友Jenkins Docker Cloud在Linux应用开发CI中的实践
背景
通过代码提交自动触发CI自动构建、编译、打包是任何软件开发组织必不可少的基建#xff0c;可以最大程度保证产物的一致性#xff0c;方便跨组跨部门协作#xff0c;代码MR等。
Docker在流水线中越来越重要#xff…Jenkins Docker Cloud在Linux应用开发CI中的实践
背景
通过代码提交自动触发CI自动构建、编译、打包是任何软件开发组织必不可少的基建可以最大程度保证产物的一致性方便跨组跨部门协作代码MR等。
Docker在流水线中越来越重要已经是最关键的组成部件之一由于容器化具有的简单性灵活性隔离性和部署方便的特性使得我们可以按需定制可重复的构建环境本文就如何使用Docker容器作为Jenkins编译节点在Linux应用开发 CI中进行了实践。
前提条件
已部署好Jenkins服务具备CI的基础设施。
技术方案
有别于windowsmacosios可能较多会采用虚拟机或物理机方式部署编译节点linux 采用 docker作为编译节点容器化方式环境隔离性好自动容器启动与关闭环境部署方便较虚拟机和物理机部署更节省人力时间成本。
工作流程
Jenkins master发起pipeline流程通过Remote API去连接Docker HostDocker Host拉起需要的容器作为Jenkins slave容器中执行流水线工作流水线完成Jenkins会停止并删除容器 ps Jenkins master 节点只负责调控具体的构建任务下放到Docker Slave节点中去 Jenkins docker slave node配置实践
1、 Jenkins 安装docker插件
安装完成后配置页面会生成Configure Clouds 路径Jenkins - Manage Jenkins - System Configuration - Manage Nodes and Clouds
2、 docker host配置
2.1、 doker安装
sudo apt update
sudo apt upgrade
sudo apt install docker.io2.2、安装自定义docker镜像
可以采用Dockerfile自动构建镜像也可以手动构建此处假定已经构建好镜像并导出linux_x86_64_node.tar导入镜像
sudo docker load linux_x86_64_node.tarsudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
linux_x86_64_node latest f2cded8e78d6 30 minutes ago 3.19GB2.3、启用docker Remote API
本地环境下docker客户端(各种docker命令)默认通过unix域socket与docker daemon通信但我们的场景需要跨主机访问即jenkins服务需要访问docker host因此需要通过配置让docker daemon把服务暴露在tcp的2375端口上这样就可以在网络上操作docker了。修改/lib/systemd/system/docker.service添加tcp支持 修改完毕后执行如下命令使其生效
systemctl daemon-reload
systemctl restart docker.service3、jenkins docker cloud agent配置
路径Jenkins Manage Jenkins System Configuration Manage Nodes and Clouds Configure Clouds
3.1、 配置docker cloud 3.2、配置docker agent 4、 jenkins查看docker容器和镜像
路径Jenkins Manage Jenkins Uncategorized Docker 此处会列出远程docker host上所有运行的容器和安装的镜像如下 值得注意的是jenkins通过Remote API启动docker容器时会进行SSH端口映射将SSH端口22进行映射如上图所示将docker agent启动的docker容器的22端口映射为docker host宿主机的端口58255,这样jenkins才能通过ssh访问docker agent, workspace也是建立在docker agent中。 pipeline中使用docker agent
1、 声明式
pipeline {agent { label master }stages {stage(Hello) {agent { label lava_x86_64_node_accelerate }steps {sh echo Hello World}}}
}2、 脚本式
pipeline {agent { label master }stages {stage(Hello) {steps {script {node (lava_x86_64_node_accelerate) {sh echo Hello World}}}}}
}值得注意的是上面的“lava_x86_64_node_accelerate节点就是上文Jenkins docker slave node配置实践 - 3.2、配置docker agent中的labels字段。 补充
整个pipeline流程如下 gitlabjenkins CI实践