前面的文章我向大家展示了docker云里通过SSH连接的节点容器是如何创建的,并展示了配置方法,其实还有另外两种方式。一种是附加容器,一种是通过JNLP链接。这一篇将讲一讲这两个是怎么使用的
附加容器的方式
根据连接要求,容器里面必须有java,并且启动命令要简单,我们还是用上次做的容器镜像,这个模板配置里面Docker Command直接设置为空。
Connect method选择Attach Docker Container,EntryPoint Cmd使用默认值,也是${JAVA_EXE}
${JVM_ARGS}
-jar
${FS_DIR}/${JAR_NAME}
-noReconnect
-noKeepAlive
-agentLog
${FS_DIR}/agent.log
这个换行是Jenkins的格式,其他配置根据自身需要填写,我这里除了前面的labels、name和image,其他都没有填。
启动任务可以看到运行正常,说明此类容器启动方式不需要额外给镜像增加什么东西在里面,只需要拿到就就可以启动,毕竟容器宿主机对其有完全控制的权力。
JNLP方式
这是一种K8s的容器常用的挂载方式,JNLP都是挂载点EntryPoint 的业务。
先在容器设置container setting中配置Command为/bin/bash。
当我们没有这个Jenkins的agent.jar在镜像中的时候,可以参考给出的命令:
sh
-c
wget ${JENKINS_URL}jnlpJars/agent.jar && java -jar agent.jar -jnlpUrl ${JENKINS_URL}computer/${NODE_NAME}/slave-agent.jnlp -secret ${JNLP_SECRET}
上面的几个环境变量都会在创建容器的时候传递过去,所以不用担心找不到变量。
如果将agent.jar放到指定位置了,那么这个可以配置运行后半段
java -jar agent.jar -jnlpUrl ${JENKINS_URL}computer/${NODE_NAME}/slave-agent.jnlp -secret ${JNLP_SECRET}
受机器性能的影响,这个机器从创建到执行成功任务花费的时间很长
一开始我还以为配错了,搞了半天,其实只是因为性能太差。所以如果一直在等待的话,那么就自己等一下,不用太着急。
注意事项
结合前面文章中建立docker云的SSH连接方式,三种方式优劣各有,SSH的可以远程登录,但配置的时候要额外的服务;附加的方式对容器要求很低,一般都能挂上;JNLP的也需要额外的命令,而且对机器性能要求比前两者高一些。
另外还总结了使用的一些 经验,希望对大家有所帮助
实例数配置
性能差的机器一定要在Instance Capacity填一个比较小的数字,不然整个机器都会卡住的,不要问我为什么知道。
容器里的hosts问题
容器里的/etc/hosts文件会在镜像生产的时候刷新,并不是我们制作的时候的那个,额外的host需要在Extra Hosts进行配置,格式是类似hostname:IP换行hostname:IP