通过代码提交自动触发CI自动构建、编译、打包是任何软件开发组织必不可少的基建,可以最大程度保证产物的一致性,方便跨组跨部门协作,代码MR等。
Docker在流水线中越来越重要,已经是最关键的组成部件之一,由于容器化具有的简单性,灵活性,隔离性和部署方便的特性,使得我们可以按需定制可重复的构建环境,本文就如何使用Docker容器作为Jenkins编译节点在Linux应用开发 CI中进行了实践。
已部署好Jenkins服务,具备CI的基础设施。
有别于windows,macos,ios可能较多会采用虚拟机或物理机方式部署编译节点,linux 采用 docker作为编译节点,容器化方式环境隔离性好,自动容器启动与关闭,环境部署方便,较虚拟机和物理机部署更节省人力时间成本。
工作流程:
ps: Jenkins master 节点只负责调控,具体的构建任务下放到Docker Slave节点中去
安装完成后配置页面会生成Configure Clouds
路径:Jenkins - Manage Jenkins - System Configuration - Manage Nodes and Clouds
sudo apt update
sudo apt upgrade
sudo apt install docker.io
sudo docker load < linux_x86_64_node.tar
sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
linux_x86_64_node latest f2cded8e78d6 30 minutes ago 3.19GB
systemctl daemon-reload
systemctl restart docker.service
路径:Jenkins > Manage Jenkins > System Configuration > Manage Nodes and Clouds > Configure Clouds
路径: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 {
agent { label 'master' }
stages {
stage('Hello') {
agent { label 'lava_x86_64_node_accelerate' }
steps {
sh 'echo Hello World'
}
}
}
}
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流程如下:
gitlab+jenkins CI实践