Jenkins+docker+git+Gitee 部署SpringBoot项目

开发离不开项目的部署,运维,因此为了以后的开发便利,我最近学习了下服务的自运维,现在总结一下
参考:https://my.oschina.net/yimingkeji/blog/2878371

技术

Jenkins+docker+git+Gitee 部署SpringBoot项目

环境

  • Win10
  • 虚拟机:VMware
  • 系统:centos7

操作流程

1.安装虚拟机,配置centos系统,联通网络

2.配置Java环境

3.下载,安装,配置jenkins

1)Jenkins的介绍
Jenkins是一个广泛用于持续构建的可视化web工具,可用于自动化与构建、测试、交付或部署软件相关的各种任务。
2)看下Jenkins的工作流程

  1. 我们在本地开发项目。记得加上dcoker的依赖和Dockerfile的配置(后面说)。然后通过本地git提交到码云(Github)。
  2. 这时码云上的项目中配置钩子程序(Webhooks)。当我们在本地push的时候触发钩子。
    这个URL的地址要触发Jenkis(后面介绍)
image.png

image.png
  1. Jenkins接收到通知以后,会调用虚拟机上的git。将远程码云仓库的项目pull到服务器上
  2. 接下来的工作中心就在Jenkins上。根据配置(后面详细说),将项目用服务器上mvn打成jar包
  3. 利用docker结合项目的dockerfile,打包成docker镜像,然后启动即可。(具体配置看后面)

3)Jenkins的下载和安装
看参考即可

不同的是我没有安装到tomcat下面,随tomcat启动,而是直接安装linux中,然后设置启动
这可以百度下

4.配置docker

  1. 首先是插件的安装,可以看参考,会遇到无法连接到外网服务器的问题,百度解决即可
  2. 进去后,首先全局配置,-》看参考 配置maven、JDK、Docker、git

这些都需要安装到服务器上,git还需生成私钥,公钥。公钥放到码云远程仓库,私钥放到Jenkins上,使得通过Jenkin利用git将代码拉到服务器上。

  1. 安装docker
  2. Springboot项目
    项目地址:https://gitee.com/yimingkeji/docker-springboot

docker依赖

<!-- Docker maven plugin start -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.13</version>
                <configuration>
                    <imageName>${project.artifactId}</imageName><!--[a-z 0-9] 不然docker:build会报错-->
                    <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
                                                      <!--dockerfile的地址-->
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
            <!-- Docker maven plugin end -->

Dockerfile内容:
FROM hub.c.163.com/dwyane/openjdk:8
VOLUME /tmp
ADD docker-test-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
EXPOSE 8081

dockerfile的jar包的名字要和项目的名字保持一致

<groupId>com.wuhen</groupId>
    <artifactId>docker-test</artifactId>
    <version>0.0.1-SNAPSHOT</version>

然后上传到自己的码云远程仓库

5.使用Jenkins部署项目到docker

看参考
其中
第一次执行shell 添加shell:

#!/bin/bash -il
mvn docker:build
echo "当前docker 镜像:"
docker images | grep docker-test
echo "启动容器----->"
docker run --name dockertest -p 8081:8081 -d docker-test
echo "启动服务成功!"

项目构建成功后再次构建shell有所改变

#!/bin/bash -il
# 先删除之前的容器
echo "remobe old container"
docker ps -a | grep dockertest | awk '{print $1}'| xargs docker rm -f
# 删除之前的镜像
echo "romove old image"
docker rmi docker-test
# 构建镜像
mvn docker:build
# 打印当前镜像
echo "current docker images"
docker images | grep docker-test
# 启动容器
echo "start container"
docker run --name dockertest -p 8081:8081 -d docker-test
# 打印当前容器
echo "current container"
docker ps -a | grep dockertest
echo "star service success!"

这个容器端口映射:项目的启动端口好为8081,映射到外部服务器端口为8081(可以固定。也可以随机),所以在外部浏览器访问IP:8081,即映射到项目上,添加路径即可访问

控制台输出

Started by user unknown or anonymous
Running as SYSTEM
Building in workspace /var/lib/jenkins/workspace/docker-test
 > /usr/bin/git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > /usr/bin/git config remote.origin.url git@gitee.com:zhege/docker-test.git # timeout=10
Fetching upstream changes from git@gitee.com:zhege/docker-test.git
 > /usr/bin/git --version # timeout=10
using GIT_SSH to set credentials gitee
 > /usr/bin/git fetch --tags --progress git@gitee.com:zhege/docker-test.git +refs/heads/*:refs/remotes/origin/*
 > /usr/bin/git rev-parse refs/remotes/origin/master^{commit} # timeout=10
 > /usr/bin/git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Checking out Revision 8b9c5e5cdda5cf060be846f2c53b9662cd8d1c7f (refs/remotes/origin/master)
 > /usr/bin/git config core.sparsecheckout # timeout=10
 > /usr/bin/git checkout -f 8b9c5e5cdda5cf060be846f2c53b9662cd8d1c7f
Commit message: "测试0.8"
 > /usr/bin/git rev-list --no-walk 8b9c5e5cdda5cf060be846f2c53b9662cd8d1c7f # timeout=10
[docker-test] $ /usr/local/maven/apache-maven/bin/mvn -s /usr/local/maven/apache-maven/conf/settings.xml -gs /usr/local/maven/apache-maven/conf/settings.xml clean install -Dmaven.test.skip=true
[INFO] Scanning for projects...
[INFO] 
[INFO] -----------------------< com.wuhen:docker-test >------------------------
[INFO] Building docker-test 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ docker-test ---
[INFO] Deleting /var/lib/jenkins/workspace/docker-test/target
[INFO] 
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ docker-test ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ docker-test ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to /var/lib/jenkins/workspace/docker-test/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ docker-test ---
[INFO] Not copying test resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ docker-test ---
[INFO] Not compiling test sources
[INFO] 
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ docker-test ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-jar-plugin:3.1.2:jar (default-jar) @ docker-test ---
[INFO] Building jar: /var/lib/jenkins/workspace/docker-test/target/docker-test-0.0.1-SNAPSHOT.jar
[INFO] 
[INFO] --- spring-boot-maven-plugin:2.2.1.RELEASE:repackage (repackage) @ docker-test ---
[INFO] Replacing main artifact with repackaged archive
[INFO] 
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ docker-test ---
[INFO] Installing /var/lib/jenkins/workspace/docker-test/target/docker-test-0.0.1-SNAPSHOT.jar to /root/.m2/repository/com/wuhen/docker-test/0.0.1-SNAPSHOT/docker-test-0.0.1-SNAPSHOT.jar
[INFO] Installing /var/lib/jenkins/workspace/docker-test/pom.xml to /root/.m2/repository/com/wuhen/docker-test/0.0.1-SNAPSHOT/docker-test-0.0.1-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.245 s
[INFO] Finished at: 2019-11-19T15:24:43+08:00
[INFO] ------------------------------------------------------------------------
[docker-test] $ /bin/bash -il /tmp/jenkins6420905348235517809.sh
bash: no job control in this shell
remobe old container
8ecc1c0ad528
romove old image
Untagged: docker-test:latest
Deleted: sha256:e21b5d37eec2178a134b2b11ff2c520c9e4195da30514fdf3a9c908c7d1923bc
Deleted: sha256:f6687ce9698053b270d31032bba9953d1df257038b356827161a7ef6b3a0d6fa
Deleted: sha256:1770755bad3191affc457705afe435cd5d21a60fadd543a67b4df65de66a5cf7
Deleted: sha256:0a45f6912e8188a2ef73537590483f7284f12856aab29263bb03f9a41f5d86e8
Deleted: sha256:046c6fab78820fb8d39f3c502a882a71841fdbc23ecb18f39bd712e7e9d556bd
[INFO] Scanning for projects...
[INFO] 
[INFO] -----------------------< com.wuhen:docker-test >------------------------
[INFO] Building docker-test 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- docker-maven-plugin:0.4.13:build (default-cli) @ docker-test ---
[INFO] Copying /var/lib/jenkins/workspace/docker-test/target/docker-test-0.0.1-SNAPSHOT.jar -> /var/lib/jenkins/workspace/docker-test/target/docker/docker-test-0.0.1-SNAPSHOT.jar
[INFO] Copying /var/lib/jenkins/workspace/docker-test/src/main/docker/Dockerfile -> /var/lib/jenkins/workspace/docker-test/target/docker/Dockerfile
[INFO] Building image docker-test
Step 1/5 : FROM hub.c.163.com/dwyane/openjdk:8

 ---> 96cddf5ae9f1
Step 2/5 : VOLUME /tmp

 ---> Running in 486c1231762b
Removing intermediate container 486c1231762b
 ---> 13ba15843faa
Step 3/5 : ADD docker-test-0.0.1-SNAPSHOT.jar app.jar

 ---> 728f47311940
Step 4/5 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

 ---> Running in 5e60e14f90b9
Removing intermediate container 5e60e14f90b9
 ---> fb9135e0b8d3
Step 5/5 : EXPOSE 8081

 ---> Running in b37736b77608
Removing intermediate container b37736b77608
 ---> b245fecbacc9
ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null}
Successfully built b245fecbacc9
Successfully tagged docker-test:latest
[INFO] Built docker-test
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.657 s
[INFO] Finished at: 2019-11-19T15:24:50+08:00
[INFO] ------------------------------------------------------------------------
current docker images
docker-test                    latest              b245fecbacc9        Less than a second ago   658MB
start container
6a5195061803f56761fbb4289c6a6035fd3f91afd1057d9c8051cb69c7ef4a75
current container
6a5195061803        docker-test         "java -Djava.securit…"   1 second ago        Up Less than a second      0.0.0.0:8081->8081/tcp              dockertest
star service success!
Finished: SUCCESS

可以结合参考和我的文章选择自己合适的配置路线,与其说是写总结,也是结合自己弟参考文章的补充

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355

推荐阅读更多精彩内容