您的位置:首页 > 运维架构 > Docker

DepOps方案Docker+Jenkins+GitHub实践

2017-07-12 11:19 567 查看
要实现—“DepOps方案:Docker+Jenkins+GitHub实践”必须实现三个步骤:(1)构建自己的Docker镜像容器 (2)Jenkins CI持续集成工具管理 (3)Github仓库代码管理。Docker可以根据任一一个镜像的基础上来构建自己的镜像,也就是Docker允许继承并自我定义和发展自己的镜像。使用镜像有很多好处,最直接的就是可以省却复杂环境的再次构建。

Dockerfile文件配置

maven下载地址:http://maven.apache.org/download.cgi

jenkins下载地址:http://updates.jenkins-ci.org/download/war/

FROM boonyadocker/tomcat-allow-remote:latest
MAINTAINER boonya <boonya@sina.com>

# ************now add java and tomcat support in the container ******
ADD apache-maven-3.3.9-bin.tar.gz /usr/local/
ADD jenkins.war /usr/local/apache-tomcat-8.5.16/webapps/

# ************configuration of java and tomcat ENV **********

ENV MAVEN_HOME /usr/local/apache-maven-3.3.9

ENV PATH $PATH:$MAVEN_HOME/bin

# ************container listener port **************
EXPOSE 8080
# startup web application services by self
CMD /usr/local/apache-tomcat-8.5.16/bin/catalina.sh run
注:以上是基于我的boonyadocker/tomcat-allow-remote:latest镜像构建一个Jenkins的配置。

Dockerfile镜像构建

构建命令: docker build -t boonyadocker/jenkins .

root@default:/usr/local/docker# docker build -t boonyadocker/jenkins .
Sending build context to Docker daemon 81.23MB
Step 1/8 : FROM boonyadocker/tomcat-allow-remote:latest
---> 6137f64875dd
Step 2/8 : MAINTAINER boonya <boonya@sina.com>
---> Running in de845d9c160d
---> 4b0af4f26dd4
Removing intermediate container de845d9c160d
Step 3/8 : ADD apache-maven-3.3.9-bin.tar.gz /usr/local/
---> 27d8a3eee9c0
Removing intermediate container d35afcbae453
Step 4/8 : ADD jenkins.war /usr/local/apache-tomcat-8.5.16/webapps/
---> 13fe633c62df
Removing intermediate container 5c22fe45e3ec
Step 5/8 : ENV MAVEN_HOME /usr/local/apache-maven-3.3.9
---> Running in 470098cd48c6
---> 8de0d55b34b8
Removing intermediate container 470098cd48c6
Step 6/8 : ENV PATH $PATH:$MAVEN_HOME/bin
---> Running in b8aeda93a0ec
---> 4516bb4c1bd3
Removing intermediate container b8aeda93a0ec
Step 7/8 : EXPOSE 8080
---> Running in 318ccf3dd328
---> ffa7621607f4
Removing intermediate container 318ccf3dd328
Step 8/8 : CMD /usr/local/apache-tomcat-8.5.16/bin/catalina.sh run
---> Running in b685a0a9f8a7
---> 7cd7e633a573
Removing intermediate container b685a0a9f8a7
Successfully built 7cd7e633a573
Successfully tagged boonyadocker/jenkins:latest

Jenkins镜像的运行

首先查看构建的镜像列表:
root@default:/usr/local/docker# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
boonyadocker/jenkins latest 7cd7e633a573 11 minutes ago 654MB
boonyadocker/tomcat-allow-remote latest 6137f64875dd 2 days ago 571MB
boonyadocker/tomcat-web latest 09677d05b579 5 days ago 571MB
apptomcat 1.0 249dc3f5dfb0 6 days ago 334MB
tomcat 8 a2fbbcebd67e 11 days ago 334MB
jenkins latest 0b4d4d677a26 2 weeks ago 681MB
ubuntu 14.04 4a2820e686c4 3 weeks ago 188MB
wurstmeister/kafka latest 12453f4efa7b 6 weeks ago 265MB
root@default:/usr/local/docker#


运行镜像命令:

docker run -t -p 8080:8080 boonyadocker/jenkins:latest
运行完成后,打开f服务访问地址,如:http://192.168.99.100:8080/,如果看到如下界面说明启动成功:



Jenkins 基础安装和设置

用户授权

启动后可以访问Jenkins:



密码可以通过上面提示的方式去获取,如Docker的是在:https://wiki.jenkins.io/display/JENKINS/Logging#Logging-Docker
因为我的Jenkins 输入docker logs containerId并不能看到tomcat启动的日志,所以只好关闭容器重启,重启后Jenkins部署过程中仍然会提示Administrator paasword请注意查看启动日志,及时copy:
12-Jul-2017 03:07:23.100 INFO [Jenkins initialization thread] jenkins.install.SetupWizard.init

*************************************************************
*************************************************************
*************************************************************

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

173c5b840b074186ae63eb98e3bbaebc

This may also be found at: /root/.jenkins/secrets/initialAdminPassword

*************************************************************
*************************************************************
*************************************************************

上面173c5b840b074186ae63eb98e3bbaebc就是我们所需要继续安装的密码,不知道你拿到这个密码是否可用,你可以试下。

插件安装



选择推荐安装的插件就可以了。



创建用户



看到如下界面表示基础的安装已经完成:



下次你再次启动的时候,这些过程都不会再出现了。

创建一个项目Job并构建GitHub源码

全局工具设置



设置插件管理



创建项目



配置项目



Credentials设置



构建触发器

采用SCM从Github上定时拉取代码,一旦有代码更新就进行构建和部署:



构建项目



点击立即构建,首次构建maven回去下载包,所以比较慢,请耐心等待。我们来看第二次构建的控制台日志输出:



至此项目构建环境搭建成功。

构建后自动部署

上面的的Deploy war/ear to container配置问题修正(名字误差问题可以用*表示):


注:这里的Tomcat URL是我的boonyadocker/tomcat-allow-remote:latest 镜像运行地址。

通过Jenkins立即构建,maven输出日志:
Started by user Manlan Peng
Building in workspace /root/.jenkins/workspace/docker-jenkins
Fetching changes from the remote Git repository
Checking out Revision 62825b065e8a496cadff651060f6a1757b4000bd (refs/remotes/origin/master)
Commit message: "Go back to the codes!"
[docker-jenkins] $ /usr/local/apache-maven-3.3.9/bin/mvn -f pom.xml clean install
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building jenkins-docker 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ jenkins-docker ---
[INFO] Deleting /root/.jenkins/workspace/docker-jenkins/target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ jenkins-docker ---

[WARNING] Using platform encoding (ANSI_X3.4-1968 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /root/.jenkins/workspace/docker-jenkins/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ jenkins-docker ---

[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding ANSI_X3.4-1968, i.e. build is platform dependent!
[INFO] Compiling 1 source file to /root/.jenkins/workspace/docker-jenkins/target/classes

[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ jenkins-docker ---
[WARNING] Using platform encoding (ANSI_X3.4-1968 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /root/.jenkins/workspace/docker-jenkins/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ jenkins-docker ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ jenkins-docker ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-war-plugin:2.2:war (default-war) @ jenkins-docker ---

[INFO] Packaging webapp
[INFO] Assembling webapp [jenkins-docker] in [/root/.jenkins/workspace/docker-jenkins/target/jenkins-docker]
[INFO] Processing war project
[INFO] Copying webapp resources [/root/.jenkins/workspace/docker-jenkins/src/main/webapp]
[INFO] Webapp assembled in [70 msecs]
[INFO] Building war: /root/.jenkins/workspace/docker-jenkins/target/jenkins-docker.war
[INFO] WEB-INF/web.xml already added, skipping
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ jenkins-docker ---
[INFO] Installing /root/.jenkins/workspace/docker-jenkins/target/jenkins-docker.war to /root/.m2/repository/com/boonya/jenkins/docker/jenkins-docker/0.0.1-SNAPSHOT/jenkins-docker-0.0.1-SNAPSHOT.war
[INFO] Installing /root/.jenkins/workspace/docker-jenkins/pom.xml to /root/.m2/repository/com/boonya/jenkins/docker/jenkins-docker/0.0.1-SNAPSHOT/jenkins-docker-0.0.1-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.037 s
[INFO] Finished at: 2017-07-17T09:17:09+00:00

[INFO] Final Memory: 14M/35M
[INFO] ------------------------------------------------------------------------
Deploying /root/.jenkins/workspace/docker-jenkins/target/jenkins-docker.war to container Tomcat 7.x Remote
[/root/.jenkins/workspace/docker-jenkins/target/jenkins-docker.war] is not deployed. Doing a fresh deployment.
Deploying [/root/.jenkins/workspace/docker-jenkins/target/jenkins-docker.war]

Finished: SUCCESS
上面的Deploying 表示部署日志输出,通过浏览器访问能看到下图:



说明应用已实现构建和自动部署功能。

Jenkins构建和部署流程示意图



========================说明======================================
Docker容器:

jenkins是持续集成管理工具:可以实现代码构建、发布、自动化测试、代码质量等。
Tomcat用于接收部署程序的war包,独立运行于不同的环境。
源代码管理:
  常用的代码管理工具Git、GitHub、Subversion。
下一篇内容将着重讲解jenkins与Docker通过SSH持续集成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: