centos 7 Tomcat+ jenkins +mvn+gitee+docker完整教程


  教程讲述的是在centos7系统环境下,把mvn项目自动化部署到docker容器中,实现提交代码之后自动部署功能,代码管理使用码云(gitee)。安装Tomcat、jenkins、mvn环境请移步https://www.jianshu.com/p/686e534a6fec,docker安装配置请移步https://www.jianshu.com/p/9bd3ed0b336b
简要流程:

一共分为六个步骤:
  1. idea新建mvn项目,编写测试接口
  2. 安装gitee插件
  3. jenkins配置gitee
  4. jenkins新建mvn项目并配置
  5. 测试触发构建功能
  6. 编写Dockerfile,shell脚本,构建镜像,创建运行容器


一、idea新建mvn项目,编写测试接口

在idea中新建mvn项目,提交到gitee上,此步骤省略。

二、安装gitee插件

选择插件

安装插件

如果在线安装失败,可下载插件文件,选择在插件这个地方选择高级,从本地安装插件。
下载地址 https://gitee.com/oschina/Gitee-Jenkins-Plugin/releases
安装完成插件之后重启jenkins服务

三、jenkins配置gitee

配置gitee
  1. 链接名:可按自己想法填写

  2. Gitee 域名 URL: https://gitee.com,或者按gitee官方提示 (码云私有化客户输入部署的域名)

  3. 证书令牌:

    3.1 点击新建
    3.2 访问蓝色背景处的链接,在gitee上获取私人令牌

    3.4 点击提交,系统会生成一串字符,复制过来填进去就OK了,ID和描述可按自己需求填写,没有什么限制条件

  4. 点击测试链接,完美的配置成功
  5. 保存返回

四、jenkins新建mvn项目并配置

新建mvn项目

1.源码配置


image.png

参数说明

    1. Repository URL:gitee项目地址
    2. Credentials:上一步创建的凭据
    3. Name:origin
    4. Refspec:+refs/heads/*:refs/remotes/origin/* +refs/pull/*/MERGE:refs/pull/*/MERGE
    5. Branch Specifier (blank for 'any'):
          1. 对于单仓库工作流输入: origin/${giteeSourceBranch}
          2. 对于 PR 工作流输入: pull/${giteePullRequestIid}/MERGE

2.构建触发器配置,需要在项目位置webhooks,前面提示的链接和点击生成webhooks密码的结果填入gitee项目的webhooks中,如下图所示
webhooks配置

3.构建环境
构建环境

4.准备构建
准备构建

5.构建设置和构建后操作
image.png

6.保存

五、测试触发构建功能

1.随意修改一个文件,提交代码到gitee,然后观察jenkins
立即构建

控制台输出

2.自动构建已经完成,接下来编写shell,使其运行在docker中,在 PostSteps这一步中

六、编写shell脚本,把jar包打包成镜像

1.在服务器的jenkins工作目录下找到我们新建的项目的目录,进入项目目录,新建文件夹

mkdir  work
工作目录

新建工作目录完成之后,新建Dockerfile文件,

vim  Dockerfile

Dockerfile代码

FROM  java:8

VOLUME /usr/local/jenkins_home/workspace/jenkinsdemo/work

ADD   jenkinsdemo-1.0.0.jar  jenkinsdemo.jar

RUN bash -c 'touch /jenkinsdemo.jar'

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/jenkinsdemo.jar"]

2.在Jenkins的项目配置界面的post steps步骤执行shell脚本,shell脚本代码根据https://blog.csdn.net/wangshouhan/article/details/80332951改动得到,如下

 #!/bin/bash
#操作/项目路径(Dockerfile存放的路劲)
BASE_PATH=/usr/local/jenkins_home/workspace/jenkinsdemo/work
#jenkins工作空间
SOURCE_PATH=/usr/local/jenkins_home/workspace
#docker 镜像/容器名字或者jar名字 这里都命名为这个
SERVER_NAME=jenkinsdemo
JAR_NAME=jenkinsdemo-1.0.0
#获取容器id
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
#获取镜像id
IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')
 
DATE=`date +%Y%m%d%H%M`
 
 # 备份
function backup(){
    if [ -f "$BASE_PATH/$SERVER_NAME.jar" ]; then
        echo "$SERVER_NAME.jar 备份..."
            cp $BASE_PATH/$JAR_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jar
        echo "备份 $JAR_NAME.jar 完成"
    else
        echo "$BASE_PATH/$JAR_NAME.jar不存在,跳过备份"
    fi
}


# 最新构建代码 移动到项目环境
function transfer(){
    echo "最新构建代码 $SOURCE_PATH/$SERVER_NAME/target/$JAR_NAME.jar 迁移至 $BASE_PATH"
        cp $SOURCE_PATH/$SERVER_NAME/target/$JAR_NAME.jar  $BASE_PATH/
    echo "迁移完成"
}
 
# 修改访问权限
function changemod(){
    echo "修改 $BASE_PATH/$JAR_NAME.jar 的访问权限"
       cd $BASE_PATH
       chmod 777 $JAR_NAME.jar
    echo "修改访问权限完成"
}
 
 
# 构建docker镜像
function build(){
    if [ -n "$IID" ]; then
        echo "存在$SERVER_NAME镜像,IID=$IID"
        echo "停止容器docker stop  $CID"
        docker stop  $CID
        echo "删除容器 docker rm $CID"
        docker rm $CID
        echo "删除镜像 docker rmi $SERVER_NAME"
        docker rmi $SERVER_NAME
        echo "构建镜像 docker build -t="$SERVER_NAME"  ."
        cd $BASE_PATH
        docker build -t="$SERVER_NAME"  .
    else
        echo "不存在$SERVER_NAME镜像,开始构建镜像  docker build -t $SERVER_NAME . "  
        cd $BASE_PATH
        docker build -t="$SERVER_NAME"  .
    fi
}
 
# 运行docker容器
function run(){
    backup
    transfer
    changemod
    build
    echo "docker run创建容器... docker run -d  --name=$SERVER_NAME -p 8002:8082 -v  $BASE_PATH:$BASE_PATH    jenkinsdemo:latest"
        docker run -d  --name=$SERVER_NAME -p 8002:8002 -v  $BASE_PATH:$BASE_PATH    jenkinsdemo:latest
    echo "$SERVER_NAME容器创建完成"
}
 
#入口
run 

3.保存,返回

4.然后修改代码,push到gitee,在系统中会产生镜像和容器,

5.浏览器效果

大吉大利,完工。


jvm参数配置:
-server -Xms180m -Xmx180m -Xmn64m -Xss256k -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:+DisableExplicitGC -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps

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

推荐阅读更多精彩内容