centos7+docker+Jenkins+svn搭建自动化部署平台

centos7+docker+Jenkins+svn搭建自动化部署平台

1. centos7

  • 参考链接:http://www.macrozheng.com/#/reference/linux_install

  • tips
    公司服务器配置(1T机械+256固态+i7的u)
    需要我们把系统,环境(java,mysql,redis,docker等)装到固态上(速度快),我们的代码放到机械上。分区情况如下图

2. centos7中安装docker1.31.1

自行百度,此处无坑

3. centos7安装配置java8,maven,redis,mysql

  • 安装jdk1.8 和 maven 时尽量采用压缩包解压的方式,采用 yum 有坑。我的安装路径

  • 配置环境 vim /etc/profile,配置结果如图

    #java,maven环境配置
    #用‘:‘分割不同的配置
    export JAVA_HOME=/mydata/java/jdk
    MAVEN_HOME=/mydata/java/maven
    export PATH=$JAVA_HOME/bin:$PATH:${MAVEN_HOME}/bin
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    
  • centos7安装mysql5.7,参考链接:
    https://www.cnblogs.com/helf/p/11244711.html
  • centos7安装redis,参考链接:
    https://www.cnblogs.com/zuidongfeng/p/8032505.html

4. docker中安装 Jenkins

  • 下载 Jenkinsdocker 镜像:

    docker pull jenkins/jenkins:lts

  • Docker 容器中运行 Jenkins
    //此处因为java和maven是在linux上直接装的而Jenkins在docker上装的所以必须挂载jdk和maven(坑)
    //-v命令进行挂载,其中冒号前面的是本机的目录;
    //必须将本机的javahome和mavenhome的路径,挂载到Jenkins容器上
    //冒号后面是容器上的目录,可以写跟本机目录相同。
    docker run -p 8080:8080 -p 50000:5000 --name jenkins -u root -v /mydata/java/jdk/bin/java:/mydata/java/jdk/bin/java -v /mydata/java/jdk:/mydata/java/jdk -v /mydata/java/maven:/mydata/java/maven -v /mydata/jenkins_home:/var/jenkins_home -d jenkins/jenkins:lts
  • 忘记 Jenkins 初始化密码,使用 docker logs jenkins 查看日志
  • 参考链接:http://www.macrozheng.com/#/reference/jenkins
  • 配置如图

5. centos7 安装 svn

? 参考链接:https://www.cnblogs.com/zhangheliang/p/8724605.html

6. Jenkins 和 svn整合

  • Jenkins 的配置

还有一种没有去掉勾的方式,我获取 crumb 值的时候报404,为解决,有需要自行百度

?

?

?

?

  • svn 的配置

  • 在生成的 post-commit 中加入下面的代码
    curl -X post -v -u admin:117f598cc5f81226faaac0ceff40b367da http://ip:8080/jenkins/job/jenkinsdemo/build?token=APPLE_TOKEN

7. shell脚本和DockerFile文件

#!/bin/bash
#操作/项目路径(Dockerfile存放的路径),每个项目都有对应的dockerfile
DOCKERFILE_PATH=/mydata/jenkins_home/workspace/jenkinsdemo/src/main/docker
#jenkins工作空间
SOURCE_PATH=/mydata/jenkins_home/workspace
#docker 镜像/容器名字或者jar名字 这里都命名为这个
SERVER_NAME=jenkinsdemo
JAR_NAME=demo-0.0.1-SNAPSHOT
#获取容器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 "${DOCKERFILE_PATH}/${SERVER_NAME}.jar" ]; then
        echo "${SERVER_NAME}.jar 备份..."
            cp ${DOCKERFILE_PATH}/${JAR_NAME}.jar ${DOCKERFILE_PATH}/backup/${SERVER_NAME}-$DATE.jar
        echo "备份 ${JAR_NAME}.jar 完成"
    else
        echo "${DOCKERFILE_PATH}/${JAR_NAME}.jar不存在,跳过备份"
    fi
}

# 最新构建代码 移动到项目环境
# 把最新构建的jar包放到和dockerfile同级的目录
function transfer(){
    echo "啦啦啦 ${DOCKERFILE_PATH}"
    echo "最新构建代码 ${SOURCE_PATH}/${SERVER_NAME}/target/${JAR_NAME}.jar 迁移至 ${DOCKERFILE_PATH}"
        cp ${SOURCE_PATH}/${SERVER_NAME}/target/${JAR_NAME}.jar  ${DOCKERFILE_PATH}/
    echo "迁移完成"
}

# 修改访问权限
function changemod(){
    echo "修改 ${DOCKERFILE_PATH}/${JAR_NAME}.jar 的访问权限"
       cd ${DOCKERFILE_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 ${DOCKERFILE_PATH}
        docker build -t="${SERVER_NAME}"  .
    else
        echo "不存在${SERVER_NAME}镜像,开始构建镜像  docker build -t ${SERVER_NAME} . "
        cd ${DOCKERFILE_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  ${DOCKERFILE_PATH}:${DOCKERFILE_PATH}    jenkinsdemo:latest"
        docker run -d  --name=${SERVER_NAME} -p 8002:8002 -v  ${DOCKERFILE_PATH}:${DOCKERFILE_PATH}    jenkinsdemo:latest
    echo "${SERVER_NAME}容器创建完成"
}

#入口
run 
# 该镜像需要依赖的基础镜像
FROM java:8
# 将当前目录下的jar包复制到docker容器的/目录下
ADD demo-0.0.1-SNAPSHOT.jar /jenkinsdemo.jar
# 运行过程中创建一个mall-tiny-docker-file.jar文件
RUN bash -c ‘touch /jenkinsdemo.jar‘
# 声明服务运行在8083端口
EXPOSE 8083
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-jar","/jenkinsdemo.jar"]
# 指定维护者的名字
MAINTAINER zhaoguozhen

8. Docker安装可视化工具Portainer

参考链接:https://my.oschina.net/zhengqingya/blog/3066410

9.结果

10. TIPS

  • docker 是通过 dockerfile 来讲代码打包成 docker 镜像并运行的,多个子工程(微服务)也可以使用Docker Compose 来部署(这个东西类似于批处理,使用一个命令部署配置的所有服务)
  • shell 脚本中的变量打印不出来考虑换个名称

    比如:BASE_PATH 换成 DOCKERFILE_PATH ,shell 脚本就可以执行成功

  • 访问链接打不开,考虑是否打开防火墙和权限
    #打开防火墙
    firewall-cmd --zone=public --add-port=9000/tcp --permanent
    #重新加载
    firewall-cmd --reload
    #查看开放的端口
    firewall-cmd --list-ports
  • 大白话理解 CI CD

    把代码打包成容器叫CI,把容器部署到服务器是CD

11. 后记

  • 通过下面这张图,GitHub webhook 要求必须是公网 IP

  • 自动化部署平台理解
  • 上面只是横向弄好了,竖向还没弄好。下面需要弄个docker管理器,将打包好的代码镜像人工选择放到docker集群中的某个docker上

原文地址:https://blog.51cto.com/13416247/2467580

时间: 2024-10-08 20:33:02

centos7+docker+Jenkins+svn搭建自动化部署平台的相关文章

jenkins搭建自动化部署平台(svn+tomcat重启)

原文链接:http://blog.csdn.net/zjs40/article/details/51818322 jenkins 自动化部署和集成代码的平台 可以将Git svn 上的代码 checkout 然后重新部署服务器,节省开发测试的效率 一.https://jenkins.io/index.html 下载jenkins包(war包) 二.下载完war包   在服务器上最好新建一个tomcat专门用来做jenkins启动的   修改一下server.xml 文件中修改   : (1) 修

maven+jenkins 搭建自动化部署平台

jenkins 自动化部署 1.安装JDK 1.1.上传linux的JDK安装包到opt目录下,并解压 1.2.配置jdk环境变量vim /etc/profile  在尾部添加如下内容,添加完成后执行命令:source /etc/profile # jdk环境变量 export JAVA_HOME=/opt/jdk1.8.0_102 export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HO

Docker+Jenkins+Go完成自动化部署

安装docker 安装所需的包.yum-utils提供了yum-config-manager 效用,并device-mapper-persistent-data和lvm2由需要 devicemapper存储驱动程序. yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 使用以下命令设置稳定存储库. yum-config-manager \ --add-repo \ https://download.docker.com/

jenkins+git+maven搭建自动化部署项目环境

简介    折腾了两个晚上,趁着今晚比较有空,把jenkins+git+maven搭建自动化部署项目环境搭建的过程记录一下,这里我把github作为git的远程仓库(https://github.com/jacky-        lulu/cxf_demo-Maven-Webapp)     系统:centos6.5 maven: Apache Maven 3.3.9 git:git version 2.0.0 1.首先安装git,看以前另外一篇博客 http://www.cnblogs.co

基于Jenkins+Gitlab的自动化部署实战

故事背景 一个中小型企业,是典型的互联网公司,当初期的时候可能运维只能标配到2~3人,此时随着公司的发展,项目会逐渐增多.前期部署项目可能都是手动的, 俗称"人肉部署",这简直是无比的痛苦,不能忍受的.这样开发的时间也会耽误,运维的时间也会耽误,全都浪费在这些重复性的工作上面,毫无价值可言, 这时候运维终于忍受不了,上了脚本.但是慢慢的发现项目依旧在增长,脚本每次还要更改给开发,效率低下,后来测试环境以及开发环境直接上了jeknins, 每台开发机器是jeknins agent端,自此

开源Java自动化部署平台JDeploy

JDeploy是Java + Shell实现的基于Linux系统的自动化.可视化的项目部署平台,能部署Java服务.Java Web项目,可以简化项目部署操作,无需繁琐的黑窗口SSH指令及Jenkins复杂的配置. 传统部署方式:从SVN/GIT服务器检出代码->在IDE中打包->将包传到服务器->SSH连上服务器->敲指令启动/停止 JDeploy部署:创建项目->一键部署/启动/停止 * 检出代码.打包.启动.停止等操作通过Shell脚本自动执行. 下载:http://d

jenkins+ant+jmeter自动化性能测试平台

jenkins+ant+jmeter自动化性能测试平台 Jmeter是性能测试的工具,java编写.开源,小巧方便,可以图形界面运行也可以在命令行下运行.网上已经有人使用ant来运行,http://www.programmerplanet.org/projects/jmeter-ant-task/,既然可以使用ant运行,那和hudson.jenkins集成就很方便了,而且jenkins上也有相应的插件Performance Plugin,可以自动收集jmeter的测试结果,展示出来. 首先去下

Jenkins+Ant+Jmeter 自动化性能测试平台

一.前言 持续集成 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作, 通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成.每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误.许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件. Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:持续的软件版本发布/测试项目,监控外部调用执行的工作. 项目构建 通过构建工具对多个项目文件进行统一

关于自动化部署平台的尝试

前言 参加过两次公司生产环境的版本更新,最近一次让我萌生了开发一个自动化部署平台的念头.虽然网上也有不少的自动化部署软件,但还是想自己动手写一个.一来是为了让平台更适应当前的实际情况,也利于以后自己对平台通用性的扩展:二来是为了锻炼自己,给自己的空闲时间找点事情做,不至于虚度时光. 以下是整理出的初稿,想到的点比较简单,后面会持续完善. 如果本文有幸被您看到,望能指点一二. 不管是积极的还是消极的,请留下您的看法. 背景 程序开发好之后免不了部署.刚开始还好,手动打包.上传.部署,也不需要多长时