设为首页 收藏本站
查看: 1497|回复: 0

[经验分享] jenkins和docker 使用docker作为slave

[复制链接]

尚未签到

发表于 2018-1-7 07:45:18 | 显示全部楼层 |阅读模式
  使用docker作为jenkins slave。
  文章来自:http://www.ciandcd.com
  文中的代码来自可以从github下载: https://github.com/ciandcd
  参考:
  https://www.cloudbees.com/blog/templating-jenkins-build-environments-docker-containers
  需要安装插件:
  CloudBees Docker Custom Build Environment Plugin
  https://wiki.jenkins-ci.org/display/JENKINS/CloudBees+Docker+Custom+Build+Environment+Plugin
  1. docker 和插件CloudBees Docker Custom Build Environment Plugin
  docker是一种非常好的方法来快速生成可重现,隔离的环境。docker相对虚拟机更轻量级,需要更少的资源来运行。
  docker的另一个好处是docker image可以是从hub.docker.com或私有的repo获取的编译好的docker image, 也可以下载文本格式的Dockerfile,然后在生成docker image。
  Dockerfile可以与项目的源代码一个版本控制,从而实现源代码和构建环境docker image同步且可重现。
  插件CloudBees Docker Custom Build Environment Plugin,通过此插件可以直接使用docker image或Dockerfile来生成job的运行环境。
  2. jenkins docker images
  https://hub.docker.com/r/jenkinsci/jnlp-slave/ (docker pull jenkinsci/jnlp-slave)
  https://hub.docker.com/r/jenkinsci/ssh-slave/ (docker pull jenkinsci/ssh-slave)
  https://hub.docker.com/r/jenkinsci/slave/  (docker pull jenkinsci/slave)
  所有jenkins相关的docker https://hub.docker.com/u/jenkinsci/。
  本实例中使用jnlp-slave docker image,但是我的环境没有jenkins slave,job运行在master上,docker也安装在master上。
  如果你job运行在node/slave上,需要node上安装docker。
  确保已经安装docker,且当前用户可以不加sudo来使用docker。
  sudo groupadd docker
  sudo gpasswd -a ${USER} docker
  newgrp docker
  sudo service docker restart
  然后运行以下确保docker安装且设置正确:
  osboxes@osboxes:~$ docker ps

  CONTAINER>  osboxes@osboxes:~$ docker info
  Containers: 1
  Running: 0
  Paused: 0
  Stopped: 1
  Images: 3
  Server Version: 1.11.2
  Storage Driver: aufs
  Root Dir: /var/lib/docker/aufs
  测试下载jenkins slave docker image:
  osboxes@osboxes:~$ docker -H unix:///var/run/docker.sock pull jenkinsci/jnlp-slave
  Using default tag: latest
  latest: Pulling from jenkinsci/jnlp-slave
  7ccc78f8af6d: Already exists
  a3ed95caeb02: Already exists
  29f19d8b362b: Already exists
  a068cb6fd68b: Already exists
  8f8532f99b46: Already exists
  fc6378a07ddb: Already exists
  debdb2a461e8: Already exists
  4a4e85ec23cd: Already exists
  af041ce270a0: Already exists
  82928c989a2b: Already exists
  a05116d5d5b4: Already exists
  Digest: sha256:cfdb32e8fa5ebf965caf8244c337ca5451eb6c45c8f881f1823bd8eb3c61bb62
  Status: Image is up to date for jenkinsci/jnlp-slave:latest
  3. 创建freestyle job使用docker
  1) 使用测试git repo:https://github.com/ciandcd/JavaHelloWorld.git
  2)jenkins job 配置
  使用jenkinsci/jnlp-slave docker image,注意docker host uri的配置,我的docker和jenkins都在同一测试机器上。

  3)job的配置xml如下:https://github.com/ciandcd/jenkins-awesome/blob/master/jenkins_home/jobs/docker_hello/config.xml
  4) 检查job的运行log可以看到jenkins自己下载启动docker image,然后运行后停止docker。
  $ docker -H unix:///var/run/docker.sock inspect jenkinsci/jnlp-slave
  $ docker -H unix:///var/run/docker.sock run --rm --entrypoint /bin/true alpine:3.2

  $ docker -H unix:///var/run/docker.sock run --tty --detach --workdir /home/osboxes/github/jenkins-example/jenkins_home/jobs/docker_hello/workspace --volume /home/osboxes/github/jenkins-example/jenkins_home:/home/osboxes/github/jenkins-example/jenkins_home:rw --volume /tmp:/tmp:rw --net bridge --add-host dockerhost:172.17.0.1 --env BUILD_DISPLAY_NAME=#12 --env BUILD_ID=12 --env BUILD_NUMBER=12 --env BUILD_TAG=jenkins-docker_hello-12 --env BUILD_URL=http://10.130.28.78:8008/job/docker_hello/12/ --env>  Docker container a44510f2cc21a473c26759cfa650dc26b4c0b7799d11eb37ab21d02cf5682276 started to host the build
  $ docker -H unix:///var/run/docker.sock exec --tty a44510f2cc21a473c26759cfa650dc26b4c0b7799d11eb37ab21d02cf5682276 env

[workspace] $ docker -H unix:///var/run/docker.sock exec --tty --user 1000:1000 a44510f2cc21a473c26759cfa650dc26b4c0b7799d11eb37ab21d02cf5682276 env BUILD_DISPLAY_NAME=#12 BUILD_ID=12 BUILD_NUMBER=12 BUILD_TAG=jenkins-docker_hello-12 BUILD_URL=http://10.130.28.78:8008/job/docker_hello/12/ CA_CERTIFICATES_JAVA_VERSION=20140324>  env: /usr/share/maven/bin/mvn: No such file or directory
  Build step 'Invoke top-level Maven targets' marked build as failure
  Stopping Docker container after build completion
  $ docker -H unix:///var/run/docker.sock kill a44510f2cc21a473c26759cfa650dc26b4c0b7799d11eb37ab21d02cf5682276
  a44510f2cc21a473c26759cfa650dc26b4c0b7799d11eb37ab21d02cf5682276
  $ docker rm --force a44510f2cc21a473c26759cfa650dc26b4c0b7799d11eb37ab21d02cf5682276
  a44510f2cc21a473c26759cfa650dc26b4c0b7799d11eb37ab21d02cf5682276
  参考:
  DOCKER_PORT 相关:http://stackoverflow.com/questions/26561963/how-to-detect-a-docker-daemon-port

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-432454-1-1.html 上篇帖子: 基于jenkins的自动化部署实现 下篇帖子: 【Jenkins】linux下Jenkins集成ant进行编译并发送结果
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表