安装Jenkins并构建Docker镜像

Jenkins是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专一于更为重要的业务逻辑实现上。同时Jenkins能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展现项目构建的趋势和稳定性。而且Jenkins提供了大量的插件,可以完成各类任务。java

今天我须要使用Jenkins构建一个Docker镜像,而后自动push到docker registry中。到了docker registry中,后面测试人员就能够把镜像发布到测试环境,测试若是没有问题就能够发布到线上环境。nginx

下面先介绍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.keygit

安装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)github

yum install jenkins -y
rpm -qi jenkins | grep Version
Version : 2.204 (版本会不断更新)
启动Jenkins
service jenkins start (start,stop,restart)
systemctl start jenkins
报错解决
https://blog.csdn.net/qq_34208844/article/details/87865672web

到此,Jenkins就安装完成了,而后就能够启动Jenkins。
Jenkins默认监控端口8080,查看Jenkins进程。
安装Jenkins并构建Docker镜像docker

修改中文
到系统管理>插件管理中>下载以下插件接口
Localization: Chinese (Simplified)
重启Jenkins便可tcp

Jenkins文件说明
jenkins相关目录释义:
(1)/usr/lib/jenkins/:jenkins安装目录,war包会放在这里。
(2)/etc/sysconfig/jenkins:jenkins配置文件,“端口”,“JENKINS_HOME”等均可以在这里配置。
(3)/var/lib/jenkins/:默认的JENKINS_HOME。
(4)/var/log/jenkins/jenkins.log:jenkins日志文件。ide

/var/lib/jenkins/jobs/${project_name}/workspace/:Jenkins项目的工做空间,存储从Git或SVN下载的内容,${project_name}就是其项目名称。gitlab

配置Jenkins构建镜像
若是没有特别配置端口,使用http://<ip address>:8080/登陆Jenkins,并进行相关配置(插件安装、权限配置、View/Job建立等等)。测试

第一次登录Jenkins时须要解锁,把以下秘钥填写进去便可。
cat /var/lib/jenkins/secrets/initialAdminPassword
a737ebbbfece4e6991cf70d45a299ed5
安装Jenkins并构建Docker镜像

而后设置一下用户密码,就正式进入到了Jenkins配置界面。
安装Jenkins并构建Docker镜像
首先,须要安装一些必要的插件SCM Sync Configuration Plugin ,(gitlab)GitHub plugin ,GIT plugin ,GIT client plugin,在系统管理->插件管理里面安装,安装结束后重启jenkins便可。
安装Jenkins并构建Docker镜像
而后建立一个项目为nginx。
安装Jenkins并构建Docker镜像
而后配置一下源码管理,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仓库:
安装Jenkins并构建Docker镜像

主要就是构建脚本了。
安装Jenkins并构建Docker镜像

脚本内容
#!/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 没有也要安装 https://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 ID CREATED SIZE
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 ID IMAGE COMMAND CREATED STATUS PORTS NAMES
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了。

相关文章
相关标签/搜索