自动化部署(一)

简介: 自动化部署一点点小思路

自动化部署(一)

一.自动化部署是什么?

自动化部署概述

1.1 什么是自动化部署

一句简单的话概括:部署的过程中所有的操作全部自动化,无需人工手工干预。

1.2 自动部署的好处

传统的部署方式如下:

  • 运维人员手工使用Scp、Xftp等方式来传输数据
  • 手工登录服务器执行git pull 、svn update等命令进行更新代码的操作
  • 开发人员手工编译打包,然后通过内网传输给运维人员
  • 运维人员通过rz上传的方式上传到目标服务器,然后,执行重命名原包、拷贝新包到目标目录,再执行服务应用重启命令完成整个部署过程

看似非常简单,也不是很麻烦,但是一旦项目多,部署频繁,这种情况下就会大大降低工作效率。

传统的部署方式有以下的缺点:

  • 整个过程都需要人员参与,占用大量的时间,效率低下
  • 上线、更新、回滚速度慢
  • 存在一定的管理混乱,人为误操作的机率增大

所以,自动化部署的优势就通过这种对比显现出来了!!

二.怎么实现?

我们都知道部署就是将项目放到服务器上,然后运行起来

流程一般是本地打包,备份服务器上正在运行的包,然后上传到项目所使用的目录,再杀掉之前跑的进程,再重新启动项目。

1.原生自动化部署

前端

#前置需要 npm git
git clone http://gitlab.forwe.store/great/protal_msn.git #克隆代码
cd protal_msn/
# 这里因为是http的 所以要输入账号密码
git config --local credential.helper store #保存账号密码

git pull
npm install
npm run build:dev

后端

#前置需要 jdk
git clone http://gitlab.forwe.store/great/community.git
cd community/
clean package -Dmaven.test.skip=true -P test
mv ./target/community.jar /usr/local/project/community
sh /usr/local/project/community/restart.sh

注意:使用http 克隆项目的时候 需要设置一下保存git账号和密码

git config --local credential.helper store #记住账号密码 下次就不用再输了

2.jenkins

jenkins的背景

Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。

前端

后端

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

restart.sh 脚本内容

#!/bin/bash

# error code
# 1: missing parameter
# 2: not a jar file
# 3: start jar file failed

TIMEOUT=180  # 3 minutes timeout

function echo_error() {
    printf "[ \033[31mERROR $1\033[0m ] $2\n"
}

function main() {
        
        echo "检查jar包开始"
        # check file type
        local jarfile=community.jar
        local extension=${jarfile##*.}
        if [[ $extension != jar ]];then
                echo_error 2 "not a jar file"
                exit 2
        fi
        echo "检查jar包成功"
        echo "***********************************"
        echo "停止进程 $jarfile 开始"
        # check process is running
        local pid=$(ps -ef|grep -E "\-jar $jarfile" | grep -v grep |awk '{print $2}')
        if [ -n "$pid" ]
        then
    echo "kill -9 的pid:" $pid
    kill -9 $pid
        fi
        echo "停止进程结束"

        echo "start jar -------------->"
        # start jar file
    source /etc/profile
    cd /pine/www/project/community
    nohup java -Dloader.path=lib/ -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5007 -Xms512m -Xmx512m -jar community.jar >/dev/null 2>&1  &

}


main $*

jenkins中所遇到的两个坑

着重强调一下这两个坑

一、构建完成后脚本运行能kill项目但是无法运行

配置完成之后,运行脚本时需注意 会在home目录下去执行 sh后需要加入绝对路径 注意 shell命令里面 也要设置绝对路径

加入 这两个参数即可

  source /etc/profile

  BUILD_ID=dontKillMe

查了一下原因说是 jenkins在脚本执行结束后,就认为任务结束了,但是脚本启动的相关子程序仍然在运行。由于jenkins认为任务已经结束了,就结束了该构建相关的子进程。

source /etc/profile 是说因为是伪连接过来的 所以呢没有当前服务器的环境变量 导致无法运行 java

不然就是需要吧java全路径带进来 (这一点没有复现出来,可能是由于Jenkins构建完成后ssh连接过来的账号权限不足导致无法获取到环境变量)

还有就是启动jar包的时候 一定一定要 绝对路径或者cd 到对应的项目目录下 不然也一样是运行不了的

二、无限构建问题

在这里插入图片描述

jenkins任务构建进入死循环 - 使用微服务架构,工程间有依赖,所以创建jenkins任务时,配置了触发器,当依赖的项目构建时,触发任务构建。

后续

后面可以延伸的点 在于自动化部署完后可以进行一个备份,根据时间来重命名,保留2个月的包。关键点上在于shell脚本的编写。

目录
相关文章
|
5月前
|
运维 安全 Devops
DevOps实践:自动化部署的脚本编写技巧
【9月更文挑战第24天】在DevOps文化中,自动化部署是提升效率、减少人为错误的关键。本文将引导读者了解自动化部署脚本的编写方法,从基础命令到复杂逻辑,逐步深入。你将学会如何用代码简化日常任务,让重复工作变得轻松愉快。让我们一起探索自动化的世界,释放你的创造力!
106 2
|
6月前
|
jenkins 持续交付 开发者
自动化部署:使用Jenkins和Docker实现持续集成与交付
【8月更文挑战第31天】本文旨在为读者揭示如何通过Jenkins和Docker实现自动化部署,从而加速软件开发流程。我们将从基础概念讲起,逐步深入到实际操作,确保即使是初学者也能跟上步伐。文章将提供详细的步骤说明和代码示例,帮助读者理解并应用这些工具来优化他们的工作流程。
|
6月前
|
运维 Devops jenkins
DevOps实践:自动化部署与持续集成
【8月更文挑战第29天】本文深入探讨了DevOps文化中的两大核心实践——自动化部署和持续集成。通过介绍这两个概念,解释了它们如何相互促进并提升软件开发的效率和质量。文章将展示具体的代码示例,指导读者如何在实际项目中实现这些实践,以及如何从中受益。
|
8月前
|
jenkins Java 持续交付
运用Jenkins实现Java项目的持续集成与自动化部署
在新建的Jenkins Job中,我们需要配置源码管理,通常选择Git、SVN等版本控制系统,并填入仓库地址和凭据。接着,设置构建触发器,如定时构建、轮询SCM变更、GitHub Webhook等方式,以便在代码提交后自动触发构建过程。
285 2
|
3月前
|
Devops jenkins 测试技术
C# 一分钟浅谈:自动化部署与持续集成
【10月更文挑战第21天】本文介绍了自动化部署和持续集成(CI)在C#项目中的应用,涵盖基础概念、常用工具(如Jenkins、GitHub Actions、Azure DevOps、GitLab CI/CD)、常见问题及解决方案,以及实践案例和代码示例。通过合理配置CI/CD工具,可以显著提高开发效率和代码质量。
91 1
|
4月前
|
运维 Devops jenkins
DevOps实践:自动化部署与持续集成的实现
【9月更文挑战第36天】本文通过深入浅出的方式,向读者展示了在现代软件开发中,DevOps如何通过自动化部署和持续集成提高开发效率和软件质量。文章不仅介绍了相关概念,还提供了实用的代码示例,帮助读者理解如何在实际工作中应用这些技术。
|
4月前
|
监控 Devops 测试技术
DevOps实践:持续集成与部署的自动化之路
【9月更文挑战第30天】在软件工程的世界中,DevOps已成为提升开发效率、确保软件质量和加快交付速度的关键策略。本文将深入探讨如何通过自动化工具和流程实现持续集成(CI)与持续部署(CD),从而优化软件开发周期。我们将从基础概念出发,逐步深入到实际操作,最终展示如何构建一个高效的自动化流水线,以支持快速迭代和高质量发布。
83 7
|
5月前
|
运维 Ubuntu 应用服务中间件
自动化运维:使用Ansible进行配置管理和任务自动化
【9月更文挑战第27天】在现代IT基础设施中,自动化运维是提高效率、减少人为错误和确保系统一致性的关键。本文将介绍如何使用Ansible,一个流行的开源IT自动化工具,来简化日常的运维任务。我们将探索Ansible的核心概念,包括它的架构、如何安装和使用它,以及一些实际的使用案例。无论你是新手还是有经验的运维专家,这篇文章都会提供有价值的见解和技巧,以帮助你更好地利用Ansible实现自动化。
|
5月前
|
运维 Devops 应用服务中间件
DevOps实践:使用Ansible进行自动化部署
【9月更文挑战第28天】在当今快节奏的软件开发环境中,DevOps的实践已成为提升效率和可靠性的关键。本文将探讨如何利用Ansible这一强大的自动化工具来简化部署流程。通过实际示例,我们将展示如何配置Ansible playbook,实现代码的自动部署和服务器管理任务的自动化,从而帮助团队减少人为错误,加快发布周期,确保软件交付的一致性和可预测性。
|
6月前
|
JavaScript jenkins 持续交付
自动化部署与持续集成:使用Jenkins和Docker优化开发流程
【8月更文挑战第31天】在软件开发的世界里,时间就是一切。本文将引导你通过Jenkins和Docker的强大组合,实现自动化部署和持续集成,让你的开发流程如丝般顺滑。我们将从基础设置开始,逐步深入到构建管道,最终实现一键部署的梦想。准备好让你的开发效率飞跃,一起探索这个令人兴奋的旅程吧!