Jenkins 搭建 Spring Cloud Maven 自动打包

1、什么是Jenkins

  • Jenkins是一个开源软件项目,是基于Java开发的一种自动化测试和持续集成、发布工具。

2、Jenkins 的优点

  • 易安装:仅仅一个 java -jar jenkins.war,从官网下载该文件后,直接运行,无需额外的安装,更无需安装数据库;
  • 易配置:提供友好的GUI配置界面;
  • 变更支持:Jenkins能从代码仓库(Subversion/CVS)中获取并产生代码更新列表并输出到编译输出信息中;
  • 支持永久链接:用户是通过web来访问Jenkins的,而这些web页面的链接地址都是永久链接地址,因此,你可以在各种文档中直接使用该链接;
  • 集成E-Mail/RSS/IM:当完成一次集成时,可通过这些工具实时告诉你集成结果(据我所知,构建一次集成需要花费一定时间,有了这个功能,你就可以在等待结果过程中,干别的事情);
  • JUnit/TestNG测试报告:也就是用以图表等形式提供详细的测试报表功能;
  • 支持分布式构建:Jenkins可以把集成构建等工作分发到多台计算机中完成;
  • 文件指纹信息:Jenkins会保存哪次集成构建产生了哪些jars文件,哪一次集成构建使用了哪个版本的jars文件等构建记录;
  • 支持第三方插件:使得 Jenkins 变得越来越强大;

3、什么是持续集成(CI)

  • 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火,如何能在不断变化的需求中快速适应和保证软件的质量也显得尤其的重要。
  • 持续集成正是针对这一类问题的一种软件开发实践。它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。而每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。

4、持续集成特点

  • 它是一个自动化的周期性的集成测试过程,从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的,无需人工干预;
  • 需要有专门的集成服务器来执行集成构建;
  • 需要有代码托管工具支持;

5、持续集成作用

  • 保证团队开发人员提交代码的质量,减轻了软件发布时的压力;
  • 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量;

6、Jenkins 应用场景

  • 持续、自动地构建/测试软件项目。
  • 监控一些定时执行的任务。

7、Jenkins 如何安装 下面借用 别人博客:https://www.cnblogs.com/hanmk/p/6808932.html

 

下面开始 记录博客内容

  项目要求 根据 commitId 下载git 代码 (没有找到具体 jenkins 插件 所以全使用shell编写脚本完成功能)

1、因为每次都根据commitId 下载的代码 那么需要在执行之前删除掉 历史文件

 

2、执行 Shell 别忘了 代码开始加上( #!/bin/bash -x 代表这是shell脚本 )

#!/bin/bash -x
HARBOR_IP='192.168.155.100:8082'         # 镜像名字
REPOSITORIES='projectName'               # 项目名字
HARBOR_USER=''                           # 私服账号
HARBOR_USER_PASSWD=''                    # 私服密码
WORKSPACE='/var/lib/jenkins/workspace/'  # linux 路径
DOCKER_TAG=''                            # docker tag
GIT_ACCOUNT=''                           # git账号
GIT_PWD=''                               # git密码

echo 读取/var/rc下配置文件                 # 我在linux服务器上放了个配置文件
#切换到根目录
cd /
#切换到配置文件目录
cd /var/rc
#读取第一行内容
CONFIG_LINE_CONTENT=$(sed -n 4p project_config.txt)
#截取需要的内容
#项目名字
PROJECT_NAME=${CONFIG_LINE_CONTENT%%|*}
#截取左面第一个|之后所有内容
LINE=${CONFIG_LINE_CONTENT#*|}
#分支
BRANCH=${LINE%%|*}
#截取左面第一个|之后所有内容
LINE=${LINE#*|}
#commitID
GIT_COMMIDIT=${LINE%%|*}

#核对项目名字
if [ ${} == '' ]; then               

  echo 下载 projectName 项目代码 --- start
  #切换工作目录
  cd /
  cd /var/lib/jenkins/workspace/projectName
  echo 创建仓库
  git init
  echo 克隆master分支代码
  git clone -b ${BRANCH} http://${GIT_ACCOUNT}:${GIT_PWD}。。。。。。.git
  echo 下载 commitid 之前所有代码
  git checkout ${GIT_COMMIDIT}
  echo 下载  项目代码 --- end

  echo 打包rc-ts-vo --- start
  echo 切换目录到pom所在文件夹
  cd /
  cd /var/lib/jenkins/workspace/
  mvn clean install 
  echo 打包rc-ts-vo --- end
  
  #echo 上传rc-ts-vo --- start
  #mvn clean deploy -U
  #echo 上传rc-ts-vo --- end
  
  echo 打包rc-ts-client --- start
  echo 切换目录到pom所在文件夹
  cd ..
  cd rc-ts-client
  mvn clean install 
  echo 打包rc-ts-client --- end
  
  #echo 上传rc-ts-client --- start
  #mvn clean deploy -U
  #echo 上传rc-ts-client --- end

    echo 操作docker私服 ---开始
    echo 切换目录
    cd projectName
    #DOCKER_TAG=$(cat version.txt)
    DOCKER_TAG='v1.3'
    echo 项目构建docker镜像之前先打成jar包
    mvn clean install 
    echo 拉取镜像,发布
    echo docker 私有仓库登录
    docker login -u ${HARBOR_USER} -p ${HARBOR_USER_PASSWD} ${HARBOR_IP}
    echo docker 打成镜像
    docker build -t ${HARBOR_IP}/${REPOSITORIES}:${DOCKER_TAG} .
    echo docker 推送到私服
    docker push ${HARBOR_IP}/${REPOSITORIES}:${DOCKER_TAG}
    echo 操作docker私服 ---结束


 



fi

以上是jenkins 操作 linux、git、docker 全部代码 下面贴上我利用插件 操作远程服务器上docker容器

找到Jenkins 插件 Execute shell script on remote host using ssh 

SSH site 这是目标主机 需要在系统设置里面设置

Command 这是在目标主机上执行的shell

#!/bin/bash -x

REPOSITORIES='projectName'
HARBOR_IP='192.168.155.100:8082'
WORKSPACE='/var/lib/jenkins/workspace/'
DOCKER_TAG='vyhj'

# Stop container, and delete the container.
CONTAINER_ID=`docker ps | grep ${REPOSITORIES} | awk '{print $1}'`
echo 容器ID ${CONTAINER_ID}
if [ -n "${CONTAINER_ID}" ]; then
docker stop ${CONTAINER_ID}
docker rm ${CONTAINER_ID}
else #如果容器启动时失败了,就需要docker ps -a才能找到那个容器
CONTAINER_ID_IAMGES=`docker ps -a | grep ${REPOSITORIES} | awk '{print $1}'`
if [ -n "${CONTAINER_ID_IAMGES}" ]; then  # 如果是第一次在这台机器上拉取运行容器,那么 
docker ps -a也是找不到这个容器的
docker rm ${CONTAINER_ID_IAMGES}
fi
fi

 # Delete godseye_web image early version.
IMAGE_ID=`docker images | grep ${REPOSITORIES} | awk '{print $3}'`

echo 镜像ID ${IMAGE_ID}

if [ -n "${IMAGE_ID}" ]; then
docker rmi ${IMAGE_ID}
fi

echo 私有仓下载镜像
# Pull image.
docker pull ${HARBOR_IP}/${REPOSITORIES}:${DOCKER_TAG}

echo 创建容器

# Run.
docker run -d --name ${REPOSITORIES} -p 9003:9003 ${HARBOR_IP}/${REPOSITORIES}:${DOCKER_TAG}

最后贴上一个 我读取 commitId、项目名、分支名 文件格式

projectName|master|7ecb342f56e67cdfa6f05ea29aff5578840dffbd|end

 

posted @ 2019-06-05 14:58  一只奋斗的猪  阅读(2185)  评论(0编辑  收藏  举报