使用Docker Plugin动态生成Jenkins Slave运行流水线

devopscube,Devops魔方为个人公众号,主要用于一些有关Devops,容器,kubernetes,自动化运维,以及敏捷开发相关的分享。同时也会不定期的分享一些个人心得,比如推荐一些个人使用的办公小软件,对一些事件的评论等。欢迎大家关注交流。
在这里插入图片描述

前言

上一篇文章讲过如何使用docker搭建Jenkins环境,并使用其docker的语法去在容器中运行流水线。传统的Jenkins配置中需要配置Jenkins slave。这样就可以有更多的资源去处理流水线的操作。

之前运行jenkins的时候已经暴露的其slave添加的端口50000。用户可以用传统的方式将jenkins slave加入到jenkins master节点。但是既然使用了docker,我们就可以用一种更为灵活的方式去使用jenkins slave的功能,可以动态的根据需求添加jenkins slave到节点之上。

配置

这里我们要用到Jenkins中的一个插件 - Docker plugin

这里我们先安装Docker plugin, 在jenkins界面中点击 “系统管理” -> “插件管理”,点击“可选插件” Tab页, 搜索

在这里插入图片描述

选中后直接安装即可。

我们可以在官网上直接查看其介绍和说明。可以看到该插件是利用docker,来动态生成Jenkins slave节点并通过该检点运行流水线的。

在这里插入图片描述

安装之后我们正式开始我们的配置。需要在运行jenkins agent的机器上配置好docker, 分为以下两种情况。

一、jenkins agent同jenkins master在同一台机器上

二、Jenkins agent所运行的机器同jenkinsmaster 在不同的机器上

对于第一种无须做任何设置,但是第二种情况,需要远程连接docker的daemon socket,那么我们就需要在其docker上做一些额外的配置。 暴露其socket到tcp端口之上

[aiops@4 ~]$ sudo vim /usr/lib/systemd/system/docker.service
### 修改如下:添加Environtment File的路径以及在ExecStart后面加上变量$DOCER_OPTS。
...
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
EnvironmentFile=-/etc/default/docker

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock $DOCKER_OPTS
...

创建配置文件/etc/default/docker,并配置变量$DOCKER_OPTS
[aiops@4 ~]$ sudo touch /etc/default/docker
[aiops@4 ~]$ sudo vim /etc/default/docker
修改为以下内容:
DOCKER_OPTS="-H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock"

重启docker
[aiops@4 ~]$ sudo systemctl daemon-reload
[aiops@4 ~]$ sudo systemctl restart docker

ps命令可以看到docker启动时已经带了我们设置的参数。
[aiops@4 ~]$ ps -ef | grep docker
root      5913     1  0 10:49 ?        00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock

使用netstat命令查看该端口是否被监听
[aiops@4 ~]$ sudo netstat -anp | grep 2376
tcp6       0      0 :::2376                 :::*                    LISTEN      5913/dockerd

2376端口已经启动,docker可以被远程访问了

配置完成后,我们需要到jenkins中点击 “系统管理” -> “系统配置”, 滑到最下面 “Cloud”

在这里插入图片描述

点击 ”a separate configuration page“ 进入到配置页面。

注意,这个配置内容在以前版本的jenkins中是直接显示的,但是在新版本的jenkins做了单独一个页面去配置。

在这里插入图片描述

我们需要 ”Add a new cloud“, 点击后添加”Docker“ --> “Docker Cloud Detail”

添加相应的Docker Host URI, 本地docker的情况使用unix://var/run/docker.sock

点击测试”test connetion“,显示连接成功,显示docker的版本号。

在这里插入图片描述

这时我们可以添加模板了

点击Docker Agent Template - > Add Docker Template 添加如下基本信息

在这里插入图片描述

红框中添加了最基本的信息,可以运行jenkins最基本的功能。但是实际使用中我们可能会对该模板添加更多的配置。例如挂载volume,添加更多的传入的container参数,大家可以探索其中的配置,其中Container setings中有更多的关于镜像本身的配置。

至此,我们基本环境都已经配置完毕。下面尝试运行一个简单实例。

运行

我们创建一个简单的流水线,修改pipeline脚本如下, label即为我们之前设置的docker template中的lable。流水线sleep 30s是为了让我们看到创建的docker jenkins slave 节点。

pipeline {
   agent {
       label 'jenkins-slave-1'
   }
  
   stages {
      stage('Hello') {
         steps {
            echo 'Hello World'
            sh 'ls -al'
            sleep 30
         }
      }
      
   }
}

如何创建流水线请参见我的上一篇文章,本文只是基于上篇文章的例子进行流水线脚本的修改。

https://blog.csdn.net/weixin_36938307/article/details/105493728

这时我们手动触发构建,如下所示,新的节点被创建出来,运行我们配置的流水线。

在这里插入图片描述

该节点正在通过docker生成一个容器,并注册到master之中,运行docker 命令我们可以看到容器正在运行,而且是我们指定的镜像jenkins/jnlp-slave:latest

[aiops@3 ~]$ docker ps | grep jnlp
d2c2c4054e1b        jenkins/jnlp-slave:latest                         "jenkins-agent /bin/…"   23 seconds ago      Up 22 seconds                                                           musing_margulis

在Jenkins 的节点列表中,我们也能看到新的节点也已经注册进来。

在这里插入图片描述

节点关联的dockers container同我们docker ps命令中看到的相同。

在这里插入图片描述

我们看流水线的日志:
在这里插入图片描述
运行结束后,该容器节点就会被自动销毁,在需要的时候去自动创建。

至此,一个简单的示例完成。

总结

这种基于docker环境的jenkins slave管理方式,更为节省资源,并且可以横向扩展更多的资源去运行我们的流水线任务。我们也可以自己去build更多的工具到节点的环境中,实现更多定制化的需求。 关于docker方式运行jenkins的方法就介绍到这里。以后会为大家分享使用kuberntes环境使用jenkins的最佳实践。

devopscube,Devops魔方为个人公众号,主要用于一些有关Devops,容器,kubernetes,自动化运维,以及敏捷开发相关的分享。同时也会不定期的分享一些个人心得,比如推荐一些个人使用的办公小软件,对一些事件的评论等。欢迎大家关注交流。
在这里插入图片描述

发布了9 篇原创文章 · 获赞 0 · 访问量 429

猜你喜欢

转载自blog.csdn.net/weixin_36938307/article/details/105577769