千家信息网

centos7+docker+Jenkins+svn搭建自动

发表于:2024-11-12 作者:千家信息网编辑
千家信息网最后更新 2024年11月12日,centos7+docker+Jenkins+svn搭建自动化部署平台1. centos7参考链接:http://www.macrozheng.com/#/reference/linux_instal
千家信息网最后更新 2024年11月12日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/jdkMAVEN_HOME=/mydata/java/mavenexport PATH=$JAVA_HOME/bin:$PATH:${MAVEN_HOME}/binexport 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存放的路径),每个项目都有对应的dockerfileDOCKERFILE_PATH=/mydata/jenkins_home/workspace/jenkinsdemo/src/main/docker#jenkins工作空间SOURCE_PATH=/mydata/jenkins_home/workspace#docker 镜像/容器名字或者jar名字 这里都命名为这个SERVER_NAME=jenkinsdemoJAR_NAME=demo-0.0.1-SNAPSHOT#获取容器idCID=$(docker ps | grep "${SERVER_NAME}" | awk '{print $1}')#获取镜像idIID=$(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上

0