热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pythonpipeline转jenkins_Jenkins:创建第一个Pipeline

流水线视图可以很直观地看到每一步执行的时间和进度,方便追踪部署过程中的每一个环节。搭建jenkins参考上一篇文章工作流本文目的是搭建一个简单的pipeline

bVbm4ca?w=815&h=218

流水线视图可以很直观地看到每一步执行的时间和进度,方便追踪部署过程中的每一个环节。

搭建 jenkins 参考 上一篇文章

工作流

本文目的是搭建一个简单的 pipeline,当 git 仓库有提交时,builder server 进行构建和测试,完成之后 deploy server 进行部署。

本地 -> SCM: 提交代码

SCM -> Build Server: 触发 jenkins 任务

Build Server: 启动 pipeline

Build Server -> Deploy Server: 部署服务

SCM Source Code Management,如 github

Build Server jenkins 所在机器,负责构建

Deploy Server 线上服务所在机器

新建 Task

首先创建一个 Task,然后选择流水线模板

bVbm4l1?w=256&h=145

bVbm4l5?w=1919&h=920

配置

Pipeline

bVbm4uN?w=1440&h=431

在这里可以配置 pipeline 的脚本,definition 可以选择 Pipeline script 或 Pipeline script from SCM。

选择前者后,jenkins 脚本需要在下方填写,当任务启动后,jenkins 会执行这里配好的命令;选择后者后,任务启动后,jenkins 会去执行 SCM 仓库下配置的 script path 下的脚本。

一句话说,两者区别在于脚本是写在 jenkins 配置里,还是写在你的代码仓库里。所以修改脚本的时候在 jenkins 里配就行,方便调试,没问题之后使用 SCM 管理更好。

编写 pipeline script

以 node 服务举例,部署过程分为四步:

Build: 在 build server 上 npm install

Test: 在 build server 上进行测试

Deploy: 在 deploy server 上部署

这个脚本如下,需要将 [user] 和 [ip] 替换成 deploy server 的登录用户和 ip:

pipeline {

agent any

stages {

stage('Build') {

steps {

sh "npm install"

}

}

stage('Test') {

steps {

sh "npm test"

}

}

stage('Deploy') {

steps {

sh """

ssh -o stricthostkeychecking=no [user]@[ip] "

source /etc/profile

cd /root/projects/my-api-server

git pull

npm install

pm2 reload wool-digger-api

"

"""

}

}

}

}

当然这是一个很粗糙的构建方式,可以稍后查看 使用 docker 进行改造。

主要概念有

agent 指示 Jenkins 分配一个执行器和工作空间来执行下面的Pipeline

stage 表示这个 Pipeline 的一个执行阶段,对应流水线中各个环节

steps 表示在这个 stage 中每一个步骤

sh 命令用来执行一条 shell 语句。 这个配置文件被执行后:

首先 jenkins 会在工作区(一般来说在 ~/.jenkins/workspace/)下拉取配置仓库指定分支的代码

pull 成功后进行 npm install(Build)

build 成功之后进行 npm test(Test)

test 成功后远程执行一段脚本,即登录 deploy server 并 cd 到服务目录,然后进行服务的更新重启操作。

npm/pm2 not found 的问题

注意上面 Deploy 中有一行 source /etc/profile,这是 login shell 和 no-login shell 的不同。

如果使用 ssh 登录再执行命令和脚本,用户会获得 login shell,shell 首先会加载 /etc/profile 文件,然后依次尝试 ~/.bash_profile、~/.bash_login 和 ~/.profile。

而如果直接使用 ssh 远程执行命令和脚本,如上面的 ssh -o,它不会去执行 /etc/profile 文件,而会去用户的 HOME 目录检查 .bashrc 并加载。所以在 /etc/profile 中设置的 path 不会生效。如果 nvm 在此文件中,那么 node、npm、pm2 等等就找不到了。

解决方法可以在 shell 脚本中先手动加载配置文件。

Build Triggers

bVbm4pg?w=1472&h=363

在这里可以配置 pipeline 触发的类型

Github hook trigger fro GITScm polling

启动该项后可以通过 GitHub 的 webhook 来触发,参考 Github Plugin 文档

这里说一下最简单的配置,即手动配置。

在 Jenkins -> 系统管理 -> 系统设置中,可以找到 Git 配置,点击右边的问号按钮,可以看到默认的 jenkins hook 地址。

bVbm5VD?w=404&h=423

bVbm5Wx?w=1556&h=230

一般来说默认都是 $JENKINS_BASE_URL/github-webhook/。拿到这个地址后,添加到 github 的 webhook 中。

bVbm5WL?w=1043&h=357

注意 这个地址是没有项目信息的,因为 github 调用这个 hook 地址时,会把仓库信息传过去,所以就只剩在 jenkins 中把 pipeline 和这个 git 仓库关联起来。这需要在 pipeline 中选择 Pipeline script from SCM 并填写 git 地址。

轮询 SCM

启动该项后,jenkins 将定时对 SCM 仓库进行轮询,当仓库有新提交时,会自动触发 pipeline。

Schedule 填写规则与 crond 类似,如 H/5 * * * * 代表每 5 分钟查询一次。详细规则可以点击右边的问号。

启动

点击 立即构建,或去仓库提交一个 commit(如果配置了 github hook),或提交一个 commit 并等待(如果配置了轮询 SCM),然后就能看到我们的第一个 pipeline 启动了!



推荐阅读
  • 在GitHub上克隆vue-element-admin项目时遇到依赖安装错误
    在 GitHub 上克隆 vue-element-admin 项目后,使用 `npm install` 安装依赖时遇到了未知的 Git 错误。具体错误信息为 `npm ERR! code 128`,提示命令执行失败。这可能是由于网络问题、Git 配置不正确或某些依赖包的仓库地址无效导致的。建议检查网络连接、更新 Git 版本并确保所有依赖项的 URL 正确无误。 ... [详细]
  • Git Bash 配置 SSH 免密登录及 Gitee SSH 密钥设置
    本文详细介绍了如何在 Git Bash 中配置 SSH 免密登录,并将生成的 SSH 密钥添加到 Gitee 账户中,以实现无需每次输入密码即可进行代码推送。 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • 本文介绍了如何在GitHub上设置多个SSH Key,以解决原有Key失效的问题,并确保不同项目使用不同的私钥进行安全访问。 ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
  • window下的python安装插件,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文介绍了如何使用Python的Paramiko库批量更新多台服务器的登录密码。通过示例代码展示了具体实现方法,确保了操作的高效性和安全性。Paramiko库提供了强大的SSH2协议支持,使得远程服务器管理变得更加便捷。此外,文章还详细说明了代码的各个部分,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 本文介绍了如何在 Windows 系统上利用 Docker 构建一个包含 NGINX、PHP、MySQL、Redis 和 Elasticsearch 的集成开发环境。通过详细的步骤说明,帮助开发者快速搭建和配置这一复杂的技术栈,提升开发效率和环境一致性。 ... [详细]
  • 本文详细介绍了在 Vue.js 前端框架中集成 vue-i18n 插件以实现多语言支持的方法。通过具体的配置步骤和示例代码,帮助开发者快速掌握如何在项目中实现国际化功能,提升用户体验。同时,文章还探讨了常见的多语言切换问题及解决方案,为开发人员提供了实用的参考。 ... [详细]
  • WinMain 函数详解及示例
    本文详细介绍了 WinMain 函数的参数及其用途,并提供了一个具体的示例代码来解析 WinMain 函数的实现。 ... [详细]
  • Spark与HBase结合处理大规模流量数据结构设计
    本文将详细介绍如何利用Spark和HBase进行大规模流量数据的分析与处理,包括数据结构的设计和优化方法。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
author-avatar
mobiledu2502899157
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有