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 anystages {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 = truewithCredentials([usernamePassword(credentialsId: 'sshid', usernameVariable: 'SSHUSER', passwordVariable: 'SSHPASS')]) {remote.user = SSHUSERremote.password = SSHPASSsshCommand remote: remote, command: '''# 停止 Django 服务sudo supervisorctl stop django || true# 清理旧代码并复制新代码到 /opt/HelloWorldsudo rm -rf /opt/HelloWorld/*sudo mkdir -p /opt/HelloWorld'''sshPut remote: remote, from: '.', into: '/opt/HelloWorld'sshCommand remote: remote, command: '''# 配置 Supervisorsudo cp /opt/HelloWorld/django.conf /etc/supervisor/conf.d/django.confsudo supervisorctl rereadsudo 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/

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云原生Kubernetes: K8S 1.29版本 部署ingress-nginx

目录 一、实验 1.环境 2. K8S 1.29版本 部署ingress-nginx 二、问题 1.kubectl 如何强制删除 Pod、Namespace 资源 2.创建pod失败 3.pod报错ImagePullBackOff 4.docker如何将镜像上传到官方仓库 5.创建ingress报错 一、实验 1.环境 (1)主机 表…

学习指导|在改变

备忘在这里啦。潦草本草

css中新型的边框设置属性border-inline

一、概念与背景 border-inline 是 CSS Logical Properties and Values 模块中的一个属性,用于控制元素在流内(inline)方向上的边框。该模块旨在提供与书写模式(writing mode)无关的布局和样式描述方式,使得…

【1429】招生管理管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java 招生管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…

2024年新算法-鹦鹉优化器(PO)优化BP神经网络回归预测

2024年新算法-鹦鹉优化器(PO)优化BP神经网络回归预测 亮点: 输出多个评价指标:R2,RMSE,MSE,MAPE和MAE 满足需求,分开运行和对比的都有对应的主函数:main_BP, main_PO, main_BPvsBP_PO&#x…

抖音 小程序 获取手机号 报错 getPhoneNumber:fail auth deny

这是因为 当前小程序没有获取 手机号的 权限 此能力仅支持小程序通过试运营期后可用,默认获取权限,无需申请; https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/guide/open-capabilities/acquire-phone-number-acqu…

Redis入门到通关之Redis网络模型-用户空间和内核态空间

文章目录 欢迎来到 请回答1024 的博客 🍓🍓🍓欢迎来到 请回答1024的博客 关于博主: 我是 请回答1024,一个追求数学与计算的边界、时间与空间的平衡,0与1的延伸的后端开发者。 博客特色: 在我的…

DevOps(十三)Jenkins之Selenium插件配置

一、Selenium Grid详细介绍 Selenium Grid 是 Selenium 测试套件的一部分,主要用于通过并行执行测试来提高测试执行的速度和效率。它允许您在多个环境(不同的浏览器和操作系统)上同时运行测试,从而帮助在开发过程中快速发现跨浏览…

Github 2024-04-25Go开源项目日报Top10

根据Github Trendings的统计,今日(2024-04-25统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Vue项目1Go编程语言:构建简单、可靠和高效的软件 创建周期:3474 天开发语言:Go协议类型:BSD 3-Clause “New” or “Revised” Lic…

spark3.0.0单机模式安装

注:此安装教程基于hadoop3集群版本 下载安装包 下载spark3.0.0版本,hadoop和spark版本要对应,否则会不兼容 用xftp上传Linux虚拟机,上传目录/bigdata(可修改) 解压 tar -zxvf /bigdata/spark-3.0.0-bin-h…

背包问题汇总

本文涉及知识点 动态规划汇总 状态机dp 01背包 有n件物品,体积分别是v[i],价值分别是w[i],有个包的容积是bv。如何选择物品使得,在总体积不超过vb的前提下,让总价值最大。 动态规划的状态表示 dp[i][j] 表示处理完…

CentOS 7.9.2009 中 Docker 使用 GPU

一、安装nvidia驱动 1.1,查看显卡驱动 # 查看显卡型号 lspci | grep -i nvidia 1.2,进入 PCI devices ,输入上一步查询到的 2204 1.3,进入 官方驱动 | NVIDIA,查询 Geforce RTX 3090 驱动并下载 1.4,禁用…

冯老师降维打击申论课

冯老师降维打击申论课,以其独到的见解和精湛的教学技巧,将复杂的申论知识变得简单易懂。通过深入浅出的讲解,帮助考生迅速掌握申论精髓,轻松应对考试。课程内容丰富实用,深受考生好评,是备考申论的不二之选…

【SQL代理中转注入】对DVWA登录界面username字段实施注入

一、实验过程 步骤0:注释掉相关username防护,截图如下: 以DVWA为攻击目标,将login.php中第21、22行注释掉 步骤1:源码分析,截图如下: 如此可知,首先需要通过token验证,然…

CTFHub(web sql)(四)

Cookie注入 Cookie 注入的原理也和其他注入一样,只不过是将提交的参数已 Cookie 方式提交,而一般的注入是使用 GET 或者 POST 方式提交,GET 方式提交就是直接在网址后面加上需要注入的语句,POST 方式则是通过表单,GET …

feign整合sentinel做降级知识点

1&#xff0c;配置依赖 <!-- Feign远程调用依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency> <!--sentinel--><dependency>…

【数据结构(邓俊辉)学习笔记】向量04——有序向量

文章目录 0.概述1.比较器2.有序性甄别3.唯一化3.1低效算法3.1.1实现3.1.2 复杂度3.1.3 改进思路3.2 高效算法3.2.1 实现3.2.2 复杂度 4.查找4.1统一接口4.2 语义定义4.3 二分查找4.3.1 原理4.3.2 实现4.3.3 复杂度4.3.4 查找长度4.3.5 不足 4.4 Fibonacci查找4.4.1 思路及原理4…

【03-掌握Scikit-learn:深入机器学习的实用技术】

文章目录 前言数据预处理缺失值处理数据缩放特征选择模型训练参数调整模型评估总结前言 经过了对Python和Scikit-learn的基础安装及简单应用,我们现在将更深入地探究Scikit-learn的实用技术,以进一步提升我们的数据科学技能。在本文中,我们将涵盖数据预处理、特征选择、模型…

Qt中的 tableView 设置 二进制 十六进制 序号表头

二 进制序号 因为QTableView的垂直表头并不支持使用委托来自定义。 相反&#xff0c;可以通过将自定义的QWidget作为QHeaderView的标签来实现这一目标。 代码&#xff1a; #include <QApplication> #include <QMainWindow> #include <QVBoxLayout> #include …

企业微信hook接口协议,根据手机号搜索联系人

根据手机号搜索联系人 参数名必选类型说明uuid是String每个实例的唯一标识&#xff0c;根据uuid操作具体企业微信 请求示例 {"uuid":"3240fde0-45e2-48c0-90e8-cb098d0ebe43","phoneNumber":"1357xxxx" } 返回示例 {"data&q…