DevOps(十二)Jenkins实战之Web发布到远程服务器

前面两篇博文介绍了怎么将django开发的web应用推送到gitlab源码仓库,然后jenkins服务器从gitlab仓库拉下来,布署到jenkins服务器上,并用supervisor进行进程管理,保证web应用一直能正常运行,今天我们继续优化,将django代码发布到远程的生产服务器上,并使用Supervisor进行管理。

一、前期准备

我需要发布的这台服务器是一台阿里云服务器,安装有Centos7操作系统,服务器上安装有python3.9、django和supervisor,如果你们服务器上没有可以先安装好,可以参考我前面的博文。接下来我们的步骤如下:

1. 使用终端连接到您的 CentOS 7 服务器。
2. 使用 mkdir 命令创建目录:
sudo mkdir /opt/HelloWorld
  • sudo 用于以 root 权限运行命令,因为 /opt 目录通常需要 root 权限才能进行修改。
  • mkdir 是创建目录的命令。
  • /opt/HelloWorld 是您要创建的目录的路径。
3. 使用 useradd 命令创建用户:
sudo useradd test
  • sudo 用于以 root 权限运行命令。
  • useradd 是创建用户的命令。
  • test 是您要创建的用户名。
4. 设置用户密码:
sudo passwd test
  • 系统会提示您输入并确认新密码。
5. 为用户分配 sudo 权限(注意这里的权限大小根据自己的需要设置):

如果您希望用户 "test" 能够执行 root 权限的操作,可以将其添加到 sudoers 文件中。

  • 使用 visudo 命令编辑 sudoers 文件:
sudo visudo
  • 在文件末尾添加以下行:
test ALL=(ALL)       ALL
  • 保存并关闭文件。
5. 验证用户是否可以 SSH 登录:
  • 使用另一个终端窗口,尝试使用以下命令以用户 "test" 身份登录服务器:
ssh test@your_server_ip
  • 系统会提示您输入密码。如果登录成功,则说明用户创建成功并可以进行 SSH 访问。
6. 使用 chown 命令更改目录的所有者:
sudo chown test:test /opt/HelloWorld
  • sudo 用于以 root 权限运行命令。
  • chown 是更改文件或目录所有者的命令。
  • test:test 指定新的所有者和组,这里都设置为 test
  • /opt/HelloWorld 是您要更改权限的目录的路径。

二、修改Jenkin脚本

要将代码部署到远程服务器,你需要修改 Jenkins 管道脚本,使其通过 SSH 连接到远程服务器并在远程服务器上执行部署步骤。

1、在jenkins上将远程访问ssh的帐号和密码保存到凭据中

2、安装ssh插件

记得安装SSH Pipeline Steps 或 SSH Agent 插件

3、修改jenkins任务脚本
pipeline {
    agent any

    stages {
        stage('Checkout') {
            steps {
                git branch: 'main', credentialsId: 'sean', url: 'http://gitlab.povison-pro.com/Sean/helloworld.git'
            }
        }

        stage('Deploy to Remote Server') {
            steps {
                script {
                    def remote = [:]
                    remote.name = 'remote-server'
                    remote.host = '192.168.1.100'  // 替换为你的远程服务器 IP 或主机名
                    remote.allowAnyHosts = true

                    withCredentials([usernamePassword(credentialsId: 'sshid', usernameVariable: 'SSHUSER', passwordVariable: 'SSHPASS')]) {
                        remote.user = SSHUSER
                        remote.password = SSHPASS

                        sshCommand remote: remote, command: '''
                            # 停止 Django 服务
                            sudo supervisorctl stop django || true

                            # 清理旧代码并复制新代码到 /opt/HelloWorld
                            sudo rm -rf /opt/HelloWorld/*
                            sudo mkdir -p /opt/HelloWorld
                        '''

                        sshPut remote: remote, from: '.', into: '/opt/HelloWorld'

                        sshCommand remote: remote, command: '''
                            # 配置 Supervisor
                            sudo cp /opt/HelloWorld/django.conf /etc/supervisor/conf.d/django.conf
                            sudo supervisorctl reread
                            sudo supervisorctl update

                            # 重启 Django 服务
                            sudo supervisorctl restart django
                        '''
                    }
                }
            }
        }
    }

    post {
        always {
            echo 'Build completed.'
        }
    }
}
4、详细解析

这个 Jenkins Pipeline 脚本实现了从 GitLab 拉取代码并将其部署到远程服务器的功能,使用用户名和密码进行 SSH 连接。以下是详细解析:

pipeline { ... }

  • 定义整个 pipeline 的结构和内容。

agent any

  • 指定 pipeline 可以在任何可用的 Jenkins 代理上运行。

stages { ... }

  • 定义 pipeline 中的各个阶段,每个阶段包含一系列步骤。

stage('Checkout') { ... }

  • 第一个阶段,名为 "Checkout",用于从 GitLab 拉取代码。

 steps { ... }

  • 定义 "Checkout" 阶段的步骤。

git branch: 'main', credentialsId: 'sean', url: 'http://gitlab.povison-pro.com/Sean/helloworld.git'

  • 使用 git 步骤从 GitLab 仓库克隆代码。
    • branch: 指定要拉取的分支,这里为 main
    • credentialsId: 指定用于访问 GitLab 仓库的凭据 ID,这里为 sean
    • url: 指定 GitLab 仓库的 URL。

stage('Deploy to Remote Server') { ... }

  • 第二个阶段,名为 "Deploy to Remote Server",用于将代码部署到远程服务器。

script { ... }

  • 使用 script 步骤执行 Groovy 代码,进行远程部署操作。

 def remote = [:]

  • 创建一个名为 remote 的 map 对象,用于存储远程服务器连接信息。

remote.name = 'remote-server', remote.host = '192.168.1.100', remote.allowAnyHosts = true

  • 设置远程服务器的名称、主机地址和允许连接到任何主机的标志。

withCredentials([usernamePassword(credentialsId: 'sshid', usernameVariable: 'SSHUSER', passwordVariable: 'SSHPASS')]) { ... }

  • 使用 withCredentials 步骤从 Jenkins 凭据中获取用户名和密码,并将它们绑定到变量 SSHUSER 和 SSHPASS
    • credentialsId: 指定存储用户名和密码的凭据 ID,这里为 sshid

remote.user = SSHUSER, remote.password = SSHPASS

  • 将获取到的用户名和密码设置到 remote 对象中。

sshCommand remote: remote, command: ''' ... '''

  • 使用 sshCommand 步骤在远程服务器上执行一系列命令。
    • remote: 指定远程服务器连接信息。
    • command: 指定要执行的命令,这里包括:
      • 停止 Django 服务。
      • 清理旧代码。
      • 创建目录。

sshPut remote: remote, from: '.', into: '/opt/HelloWorld'

  • 使用 sshPut 步骤将本地代码复制到远程服务器的 /opt/HelloWorld 目录中。

sshCommand remote: remote, command: ''' ... '''

  • 再次使用 sshCommand 步骤在远程服务器上执行一系列命令。
    • 配置 Supervisor。
    • 重启 Django 服务。

post { ... }

  • 定义 pipeline 结束后执行的操作。

always { ... }

  • 无论 pipeline 执行结果如何,都会执行的操作。

echo 'Build completed.'

  • 打印 "Build completed." 消息。

这个脚本演示了如何使用 Jenkins Pipeline 和用户名密码进行远程部署。它包含了从代码仓库拉取代码、连接到远程服务器、执行部署命令等步骤,并使用了 Jenkins 凭据插件来安全地管理用户名和密码。

5、发布和验证

保存脚本后,选择立即构建,完成发布。

打开远程服务器的url,查看是否发布成功。如我发布的服务器地址:http://8.134.88.134/hello/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/575681.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构:初识集合框架

目录 1. 什么是集合框架2. 集合框架的重要性3. 背后所涉及的数据结构以及算法3.1 什么是数据结构3.2 容器背后对应的数据结构3.3 相关java知识3.4 什么是算法 1. 什么是集合框架 官方教程 Java 集合框架Java Collection Framework ,又被称为容器和其实现类classes …

记一次JSON.toJSONString()转换时非属性方法空指针异常排查及toJSONString保留null值属性

记一次JSON.toJSONString()转换时非属性方法空指针异常排查及toJSONString保留null值属性 异常详情 有一个类,里面有两个属性和一个类似工具的getRealName()方法如下: getRealName()方法就是获取这个人的真实名字,如果获取不到就以name返回…

janus模块介绍-SIP Gateway

模块启动 默认的SIP GateWay也是https协议,端口为8088或者8089 如果需要在自己搭建的测试服务上测试SIP GateWay模块,则也需要修改为wss 具体改动如下: 找到/opt/janus/share/janus/demos/siptest.js var server "wss://" window.location…

Python与数据库连接

新建表boss create table 创建表 Code import pymysqlcon pymysql.connect(hostlocalhost,\userroot,\password,\port3306,\dbbusiness) cursorcon.cursor() cursor.execute(create table if not exists boss(id int auto_increment primary key,name varchar(20)not null…

打包的意义 作用等前端概念集合 webpack基础配置等

基础网页是什么? 在学校最基础的三剑客 原生JS CSS H5就可以开发静态网页了 对于浏览器而言也能识别这些基础的文件和语法,真正的所见即所得,非常直接。 为什么要使用框架库? 对于常用的前端框架而言,无论是Vue Rea…

什么样的内外网文档摆渡,可以实现安全高效传输?

内外网文档摆渡通常指的是在内网(公司或组织的内部网络)和外网(如互联网)之间安全地传输文件的过程。这个过程需要特别注意安全性,因为内网往往包含敏感数据,直接连接内网和外网可能会带来安全风险。因此会…

为什么深度学习模型在 GPU 上运行得更快:CUDA 编程简介

如今,当我们谈论深度学习时,通常会将其实现与利用 GPU 来提高性能联系起来。 GPU(图形处理单元)最初设计用于加速图像、2D 和 3D 图形的渲染。然而,由于它们能够执行许多并行操作,因此它们的实用性超出了深度学习等应用程序。 GPU 在深度学习模型中的使用始于 2000 年代…

保姆级银河麒麟V10高级服务器离线安装mysql5.7数据库

离线在银河麒麟高级操作系统v10安装mysql5.7 下载mysql5.7 MySQL :: Download MySQL Community Server (Archived Versions) 2、把下载好的包上传到服务器 3、解压 [root1-0001 ~]# cd /data/mysql[root1-0001 mysql]# tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz…

Beego框架学习:深入指南

文章目录 Beego框架学习:深入指南安装与设置创建控制器自定义路由使用中间件使用模板引擎使用ORM Beego框架学习:深入指南 Beego是一个快速开发Go语言应用的开源框架,它基于MVC模式设计,提供了一系列的工具和库,使得开…

C++ 之 string类的模拟实现

这学习我有三不学 昨天不学,因为昨天是个过去 明天不学,因为明天还是个未知数 今天不学,因为我们要活在当下,我就是玩嘿嘿~ –❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀-正文开始-❀–❀–…

Docker基础学习(3.Docker架构)

⭐ 作者简介:码上言 ⭐ 代表教程:Spring Boot vue-element 开发个人博客项目实战教程 ⭐专栏内容:个人博客系统 ⭐我的文档网站:http://xyhwh-nav.cn/ ⭐微信公众号:码上言 文章目录 Docker基本概念1、镜像&…

JavaWeb-自学JSP组件报告

自学JSP组件报告 一、组件资源及作用 1. commons-fileupload-1.2.2.jar 组件作用:用于处理HTTP文件上传请求,提供了文件上传的解析和存储功能。它允许开发者在Web应用中轻松实现文件上传功能。 2. commons-io-2.4.jar 组件作用:提供了一…

springboot+vue新疆肉牛智慧牧场养殖系统

系统涉及的对象是奶牛。 系统使用员工有管理员和普通员工。 管理员有修改的权限,普通员工没有。 系统需要包含奶牛的编号,种类,体重,健康情况、生长情况、牛奶产量,以及上次更新数据时间等信息,管理员可以对…

Perfect Clear WorkBench 智能修图黑科技,你尽管拍剩下的交给我(v4.6.0.2653)

01 Perfect Clear Perfect Clear WorkBench是EyeQlmaging推出的先进图片处理工具,旨在自动优化和简化图像校正。它通过智能技术提高图片的清晰度、颜色保真度,并增强视觉效果,确保高品质输出。 它的核心优势是利用高级算法和AI技术&#xff…

第59篇:创建Nios II工程之控制LED<一>

Q:还记得第1篇吗?设计简单的逻辑电路,控制DE2-115开发板上LED的亮与熄灭,一行Verilog HDL的assign赋值语句即可实现。本期开始创建Nios II工程,用C语言代码控制DE2-115开发板上的LED实现流水灯效果。 A:在…

win下安装desktop及使用desktop安装k8s

1、下载desktop安装包 Docker Desktop: The #1 Containerization Tool for Developers | Docker 2、点击exe文件进行安装 3、安装完需要在启用或关闭windows功能中勾选如下三个选项 4、在desktop中配置Docker Engine { "registry-mirrors": [ "https:/…

Linux创建YUM仓库

在rhel-8.5中的/mnt/目录下是有AppStream和BaseOS这两个软件包的,里面有可安装的一些软件。 /mnt/BaseOS/Packages/ 普通安装 1.使用rpm命令安装(rpm -i 程序名称) 查看,已经有了这个程序(rpm -qa | grep 程序名&…

Footprint Analytics 与 GalaChain 达成战略合作

​ Footprint Analytics 宣布与 GalaChain 达成战略合作。GalaChain 是 Gala 旗下的 Layer 1 区块链。此次合作标志着双方在游戏(包括 Gala Games) 、娱乐和金融等多个行业的区块链生态系统革新方面迈出了重要的一步。 GalaChain 致力于满足企业级项目的广泛需求&…

【电路笔记】-Colpitts振荡器

Colpitts振荡器 文章目录 Colpitts振荡器1、概述2、基本Colpitts 振荡器电路3、示例14、使用运算放大器的Colpitts振荡器5、总结Colpitts 振荡器设计使用两个中心抽头电容器与并联电感器串联,形成产生正弦振荡的谐振储能电路。 1、概述 在许多方面,Colpitts 振荡器与我们在上…

GO语言写Prometheus自定义node-exporter的Docker容器测试

1. 安装docker-compose 执行以下命令,安装docker-compose到CentOS7.9环境中: # 下载二进制文件 sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.7/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/d…