centos7+docker+Jenkins+svn搭建自动化部署平台
1. centos7
- 参考链接:http://www.macrozheng.com/#/reference/linux_install 
 创新互联建站从2013年开始,先为云霄等服务建站,云霄等地企业,进行企业商务咨询服务。为云霄企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。 
- 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
- 下载 - Jenkins的- docker镜像:- 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上  
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
文章题目:centos7+docker+Jenkins+svn搭建自动-创新互联
标题来源:http://www.scyingshan.cn/article/hgcjh.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 