Springboot + docker + jenkins持续集成实战操作

1 操作步骤

1.1 docker安装

在虚拟机(vitualBox)下执行yum命令:

[root@centos-vagrant ~]# yum install docker


安装完成后,使用下面的命令来启动 docker 服务,并将其设置为开机启动:

[root@centos-vagrant ~]# service docker start


查看镜像:

[root@centos-vagrant ~]# docker images

安装问题:

在执行yum install docker 命令是安装不成功的问题:

清除一下缓存:

[root@centos-vagrant ~]# yum clean all
[root@centos-vagrant ~]# yum makecache


再执行安装命令:

[root@centos-vagrant ~]# yum install docker


1.2 配置springboot

pom.xml配置:


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<
modelVersion>4.0.0modelVersion>
<
groupId>org.zz.springbootgroupId>
<
artifactId>springbootdemoartifactId>
<
version>latestversion>
<
parent>
<
groupId>org.springframework.bootgroupId>
<
artifactId>spring-boot-starter-parentartifactId>
<
version>1.5.2.RELEASEversion>
parent>
<
dependencies>
<
dependency>
<
groupId>org.springframework.bootgroupId>
<
artifactId>spring-boot-starter-webartifactId>
dependency>
<
dependency>
<
groupId>org.springframework.bootgroupId>
<
artifactId>spring-boot-starter-testartifactId>
<
scope>testscope>
dependency>
dependencies>
<properties>
<
project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<
docker.image.prefix>demodocker.image.prefix>
<
spring.boot.version>1.3.3.RELEASEspring.boot.version>
properties>
<
build>
<
plugins>
<
plugin>
<
groupId>org.springframework.bootgroupId>
<
artifactId>spring-boot-maven-pluginartifactId>
plugin>
<
plugin>
<
groupId>com.spotifygroupId>
<
artifactId>docker-maven-pluginartifactId>
<
version>0.4.3version>
<
configuration>
<
imageName>${docker.image.prefix}/${project.artifactId}imageName>
<
dockerDirectory>src/main/dockerdockerDirectory>
<
resources>
<
resource>
<
targetPath>/targetPath>
<
directory>${project.build.directory}directory>
<
include>${project.build.finalName}.jarinclude>
resource>
resources>
configuration>
plugin>
plugins>
build>
project>

详见附录:pom.xml文件

创建dockerfile文件:

项目中创建“src/main/docker/Dockerfile”文件,如下:

配置dockerflie(用于生成镜像):

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD demo-1.0.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]


解释下这个配置文件:

· VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。改步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录

· 项目的 jar 文件作为 “app.jar” 添加到容器的

· ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/urandom” 作为 Entropy Source

见附录Dockerfile文件

编写 Spring Boot 应用:

package com.test.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 主应用入口
*
@author waylau.com
*
@date 2016年3月19日
*/
@SpringBootApplication
@RestController
public class Application {
@RequestMapping("/")
public String home() {
return "Hello Docker World."
+ "
Welcome to waylau.com"
;
}
public static void main(String[] args) {
SpringApplication.
run(Application.class, args);
}
}

代码类见附件Application.java

1.3 构建 Docker Image

1.3.1 虚拟机(vitualBox)挂载本地项目路径

启动虚机:

然后登录虚机:

[root@centos-vagrant ~]# ssh -p 2222 root@127.0.0.1

修改seetting文件:

[root@centos-vagrant ~]# cd /opt/apache-maven-3.5.0/conf/

修改地址: /media/sf_repository

1.3.2 生成镜像(mvn package docker:build)

重启虚机

输入命令:

[root@centos-vagrant ~]# df

进入到:

cd /media/sf_wlw_citic/workspace_task_scheduler_lose目录(也就是项目的目录):

执行命令:

[root@centos-vagrant ~]# mvn package docker:build


需要注意:

在执行mvn package docker:build,先输入命令docker images如果提示如下图,请先启动docker,启动命令:systemctl start docker,再执行mvn package docker:build命令,不然构建镜像会失败。

执行后构建成为 docker镜像

输入命令:

[root@centos-vagrant ~]# docker images

可以看到demo/demo就是生成的镜像

1.3.3 启动项目

运行 Docker Image(启动项目):

输入命令

[root@centos-vagrant ~]# docker run -p 8080:8080 -t demo/demo

这里指定端口为8080

运行成功:

浏览器访问:

输入http://localhost:8080/

发现访问不了,原因没有做端口映射,如下:

在虚机(vitualBox)里配置:

这个时候再输入http://localhost:8080/就可以访问了


1.4 杀掉已启动的镜像

先查看进程,杀掉已启动的进程:

[root@centos-vagrant ~]# docker ps

然后输入命令:

[root@centos-vagrant ~]# docker kill -s KILL bfbf6bcd0eb6

删除镜像:

先查询记录:

[root@centos-vagrant ~]# docker ps –a

可以看到有4个线程在启动,我们杀掉他们:

[root@centos-vagrant ~]# docker rm b427a2d85040 f91a2e1d0f86 0297d2ecbff3 bc5ca853a648


再查看:

线程都清掉了:


此刻执行:

[root@centos-vagrant ~]# docker images


1.5 Docker清除所有多余的docker镜像释放空间

执行:

[root@iz2ze215l4uqqv8jiei1aaz ~]# docker system prune -a –f

再执行,多余的都清除了

[root@iz2ze215l4uqqv8jiei1aaz ~]# docker images


1.6 本地虚机doc打包成tar上传至134服务器

打包镜像:

[root@centos-vagrant ~]# docker save -o /home/ hub.dashboardengine.tar hub.dashboardengine/hub.dashboardengine:latest

本地 打包成tar文件,通过ftp传输到134 服务器上

输入下列命令恢复镜像,自动加载到docker容器:

[root@centos-vagrant ~]# docker load -i /home/ hub.dashboardengine.tar


查看镜像:

[root@centos-vagrant ~]# docker images

启动项目:

[root@centos-vagrant ~]# docker run -d -p 9090:9090 -t hub.dashboardengine/hub.dashboardengine

注意:-d表示后台启动

输入地址访问:

http://10.247.32.134:9090/iot/getMsgCount

1.7 docker推送镜像至私服

把一个镜像push到私有仓库中

查看一下镜像

[root@centos-vagrant ~]# docker images

以demo/demo这个镜像为例。

接下来修改一下该镜像的tag,输入下面命令:

[root@centos-vagrant ~]# docker tag demo/demo registry.user.pcloud.citic.com/zxyw/cloud/demo/demo:tag

发现tag被修改了,接下来执行推送命令:

[root@centos-vagrant ~]# docker push registry.user.pcloud.citic.com/zxyw/cloud/demo/demo:tag

Get https://registry.user.pcloud.citic.com/v1/_ping: dial tcp 10.247.20.205:443: i/o timeout

这时会发现推送超时了,此时需要修改docker的配置文件,解决办法如下:

[root@centos-vagrant ~]# touch /etc/docker/daemon.json

[root@centos-vagrant ~]# vi /etc/docker/daemon.json

加入本地registry的地址, 如:

{ "insecure-registries":["registry.user.pcloud.citic.com"] }

需要注意:

registry.user.pcloud.citic.com为私服地址,这里我直接加在”live-restore”:true的后面,然后加了一个逗号隔开。

添加主机host:

vi /etc/resolv.conf

nameserver 10.247.64.29

nameserver 10.247.64.28

vi /etc/hosts

10.247.20.205 registry.user.pcloud.citic.com

然后重启docker服务:

[root@centos-vagrant ~]# systemctl restart docker.service

执行推送命令:

[root@centos-vagrant ~]# docker push registry.user.pcloud.citic.com/zxyw/cloud/demo/demo:tag


3f5ead2a3e3b: Pushed

decb4e431a22: Pushed

aea4c1b2c226: Pushed

dcf909146faa: Pushed

23b9c7b43573: Pushed

tag: digest: sha256:a62b8f4cf6f446b81c5cb398499ef11e34bfe491a417e2959e2d05086768005e size: 1375

推送成功,

1.7.1 下载私服镜像

下载私服镜像:

[root@centos-vagrant ~]# docker pull registry.user.pcloud.citic.com/zxyw/cloud/demo/demo:tag

下载成功,查看一下镜像

[root@centos-vagrant ~]# docker images

启动:

[root@centos-vagrant ~]# docker run -p 8081:8081 -t registry.user.pcloud.citic.com/zxyw/cloud/demo/demo:tag


1.8 docker-compose插件安装

输入下面命令安装插件:

[root@centos-vagrant ~]# curl -L https://github.com/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose


安装完成后,执行运行权限:

[root@centos-vagrant ~]# sudo chmod +x /usr/local/bin/docker-compose


查看版本:

[root@centos-vagrant ~]# docker-compose --version

可以看到为当前为1.12.0版本,则安装成功。

1.8.1 创建test.yml文件

把test.yml文件放入/home/vagrant/composetest目录下:

复制下面内容到test.yml文件里:

srvmgt-app:

image: demo/demo

hostname: service

volumes:

- /tmp

ports:

- 9090:9090

environment:

jdbc.driverClassName: com.mysql.jdbc.Driver

jdbc.username: mysql

jdbc.password: mysql123

jdbc.url: jdbc:jdbc:mysql://10.247.33.42:3306/iot

restart: always


1.8.2 启动docker-compose

[root@centos-vagrant ~]# docker-compose up

需要注意:

启动docker-compose,需要在yml文件存在的当前目录下执行,例如:我yml文件在/home/vagrant/composetest这个目录

ps查看:

[root@centos-vagrant ~]# docker ps:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

f66814e2b624 demo/demo "sh -c 'java $JAVA_OP" 15 minutes ago Up 15 minutes 0.0.0.0:9090->9090/tcp composetest_srvmgt-app_1

浏览器访问:

http://localhost:9090/test/

1.9 jenkins持续集成

1.9.1 jenkins安装

本文直接使用war包安装

下载地址:https://jenkins-ci.org/content/thank-you-downloading-windows-installer

war包有两种安装方法

方法一

下载jenkins.war, 拷贝到D:JavaTooljenkins()下,然后运行java -jar jenkins.war. (注意需要先安装JDK,然后设置JAVA_HOME环境变量且将%JAVA_HOME%bin加入到PATH环境变量中)
运行如下:

访问http://localhost:8080 , jenkins的主界面如下:

方法二
把Jenkins 1.409.1版解压,把得到的war包直接扔到tomcat下,启动tomcat,Jenkins就安装完毕,访问http://localhost:8080/jenkins

这里采用方法二方式,直接放tomcat里启动。

1.9.2 构建maven项目

构建maven项目前,把相关的插件安装上,如:

增加需要用到的插件:Deploy to container Plugin、GIT plugin、Maven Integration plugin、Publish Over SSH、SSH Slaves plugin、Subversion Plug-in,请用以下示范方法添加安装需要的插件

调整相关系统设置项,请自行找出列出的设置项并填写相关内容

jdk配置:



配置好点击save保存。

1.9.3 配置远程服务器


配置远程服务器,上传镜像

1.9.4 新建maven项目集成至远程服务器




配置git路径,从git的master下直接检出:


执行本地脚本:


deploy.sh文件在项目的根目录下,deploy.sh文件见附件2,如下图:


配置远程上传脚本命令:



hub.admin.engine.yml文件与Dockerfile文件见附件2,目录都在项目的根目录:


保存后:


点击项目:


点击立即构建,持续集成就开始了


这里构建成功:

注意

构建的项目地址在:

[root@centos-vagrant ~]# cd ~/.jenkins/workspace/

或者输入:

[root@centos-vagrant ~]# cd /root/.jenkins/workspace

可以看到构建的所有项目,如下:


登录服务docker imags查看镜像命令可以看到刚刚上传的镜像:


docker ps命令可以看到项目也启动了:



浏览器访问:

http://10.247.32.134:8093/iot/channelManager/getChannelPageList



1.9.5 Jenkins部署docker报错问题

错误如下:

error pulling image configuration: Get http://registry.oss-cn-beijing-zx-d01-a.pcloud.citic.com/docker/registry/v2/blobs/sha256/46/46df8683ac8fea45852a4b218a1c611b08fb1195bafa790fe9e2eec8b2867662/data?Expires=1499156631&OSSAccessKeyId=vIvJI9Xwy0M87Qb8&Signature=qaQOMawAE1a7jbQ2P9N2ahIyDVw%3D: dial tcp: lookup registry.oss-cn-beijing-zx-d01-a.pcloud.citic.com on 100.100.2.136:53: no such host

找不到主机映射问题:no such host

解决办法:

vi /etc/resolv.conf

添加相关的ip地址


1.9.6 Jenkins配置部署发送邮件通知

步骤1:


步骤2:Jenkins Location下:


步骤3:Extended E-mail Notification下:

步骤4:

步骤5:jenkins点击部署的项目,如下:


点击配置:

选择:下拉选择:

在Project Recipient List里加入邮箱即可,多个用逗号隔开,如1@126.com,2@126.com



步骤6:最后点开:


选择:



保存就可以了。

1.9.7 虚拟机(virtualBox)登录jenkins

先安装vagrant:

进入到varant 的目录:

C:Usersuisftechvagrant

启动:

vagrant up

登录:

ssh -p 2222 root@127.0.0.1

默认密码:vagrant

修改C:UsersuisftechvagrantVagrantfile 文件:

config.ssh.username = "vagrant"
config.ssh.password = "vagrant"

vb.name= "centos.base"

登录成功后:

启动tomcat并且启动jenkins:




注意:将jenkins.war包放到tomcat的webapps下:


启动完需在virtualBox配置端口映射:



这里做了端口映射才能正常访问,登录jenkins:

http://127.0.0.1:8080/jenkins


如此登录成功

1.10 Jenkins持续集成至阿里云服务

1.10.1 新建项目




配置好git路径:



执行脚本:



注意:

dashboardengine.sh脚本放在项目的根目录,dashboardengine.yml也是在同目录下,如下图:



脚本详细见附录3

1.10.2 集成至阿里云注意问题

集成之前需先在阿里云服务里建立appname,如:

appname="hub-dashboardengine-app"

需要先将hub-dashboardengine-app添加阿里云服务后端,再做集成。

1.11 Linux定时任务

1.11.1 Linux定时清理过时的docker镜像

1. 键入 crontab -e 编辑crontab服务文件,如下:

30 23 * * * /bin/sh /home/user/scheduler/cleardockerimg.sh //每晚的11:30


注意:没有安装crontab 键入yum install crontabs安装。

2. 查看该用户下的crontab服务是否创建成功, 用 crontab -l 命令

3. 启动crontab服务

一般启动服务用 /sbin/service crond start 若是根用户的cron服务可以用 sudo service crond start, 这里还是要注意 下 不同版本Linux系统启动的服务的命令也不同 ,像我的虚拟机里只需用 sudo service cron restart 即可,若是在根用下直接键入service cron start就能启动服务

这里本地启动是: /bin/systemctl start crond.service

这里本地停止是: /bin/systemctl stop crond.service

4. 查看服务是否已经运行用 ps -ax | grep cron

5. 删除任务调度工作

crontab -r //删除所有任务调度工作

6. 删除docker镜像shell脚本:

#!/bin/sh

docker rmi $(docker images | grep dev-)

展开阅读全文

页面更新:2024-03-11

标签:阿里   容器   脚本   实战   插件   步骤   命令   操作   地址   文件   目录   项目

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top