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

[经验分享] 安装Jenkins并构建Docker镜像

[复制链接]

尚未签到

发表于 2018-9-16 08:55:34 | 显示全部楼层 |阅读模式
  Jenkins是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时Jenkins能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。并且Jenkins提供了大量的插件,能够完成各种任务。
  今天我需要使用Jenkins构建一个Docker镜像,然后自动push到docker registry中。到了docker registry中,后面测试人员就可以把镜像发布到测试环境,测试如果没有问题就可以发布到线上环境。
  下面先介绍Jenkins构建docker镜像,在使用Jenkins构建Docker镜像之前,最好先看一下Docker:使用Dockerfile构建Nginx镜像 http://www.ywnds.com/?p=7611
  安装Jenkins
  添加Jenkins的源(repository)
  sudo wget -O /etc/yum.repos.d/jenkins.repo http://jenkins-ci.org/redhat/jenkins.repo
  sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
  安装JDK
  yum install java-1.8.0-openjdk -y 或者tar包安装都一样
  java version "1.8.0_171"
  Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
  Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
  yum install jenkins -y
  rpm -qi jenkins | grep Version
  Version     : 2.132
  启动Jenkins
  service jenkins start  (start,stop,restart)
  到此,Jenkins就安装完成了,然后就可以启动Jenkins。
  Jenkins默认监控端口8080,查看Jenkins进程。
DSC0000.jpg

  Jenkins文件说明
  /usr/lib/jenkins/:jenkins安装目录,WAR包会放在这里。
  ll /usr/lib/jenkins/
  total 66980
  -rw-r--r-- 1 root root 68586722 Dec 26 00:56 jenkins.war
  ll /usr/lib/jenkins/
  total 66980
  -rw-r--r-- 1 root root 68586722 Dec 26 00:56 jenkins.war
  /etc/sysconfig/jenkins:jenkins配置文件,其”端口”,”JENKINS_HOME”等都可以在这里配置。
  grep -v "^#" /etc/sysconfig/jenkins | grep -v "^$"
  JENKINS_HOME="/var/lib/jenkins"
  JENKINS_JAVA_CMD=""
  JENKINS_USER="jenkins"
  JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
  JENKINS_PORT="8080"
  JENKINS_LISTEN_ADDRESS=""
  JENKINS_HTTPS_PORT=""
  JENKINS_HTTPS_KEYSTORE=""
  JENKINS_HTTPS_KEYSTORE_PASSWORD=""
  JENKINS_HTTPS_LISTEN_ADDRESS=""
  JENKINS_DEBUG_LEVEL="5"
  JENKINS_ENABLE_ACCESS_LOG="no"
  JENKINS_HANDLER_MAX="100"
  JENKINS_HANDLER_IDLE="20"
  JENKINS_ARGS=""
  grep -v "^#" /etc/sysconfig/jenkins | grep -v "^$"
  JENKINS_HOME="/var/lib/jenkins"
  JENKINS_JAVA_CMD=""
  JENKINS_USER="jenkins"
  JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
  JENKINS_PORT="8080"
  JENKINS_LISTEN_ADDRESS=""
  JENKINS_HTTPS_PORT=""
  JENKINS_HTTPS_KEYSTORE=""
  JENKINS_HTTPS_KEYSTORE_PASSWORD=""
  JENKINS_HTTPS_LISTEN_ADDRESS=""
  JENKINS_DEBUG_LEVEL="5"
  JENKINS_ENABLE_ACCESS_LOG="no"
  JENKINS_HANDLER_MAX="100"
  JENKINS_HANDLER_IDLE="20"
  JENKINS_ARGS=""
  /var/lib/jenkins/:默认的JENKINS_HOME。
  ll /var/lib/jenkins/
  total 32
  -rw-r--r-- 1 jenkins jenkins 1575 Dec 27 20:09 config.xml
  -rw-r--r-- 1 jenkins jenkins  159 Dec 27 20:09 hudson.model.UpdateCenter.xml

  -rw------- 1 jenkins jenkins 1712 Dec 27 20:09>  -rw-r--r-- 1 jenkins jenkins    4 Dec 27 20:09 jenkins.install.UpgradeWizard.state
  drwxr-xr-x 2 jenkins jenkins    6 Dec 27 20:08 jobs
  drwxr-xr-x 3 jenkins jenkins   18 Dec 27 20:09 logs
  -rw-r--r-- 1 jenkins jenkins  907 Dec 27 20:09 nodeMonitors.xml
  drwxr-xr-x 2 jenkins jenkins    6 Dec 27 20:09 nodes
  drwxr-xr-x 2 jenkins jenkins    6 Dec 27 20:08 plugins
  -rw-r--r-- 1 jenkins jenkins  129 Dec 27 20:08 queue.xml.bak
  -rw-r--r-- 1 jenkins jenkins   64 Dec 27 20:08 secret.key
  -rw-r--r-- 1 jenkins jenkins    0 Dec 27 20:08 secret.key.not-so-secret
  drwx------ 4 jenkins jenkins 4096 Dec 27 20:09 secrets
  drwxr-xr-x 2 jenkins jenkins   97 Dec 27 20:09 updates
  drwxr-xr-x 2 jenkins jenkins   23 Dec 27 20:09 userContent
  drwxr-xr-x 3 jenkins jenkins   18 Dec 27 20:09 users
  ll /var/lib/jenkins/
  total 32
  -rw-r--r-- 1 jenkins jenkins 1575 Dec 27 20:09 config.xml
  -rw-r--r-- 1 jenkins jenkins  159 Dec 27 20:09 hudson.model.UpdateCenter.xml

  -rw------- 1 jenkins jenkins 1712 Dec 27 20:09>  -rw-r--r-- 1 jenkins jenkins    4 Dec 27 20:09 jenkins.install.UpgradeWizard.state
  drwxr-xr-x 2 jenkins jenkins    6 Dec 27 20:08 jobs
  drwxr-xr-x 3 jenkins jenkins   18 Dec 27 20:09 logs
  -rw-r--r-- 1 jenkins jenkins  907 Dec 27 20:09 nodeMonitors.xml
  drwxr-xr-x 2 jenkins jenkins    6 Dec 27 20:09 nodes
  drwxr-xr-x 2 jenkins jenkins    6 Dec 27 20:08 plugins
  -rw-r--r-- 1 jenkins jenkins  129 Dec 27 20:08 queue.xml.bak
  -rw-r--r-- 1 jenkins jenkins   64 Dec 27 20:08 secret.key
  -rw-r--r-- 1 jenkins jenkins    0 Dec 27 20:08 secret.key.not-so-secret
  drwx------ 4 jenkins jenkins 4096 Dec 27 20:09 secrets
  drwxr-xr-x 2 jenkins jenkins   97 Dec 27 20:09 updates
  drwxr-xr-x 2 jenkins jenkins   23 Dec 27 20:09 userContent
  drwxr-xr-x 3 jenkins jenkins   18 Dec 27 20:09 users
  /var/lib/jenkins/jobs/${project_name}/workspace/:Jenkins项目的工作空间,存储从Git或SVN下载的内容,${project_name}就是其项目名称。
  /var/log/jenkins/jenkins.log     Jenkins日志文件。
  配置Jenkins构建镜像
  如果没有特别配置端口,使用http://:8080/登录Jenkins,并进行相关配置(插件安装、权限配置、View/Job创建等等)。
  第一次登陆Jenkins时需要解锁,把如下秘钥填写进去即可。
  cat /var/lib/jenkins/secrets/initialAdminPassword
  a737ebbbfece4e6991cf70d45a299ed5
DSC0001.jpg

  然后设置一下用户密码,就正式进入到了Jenkins配置界面。
  首先,需要安装一些必要的插件SCM Sync Configuration Plugin ,(gitlab)GitHub plugin ,GIT plugin ,GIT client plugin,在系统管理->插件管理里面安装,安装结束后重启jenkins即可。
  然后创建一个项目为nginx。
DSC0002.jpg

  然后配置一下源码管理,Git地址:https://github.com/dongwenpeng/nginx
  就下面几个文件,主要是dockerfile,然后提供了一些nginx配置文件以及web文件。
  -rw-r--r-- 1 jenkins jenkins    744 Dec 27 20:22 default.conf
  -rw-r--r-- 1 jenkins jenkins    338 Dec 27 20:22 dockerfile
  -rw-r--r-- 1 jenkins jenkins    593 Dec 27 20:22 nginx.conf
  drwxr-xr-x 3 jenkins jenkins     16 Dec 27 20:22 web
  -rw-r--r-- 1 jenkins jenkins 644118 Dec 27 20:22 web.zip
  如下配置,也可以使用你本地的Git仓库:
DSC0003.jpg

  主要就是构建脚本了。
DSC0004.jpg

  脚本内容
  #!/bin/sh
  #
  DATE=date +%m%d%H%M
  DIR="/var/lib/jenkins/jobs/nginx/workspace"
  sudo /bin/docker build -t nginx_$DATE $DIR | tee $DIR/Docker_build_result.log
  RESULT=$(cat $DIR/Docker_build_result.log | tail -n 1)
  if [["$RESULT" != Successfully]];then
  exit -1
  fi
  注意:这里说明几点,第一git没有的就安装 yum -y install git
  /var/lib/jenkins/jobs/nginx/workspace这里的路径少了个workspace需要创建
  chown -R jenkins:jenkins workspace/
  之后要重启Jenkins。
  配置jenkins用户
  此时还不能立即构建,因为jenkins触发脚本并不是root用户,因此需要将jenkins免密码,并将用户加入到docker组。(这里docker 没有也要安装 http://blog.51cto.com/10158955/2125450 )
  cat /etc/sudoers.d/jenkins
  Defaults:jenkins !requiretty
  jenkins ALL=(ALL) NOPASSWD: ALL
  第一行表示仅jenkins用户不需要控制终端,不然在Jenkins脚本中无法使用sudo。
  usermod -G docker jenkins
  (创建docker组   groupadd docker  )
  开始构建镜像
  在jenkins的build记录中可以看到输出,由于jenkins会自动把github上的文件给下载下来放在workspace目录中。因此,触发脚本后,直接开始构建nginx镜像。
  Started by user admin
  Building in workspace /var/lib/jenkins/jobs/nginx/workspace
  git rev-parse --is-inside-work-tree # timeout=10
  Fetching changes from the remote Git repository
  git config remote.origin.url https://github.com/dongwenpeng/nginx # timeout=10
  Fetching upstream changes from https://github.com/dongwenpeng/nginx
  git --version # timeout=10
  git fetch --tags --progress https://github.com/dongwenpeng/nginx +refs/heads/:refs/remotes/origin/
  git rev-parse refs/remotes/origin/master^{commit} # timeout=10
  git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
  Checking out Revision c0148c6714be8a64710d87e2ebc3395573dfcb0f (refs/remotes/origin/master)
  git config core.sparsecheckout # timeout=10
  git checkout -f c0148c6714be8a64710d87e2ebc3395573dfcb0f
  git rev-list c0148c6714be8a64710d87e2ebc3395573dfcb0f # timeout=10
  [workspace] $ /bin/sh /tmp/hudson3618361245563383297.sh
  Sending build context to Docker daemon 557.1 kB
  Sending build context to Docker daemon 1.114 MB
  Sending build context to Docker daemon 1.671 MB
  Sending build context to Docker daemon 2.228 MB
  Sending build context to Docker daemon 2.785 MB
  Sending build context to Docker daemon 3.273 MB
  Step 1 : FROM nginx
  latest: Pulling from library/nginx
  Digest: sha256:2a07a07e5bbf62e7b583cbb5257357c7e0ba1a8e9650e8fa76d999a60968530f
  Status: Downloaded newer image for nginx:latest
  ---> 19146d5729dc
  Step 2 : MAINTAINER dkey
  ---> Using cache
  ---> 715cd864289f
  Step 3 : ENV RUN_USER nginx
  ---> Using cache
  ---> 919de987c861
  Step 4 : ENV RUN_GROUP nginx
  ---> Using cache
  ---> 12bb383d0cdc
  Step 5 : ENV DATA_DIR /data/web
  ---> Using cache
  ---> 69561736d70e
  Step 6 : ENV LOG_DIR /data/log/nginx
  ---> Using cache
  ---> c9be367631c7
  Step 7 : RUN mkdir /data/log/nginx -p
  ---> Using cache
  ---> 137c4decd554
  Step 8 : RUN chown nginx.nginx -R /data/log/nginx
  ---> Using cache
  ---> 4262ffbc2a5c
  Step 9 : ADD web /data/web
  ---> ac936a598dc4
  Removing intermediate container 1efe9556276a
  Step 10 : ADD nginx.conf /etc/nginx/nginx.conf
  ---> 2b6f7ab35d9f
  Removing intermediate container 12b1066d8808
  Step 11 : ADD default.conf /etc/nginx/conf.d/default.conf
  ---> 619fc14e58bf
  Removing intermediate container 362067e9bbce
  Step 12 : EXPOSE 80
  ---> Running in ace973e663f0
  ---> 7982205f27dd
  Removing intermediate container ace973e663f0
  Step 13 : ENTRYPOINT nginx -g "daemon off;"
  ---> Running in 892e45827ff4
  ---> 63375850b045
  Removing intermediate container 892e45827ff4
  Successfully built 63375850b045
  Finished: SUCCESS
  构建完成后,可以去Jenkins主机看看镜像是否完成。
  docker images

  REPOSITORY                  TAG                 IMAGE>  nginx_12272051              latest              63375850b045        58 minutes ago      182.7 MB
  nginx                       latest              19146d5729dc        6 days ago          181.6 MB
  可以看到已经构建完成了,下面直接启动此镜像。
  docker run --name nginx -p 80:80 -d nginx_12272051
  docker ps

  CONTAINER>  c6ca642a3574      nginx_12272051     "/bin/sh -c 'nginx -g"   18 seconds ago      Up 17 seconds     0.0.0.0:80->80/tcp, 443/tcp   nginx
  推送到远程仓库
  现在使用Jenkins构建Docker镜像已经没有问题了,下面就可以把Jenkins构建完的镜像直接推送到远程的registry中。关于构建私有docker registry可以看Docker:搭建私有仓库(Registry 2.4)http://www.ywnds.com/?p=7411
  当远程仓库搞定后,其实Jenkins这边做的并不是太多,只需要把构建脚本修改一下,在构建完成后直接推送到远程仓库就OK了。


运维网声明 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-584369-1-1.html 上篇帖子: docker搭建gitlab+Jenkins持续集成环境 下篇帖子: 根据jenkins更新Log检查文件更新并比较两文件内容
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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