Jenkins + 云效 前后端项目自动化部署

环境安装

创建目录

后续下载的内容 放在里边方便管理

	cd /
	mkdir docker
	cd docker
	mkdir maven 
	mkdir jenkins
	mkdir java
	mkdir registry

宝塔

不在赘述 前往官网有安装命令 宝塔下载页面

docker

  • 安装docker后 打开安装docker
    在这里插入图片描述

  • 修改docker 配置 可远程访问

    vim  /lib/systemd/system/docker.service
    
    ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
    # ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --			containerd=/run/containerd/containerd.sock
    ExecReload=/bin/kill -s HUP $MAINPID
    TimeoutSec=0
    RestartSec=2
    Restart=always
    
  • 重载配置重启

    systemctl daemon-reload && systemctl restart docker
    

maven

  • 前往maven下载页面
    在这里插入图片描述

  • 选择版本下载 如:apache-maven-3.8.6-bin.tar.gz

  • 上传至服务器/docker/maven目录下 解压

    tar –xvf apache-maven-3.8.6-bin.tar.gz
    
  • 创建仓库保存目录

    mkdir repository
    

    在这里插入图片描述

  • 修改maven settings.xml 文件

    cd /docker/maven/apache-maven-3.8.6/conf
    vim settings.xml
    
      <mirror>
    	  <id>alimaven</id>
     	 <name>aliyun maven</name>
     	 <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    	  <mirrorOf>central</mirrorOf>
     </mirror>
    
     <localRepository>/docker/maven/repository/repo</localRepository>
    

    阿里云镜像
    在这里插入图片描述
    配置本地仓库
    在这里插入图片描述

java

  • 前往官网下载JDK oracle官方下载地址 (你发任你发 我用JAVA8)
    在这里插入图片描述

  • 选择版本下载 如:jdk-8u351-linux-aarch64.tar.gz

  • 上传至服务器/docker/java目录下 解压

    tar –xvf jdk-8u351-linux-aarch64.tar.gz
    

本地仓库

  • 下载镜像

    docker search registry
    

    在这里插入图片描述
    下载官方的

    docker pull registry
    
  • 启动容器

    docker run -d -v /docker/registry:/var/lib/registry -p 5000:5000 --name myregistry registry:latest
    
  • 访问http://ip:5000/v2/_catalog 看到 {“repositories”:[]} 表示成功

  • 修改/etc/docker/daemon.json 第二行 没有的话可以不加 可以去docker镜像服务申请 详见docker镜像私服

    {
      "insecure-registries":["192.168.0.107:5000"],
      "registry-mirrors": ["**********"]
    }
    
  • 重启docker

    systemctl restart docker 
    

jenkins

  • 拉取jenkins 镜像

    docker search jenkins 
    

    在这里插入图片描述

  • 挂载容器卷启动容器

    docker run -d -p 18080:8080 -p 50000:50000 --privileged=true -u root -v 			   /docker/jenkins:/var/jenkins_home 
    -v /docker/maven/apache-maven-3.8.6:/usr/local/apache-maven 
    -v /docker/java/jdk1.8.0_341:/usr/local/java/jdk1.8 
    -v /var/run/docker.sock:/var/run/docker.sock  
    -v /usr/bin/docker:/usr/bin/docker 
    -v /www/wwwroot:/www/wwwroot 
    -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai --name jenkins jenkins
    

    这两个解决jenkins shell docker命令找不到问题

    -v /var/run/docker.sock:/var/run/docker.sock  
    -v /usr/bin/docker:/usr/bin/docker
    

    这个为前端项目部署创建 挂载目录

    -v /www/wwwroot:/www/wwwroot 
    
  • 解决离线问题

    cd /docker/jenkins
    vim hudson.model.UpdateCenter.xml
    

    改为清华镜像

    <sites>
      <site>
       <id>default</id>
     <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/current/update-center.json</url>
     </site>
    </sites>
    
  • 解决插件安装慢问题
    替换 default.json内的内容

    cd /docker/jenkins/updates
    sed -i 's/www.google.com/www.baidu.com/g' default.json
    sed -i 's/updates.jenkins-ci.org\/download/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
    #重启 Jenkins
    docker restart jenkins的容器id
    
  • 登录 开始安装依赖
    原始密码在initialAdminPassword文件内

    cd /docker/jenkins/secrets
    cat initialAdminPassword
    

jenkins配置

全局工具配置

maven

在这里插入图片描述
在这里插入图片描述

jdk

在这里插入图片描述

系统配置

环境变量

在这里插入图片描述

配置自动化发布

安装插件 Maven Integration plugin

在这里插入图片描述

安装插件 Generic Webhook Trigger

在这里插入图片描述

安装插件 NodeJS

在这里插入图片描述
解决node无法下载

cd /docker/jenkins/updates
touch hudson.plugins.nodejs.tools.NodeJSInstaller
vim hudson.plugins.nodejs.tools.NodeJSInstaller
{
    "list":[
        {
            "id":"12.16.3",
            "name":"NodeJS 12.16.3",
            "url":"https://nodejs.org/dist/v12.16.3/"
        },
        {
            "id":"9.9.0",
            "name":"NodeJS 9.9.0",
            "url":"https://nodejs.org/dist/v9.9.0/"
        },
        {
            "id":"9.8.0",
            "name":"NodeJS 9.8.0",
            "url":"https://nodejs.org/dist/v9.8.0/"
        },
        {
            "id":"9.7.1",
            "name":"NodeJS 9.7.1",
            "url":"https://nodejs.org/dist/v9.7.1/"
        }
    ]
}

全局工具配置 NodeJS
在这里插入图片描述

后端Maven项目构建单模块

  • 创建maven项目
    在这里插入图片描述

  • 配置git地址以及账号 在这里插入图片描述

  • 构建配置 生成镜像(若直接执行镜像 可在配置执行shell)
    在这里插入图片描述

  • pom.xml配置

    	<build>
        <finalName>app</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- docker的maven插件,官网: https://github.com/spotify/docker‐maven‐plugin-->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.2.0</version>
                <configuration>
                    <imageName>192.168.0.107:5000/${project.artifactId}:${project.version}</imageName>
                    <baseImage>jdk1.8</baseImage>
                    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                    <dockerHost>http://192.168.0.107:2375</dockerHost>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

后端Maven项目构建多模块

  • 创建maven项目
    在这里插入图片描述

  • 配置git地址以及账号 在这里插入图片描述

  • 构建配置 生成镜像
    在这里插入图片描述

  • 构建成功后执行shell
    在这里插入图片描述

    echo "在指定docker目录创建Dockerfile文件用于生成docker容器"
    cd yshop-app/target
    cat>Dockerfile<<EOF
    FROM jdk1.8
    ADD /app.jar //
    ENTRYPOINT ["java", "-jar", "/app.jar"]
    # ENTRYPOINT ["java", "-jar", "/admin.jar",">> ","/var/logs/log.log","&"]
    EOF
    
    echo "清理已有容器及镜像资源"
    container="yshop-app"
    image=${container}
    
    if docker ps | grep ${container} ;then
       docker stop ${container}
    fi
    
    if docker ps -a | grep ${container};then
        docker rm ${container}
    fi
    
    if docker images | grep ${image};then
        docker rmi ${image}
    fi
    
    echo "镜像制作"
    docker build -t ${image} .
    echo "容器运行"
    docker run -d --restart=always --name ${container} -v  	/usr/local/project/tidePlayMall/app/logs:/var/logs -p 8008:8008  ${image}  -Duser.timezone=GMT+8
    # docker run -d --restart=always --name ${container} -v /usr/local/project/tidePlayMall/admin/avatar:/usr/local/project/tidePlayMall/admin/avatar -v /usr/local/project/tidePlayMall/admin/file:/usr/local/project/tidePlayMall/admin/file -v  /usr/local/project/tidePlayMall/admin/logs:/var/logs -p 8001:8001  ${image}  -Duser.timezone=GMT+8
    
    
    
    echo "在指定docker目录创建Dockerfile文件用于生成docker容器"
    cd yz-server/target
    cat>Dockerfile<<EOF
    FROM jdk1.8.0_341
    ADD /yz-server.jar //
    ENTRYPOINT ["java", "-jar", "/yz-server.jar"]
    # ENTRYPOINT ["java", "-jar", "/admin.jar",">> ","/var/logs/log.log","&"]
    EOF
    
    echo "清理已有容器及镜像资源"
    container="yz-server"
    image=${container}
    
    if docker ps | grep ${container} ;then
       docker stop ${container}
    fi
    
    if docker ps -a | grep ${container};then
        docker rm ${container}
    fi
    
    if docker images | grep ${image};then
        docker rmi ${image}
    fi
    
    echo "镜像制作"
    docker build -t ${image} .
    echo "容器运行"
    docker run -d --restart=always --name ${container} -p 48080:48080 -e TZ=Asia/Shanghai -v /usr/local/project/groupBuy/api/:/usr/local/project/groupBuy/api/ ${image}
    
    
  • 配置 Webhook

    • 变量
      在这里插入图片描述

    • token(自定义)
      在这里插入图片描述

    • 云效
      在这里插入图片描述

      http://JENKINS_URL/generic-webhook-trigger/invoke?token=**********
      内网服务器 可以做个内网穿透

      在这里插入图片描述

前端vue项目部署

  • 宝塔创建站点
    在这里插入图片描述

  • 配置构建环境
    在这里插入图片描述

  • 执行sell

    node -v
    npm install 
    rm -rf ./dist/*  #移除工作区dist文件
    npm run-script build  #打包项目
    rm -rf /www/wwwroot/192.168.0.107/dist/*  #删除/www/wwwroot/192.168.0.107/dist上一次构建文件
    cp -rf ./dist/* /www/wwwroot/192.168.0.107/dist  #将打包后的dist文件拷贝	到/www/wwwroot/192.168.0.107/dist ,/www/wwwroot/192.168.0.107/dist为nginx文件目录
    
    node -v
    npm install 
    rm -rf ./dist/*  #移除工作区dist文件
    npm run build:prod  #打包项目
    distDir="/www/wwwroot/******/dist"
    if [ -d $distDir ]
    then
     	echo "dist路径已存在"
    else
      	mkdir $distDir
    fi
    rm -rf /www/wwwroot/******/dist/*  #删除/www/wwwroot/******/dist上一次构建文件
    cp -rf ./dist/* /www/wwwroot/******/dist  #将打包后的dist文件拷贝	到/www/wwwroot/******/dist ,/www/wwwroot/******/dist为nginx文件目录
    
    
  • 其他的git地址配置 Webhook 都一样

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前后端分离的分布式项目部署通常包括以下几个步骤: 1. 前端部署: - 打包前端代码:将前端代码使用构建工具(如Webpack)进行打包,生成静态文件(HTML、CSS、JavaScript)。 - 部署静态文件:将打包好的静态文件上传至一个静态文件服务器(如Nginx),通过域名或IP地址访问。 2. 后端部署: - 选择合适的云平台:根据项目需求选择合适的云服务提供商(如AWS、阿里云、腾讯云)。 - 虚拟机或容器化部署:创建虚拟机实例或使用容器技术(如Docker)创建容器,并在其中部署后端代码。可以使用自动化部署工具(如Ansible、Kubernetes)来简化部署流程。 - 数据库部署:根据项目需要选择适合的数据库类型(如MySQL、MongoDB),在数据库服务器上创建并配置数据库实例。 3. 网络配置: - 前后端通信:配置前端与后端的网络通信,确保前端能够正确地发送请求到后端接口。 - 负载均衡:使用负载均衡技术(如Nginx、HAProxy)来分发请求,提高系统的并发处理能力和可用性。 - 安全配置:配置SSL证书以启用HTTPS协议,保证数据传输的安全性。 4. 监控和日志: - 监控系统:搭建监控系统,监控项目的运行状态、性能指标等,及时发现并解决问题。 - 日志管理:配置日志记录,将项目的日志信息输出到集中式日志管理平台,方便排查问题和分析。 5. 自动化部署和持续集成: - 使用自动化部署工具(如Jenkins、GitLab CI/CD)实现自动化部署流程,减少手动操作的错误和时间成本。 - 实施持续集成和持续交付策略,通过自动化测试、代码检查等手段确保代码质量,并快速将新功能交付给用户。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值