jenkins+k8s实现自动化部署

时间: 2023-09-22 18:14:10 浏览: 77
可以使用Jenkins与Kubernetes进行自动化部署,具体步骤如下: 1. 在Kubernetes集群中创建一个Jenkins Master Pod和一个Jenkins Slave Pod。 2. 将Kubernetes集群的kubeconfig文件复制到Jenkins Master Pod中。 3. 在Jenkins Master Pod中安装Kubernetes插件,并配置Kubernetes插件的连接信息。 4. 在Jenkins中创建一个Pipeline项目,并编写自动化部署的流水线脚本。 5. 在流水线脚本中,使用Kubernetes插件的API连接Kubernetes集群,并使用Kubernetes部署资源的API创建或更新部署资源。 6. 在Jenkins中配置Webhook,当代码仓库中的代码发生变化时触发自动化部署流水线。 通过以上步骤,即可实现基于Jenkins与Kubernetes的自动化部署。
相关问题

jenkins+k8s+gitlab+harbor实现自动化部署

这是一个非常流行的技术组合,用于实现基于 Kubernetes 的应用程序的自动化部署。下面是一些简要的步骤: 1. 在 Kubernetes 集群中安装 Jenkins,以便可以使用 Jenkins 的构建和部署管道。 2. 配置 Jenkins 以使用 GitLab 作为代码仓库,并设置自动化构建和部署管道。 3. 部署一个 Harbor 镜像仓库,以便可以存储和管理镜像。 4. 配置 Jenkins 容器代理,以便可以在 Kubernetes 集群中构建和部署镜像。 5. 在 GitLab 中配置 Webhook,以便在代码提交时触发 Jenkins 管道。 6. 在 Jenkins 管道中使用 Kubernetes 插件,以便可以使用 Kubernetes API 在集群中部署应用程序。 通过这种方式,您可以实现完全自动化的构建和部署管道,从代码提交到生产部署。

jenkins+k8s +harbor+gitlab实现自动化部署

这是一个非常流行的方案,可以实现完全自动化的CI/CD流程。下面是一些基本的步骤和组件: 1. 在Kubernetes集群中安装Jenkins,可以使用Helm Chart进行安装。Jenkins将作为CI/CD的核心引擎。 2. 集成GitLab和Jenkins,配置Webhook,让GitLab推送代码时触发Jenkins的构建任务。 3. 在Jenkins中配置Pipeline或者Job,使用Jenkinsfile或者DSL Script定义构建、测试、打包、发布等步骤。 4. 将构建好的Docker镜像推送到Harbor私有仓库中,这样可以方便地管理和分享镜像。 5. 配置Kubernetes的Deployment和Service,使用Kubernetes插件在Jenkins中自动部署应用程序。 6. 配置自动化测试和监控,使用Prometheus、Grafana、ELK等工具来监控应用程序的健康状况和性能指标。 通过这个方案,可以实现代码提交到GitLab后,自动化构建、测试、打包、发布到Harbor,最后自动部署到Kubernetes集群中,从而实现完全自动化的CI/CD流程。

相关推荐

Jenkins是一款开源的持续集成工具,它可以帮助开发团队自动化地构建、测试和部署软件项目。在Jenkins中配置Docker插件后,我们可以结合Docker技术来进行自动化部署。Docker是一种轻量级的容器化技术,它可以将应用程序和其依赖的环境打包成一个可移植的容器,方便在不同的环境中部署和运行。 而Kubernetes(简称K8s)是一个开源的容器编排平台,它可以管理和调度Docker容器集群。通过在K8s中创建Pod、Service等资源对象,我们可以实现Spring Cloud项目的自动化部署。 首先,我们可以使用Jenkins的Pipeline功能来编写自动化部署的流水线脚本。流水线脚本可以定义一系列的步骤,包括构建、测试和部署等。在流水线脚本中,我们可以使用Docker插件来创建Docker镜像,并将其推送到Docker仓库。接着,我们可以使用K8s插件来在Kubernetes集群中创建相关的资源对象,如Deployment和Service等。 在自动化部署过程中,我们可以将Spring Cloud项目的源代码与Dockerfile放在一个Git仓库中,并通过Jenkins的Webhook功能来触发自动化部署流水线。当有新的代码提交时,Jenkins会自动拉取最新的代码,并执行流水线脚本。在流水线脚本中,我们可以使用Maven或Gradle等工具来构建和打包Spring Cloud项目。然后,通过Docker插件创建可运行的Docker镜像,并将其推送到Docker仓库。 最后,使用K8s插件在Kubernetes集群中创建相关的资源对象,如Deployment和Service等。通过创建Deployment对象,我们可以定义应用程序的副本数和容器的镜像。通过创建Service对象,我们可以定义应用程序可以访问的网络端口和负载均衡规则。 通过Jenkins、Docker和Kubernetes的自动化部署,我们可以实现Spring Cloud项目的快速、可靠和可重复部署。这种自动化部署的方式可以提高开发效率和部署质量,同时也降低了运维成本和风险。
### 回答1: Jenkins、GitLab和Kubernetes是三个常用的开源工具。它们能够相互协作形成一个完整的构建自动化CI/CD发布流水线。 首先,开发者在GitLab的代码仓库中提交代码,触发GitLab的Webhook,告知Jenkins需要进行构建。 接下来,Jenkins开始执行构建任务,它会拉取GitLab中的代码仓库,并在Kubernetes集群中创建一个构建环境。在构建环境中,Jenkins会进行一些构建工作,如编译代码、运行测试、打包程序等。 当Jenkins构建成功后,它会将构建好的程序镜像推送到Kubernetes上,Kubernetes将在自己的集群中创建一个新的Pod,并将新的程序部署到这个Pod中。当程序运行成功后,Kubernetes自动更新负载均衡器路由。 这样,整个构建自动化CI/CD发布流水线就完成了,从代码仓库提交到程序部署,全部都是自动完成的,可以大大提高开发效率,减少出错的可能性。同时,由于使用了Kubernetes,可以实现水平扩展和高可用性,保证了程序稳定运行。 ### 回答2: Jenkins、GitLab和Kubernetes(k8s)是如今广泛应用于软件开发和部署的热门工具。这三个工具的结合,为软件开发的自动化构建、持续集成和持续交付(CI/CD)提供了更加高效、可靠的方法。 当我们考虑如何将这三个工具集成到一起时,以下是一种建议的CI/CD发布流水线: 1. GitLab仓库维护代码版本控制 GitLab是一个代码托管平台,它提供了完整的Git存储库管理工具,包括代码审查、问题跟踪和持续集成。我们可以在GitLab中设置一个仓库,用于维护我们的应用程序代码。我们的代码将被存储在该仓库中,可以利用GitLab提供的版本控制和分支管理功能方便地进行协作和开发。 2. Jenkins构建应用程序 Jenkins是一个流行的自动化构建工具,它可以与GitLab集成,以便在GitLab存储库的变更上触发自动化构建。Jenkins从GitLab仓库中获取代码并自动构建我们的应用程序。如果构建成功,则可以将构建后的应用程序存储在构建存储库或者将其部署到Kubernetes集群中,否则通知开发者维护代码。 3. 部署到Kubernetes集群 Kubernetes (k8s)是一个开源容器编排管理器,它可以帮助我们管理和部署容器化的应用程序。我们可以将我们的应用程序容器化,并将其部署到Kubernetes集群上,这将为我们提供高可用性、可伸缩性和自动化容器调度等好处。 我们可以使用Kubernetes的K8s自动化部署工具,以通过各种环境阶段(测试、预生产和生产)自动部署容器化应用程序的不同副本,从而完成全面部署。 4. 自动化测试应用程序 在部署应用程序部署之前,应使用不同的测试阶段对其进行测试,包括单元测试、集成测试和端到端测试。在一个CI/CD管道中,我们可以添加多个虚拟机代表不同的测试阶段,来自动化测试应用程序。如果某种类型的测试失败,则将在构建次数的下面进行记录和报警,以便修复应用程序中的问题。 通过使用上述流程,我们可以实现一个自动化构建和部署的CI/CD流水线,从而形成一个协调的工具链集成,使软件开发活动化和规范化。这将为我们提供更高效、可靠的开发和部署环境,从而缩短开发周期、减少对人力的依赖,以及提高应用程序质量和交付速度。同时,我们的代码将始终被版本控制,让我们随时翻查历史,充分发掘之前的知识和经验。 ### 回答3: 现代软件开发过程中,持续集成、持续交付和持续部署成为了不可或缺的重要环节,对于构建自动化 CI/CD 发布流水线,使用 Jenkins、GitLab 和 Kubernetes 是目前主流的选择。 Jenkins 是最经典的自动化构建工具之一,它可以无缝集成 GitLab,实现代码检出、运行测试、打包构建、发布部署等操作。此外,Jenkins 也支持插件化的扩展,可以方便的与第三方工具进行集成并自动化构建。对于 Jenkins,我们需要建立一个 Jenkins 服务器,配置好 GitLab 仓库的访问权限,并在 Jenkins 中配置 WebHook,使其能够接收 GitLab 代码提交的通知触发自动化构建。 GitLab 是一款完整的 CI/CD 工具链,除了支持源码管理、合并请求和协作功能外,还内置了 CI/CD 功能,可以集成测试、构建、发布等自动化流程。与 Jenkins 集成,可以实现更强大的自动化构建和交付流程。我们需要在 GitLab 项目中配置自动化构建流水线,并在相对应的流程中配置 Jenkins 以触发相关的构建、测试和发布操作。 Kubernetes 是一款流行的容器编排及部署工具,可以极大地简化应用程序的部署和扩展。对于自动化构建和交付,Kubernetes 的作用在于将应用程序打包为 Docker 镜像,然后自动部署到云端集群环境中,完成持续部署的流程。我们需要在 Kubernetes 中配置相应的应用程序部署文件,并将其注册到 Kubernetes 集群中,以便实现自动化部署和发布。通常我们需要部署 Kubernetes 应用程序的一个运行环境,如 Harbor 仓库,容器运行时等。 在应用程序的构建和交付过程中,最重要的是持续监测和优化,我们需要使用可视化和统一的工具来监测应用程序的性能和健康状况。对于这个目的,我们可以选择一些可视化的 APM 工具,如 New Relic,将其集成到我们的 CI/CD 流程中,以监测和优化应用程序的性能。此外,我们也可以使用一些 CI/CD 管理平台,例如 Jenkins X,来简化整个流程,并提供一个更全面的工具来监测和管理应用程序的构建和交付流程。 总之,构建自动化 CI/CD 发布流水线是现代软件开发的必要环节,使用 Jenkins、GitLab 和 Kubernetes 可以大大简化这个过程,提高开发流程的自动化和效率。
Jenkins、GitLab和Kubernetes(简称k8s)是现代软件开发中常用的工具和技术,用于实现持续集成(CI)和持续部署(CD)流水线。 Jenkins是一个开源的自动化服务器工具,提供了丰富的插件和集成能力。它可以根据代码提交或定时触发构建和部署任务,并提供了丰富的报告和可视化界面用于监控和分析构建过程的状态。Jenkins还支持多个环境的部署,可以用于构建、测试和发布软件。 GitLab是一个基于Git的源代码管理平台,它提供了Git仓库的托管服务和代码协作功能。同时,GitLab还集成了CI/CD功能,允许在代码提交到仓库时自动触发构建和部署流水线。可以配置GitLab与Jenkins进行集成,使得代码提交后可以自动触发Jenkins的构建任务。 k8s是一个开源容器编排平台,用于管理和自动化容器化应用程序的部署、扩展和操作。k8s提供了强大的资源调度和管理能力,可以帮助开发人员将应用程序部署到不同的环境中,并按需扩展或回收资源。在CI/CD流水线中,k8s可以用于部署和运行构建好的应用程序,确保在不同环境中的一致性。 综上所述,Jenkins、GitLab和k8s组合可以实现一个完整的CI/CD流水线。当代码提交到GitLab时,GitLab可以触发Jenkins的构建任务。Jenkins可以根据需要进行构建、测试和部署。最后,k8s可以将构建好的应用程序部署到不同环境中运行。这个流水线可以实现自动化的构建、测试和部署,并提供了监控和报告功能,提高了开发效率和软件质量。
Jenkins是一个非常流行的持续集成和持续部署工具,可以帮助开发团队自动构建、测试和部署应用程序。GitLab是一个代码托管平台,而Kubernetes(简称K8s)是一个用于自动化部署、扩展和管理容器化应用程序的开源平台。 要使用Jenkins自动部署GitLab到K8s,可以按照以下步骤操作: 1. 配置Jenkins环境:首先,需要安装Jenkins并配置好相关插件,例如Kubernetes插件、GitLab插件等。 2. 配置GitLab仓库:在GitLab上创建一个项目,并将项目相关的代码推送到仓库中。 3. 创建Jenkins任务:在Jenkins中创建一个新任务,并选择“构建一个自由风格的软件项目”。在任务配置中,选择Git作为源代码管理工具,并填写GitLab仓库的URL、凭证等信息。 4. 配置构建触发器:可以选择在代码提交后自动构建,或按照计划进行定期构建。 5. 配置构建步骤:在构建步骤中,可以添加Shell脚本或执行命令,用于在K8s中部署GitLab应用程序。可以使用Kubernetes插件提供的API进行部署、扩展和管理Kubernetes资源。 6. 配置部署策略:根据需求,可以配置不同的部署策略,例如通过滚动部署或蓝绿部署来实现零停机更新。 7. 保存并执行任务:保存配置并手动执行Jenkins任务,观察部署过程是否成功。 通过以上步骤,可以利用Jenkins自动部署GitLab到K8s。这样可以大大提高开发团队的生产效率和部署的准确性,减少了手动操作和错误的可能性。同时,还可以通过Jenkins提供的监控和日志功能进行应用程序的实时监控和故障排查。这一整套自动化部署流程对于现代化的软件开发非常重要和必要。
好的,下面我将为你提供一份完整版的 Jenkins Pipeline + Kubernetes 实战教程,用于构建和部署一个简单的 Go 项目。这个项目将使用 Jenkins Pipeline 插件和 Kubernetes 插件,自动化构建、测试和部署 Go 项目到 Kubernetes 集群中。 前置条件: - 你已经安装了 Docker、Kubernetes 和 Jenkins,并且能够正常运行它们。 - 你已经安装了 Go 开发环境,并且熟悉 Go 项目的基本结构和命令。 步骤一:创建 Go 项目 首先,我们需要创建一个简单的 Go 项目,用于演示如何使用 Jenkins Pipeline 和 Kubernetes 构建和部署 Go 项目。假设我们的 Go 项目代码位于 /path/to/project 目录下,项目结构如下: /path/to/project ├── Dockerfile ├── main.go └── Makefile 其中,Dockerfile 文件用于构建 Docker 镜像,main.go 文件是 Go 项目的主要代码文件,Makefile 文件用于构建和测试 Go 项目。 下面是 Dockerfile 文件的内容: FROM golang:1.16-alpine AS build WORKDIR /app COPY . . RUN make build FROM alpine:3.14 COPY --from=build /app/myapp /usr/bin/ CMD ["myapp"] 这个 Dockerfile 文件使用了官方的 Go 1.16 Alpine 镜像作为基础镜像,并将项目代码复制到容器的工作目录 /app 中。然后,它使用 Makefile 文件中的 build 命令编译 Go 项目,并将编译后的二进制文件 myapp 复制到 Alpine 镜像中。最后,它定义了一个容器启动命令 CMD ["myapp"],用于启动 Go 项目。 下面是 main.go 文件的内容: go package main import "fmt" func main() { fmt.Println("Hello, World!") } 这个 main.go 文件非常简单,它只是输出了一个 "Hello, World!" 的字符串。 下面是 Makefile 文件的内容: .PHONY: all build test clean BINARY=myapp VERSION=1.0.0 all: build test build: go build -o $(BINARY) main.go test: go test -v ./... clean: rm -f $(BINARY) 这个 Makefile 文件定义了四个命令:build、test、clean 和 all。其中,build 命令用于编译 Go 项目,test 命令用于运行 Go 项目的测试用例,clean 命令用于清理编译后的二进制文件,all 命令用于同时执行 build 和 test 命令。 步骤二:创建 Kubernetes 集群 接下来,我们需要创建一个 Kubernetes 集群,用于部署 Go 项目。这个集群可以是本地的 Minikube 集群,也可以是云端的 Kubernetes 集群,具体操作方式可以参考 Kubernetes 官方文档。 假设我们已经创建了一个名为 mycluster 的 Kubernetes 集群,并且已经正确配置了 kubectl 命令行工具。我们可以使用 kubectl get nodes 命令来验证 Kubernetes 集群是否正常运行。 步骤三:创建 Jenkins Pipeline 项目 接下来,我们需要在 Jenkins 中创建一个 Pipeline 项目,用于构建和部署 Go 项目到 Kubernetes 集群中。 - 在 Jenkins 中,点击 "New Item" 按钮,选择 "Pipeline" 项目类型。 - 在 "General" 标签页中,填写项目名称和描述信息。 - 在 "Pipeline" 标签页中,选择 "Pipeline script from SCM",并选择 Git 作为 SCM 类型。 - 在 "Repository URL" 中填写 Go 项目的 Git 仓库 URL,选择 "Credentials",填写 Git 仓库的用户名和密码。 - 在 "Script Path" 中填写 Jenkinsfile,这个文件用于定义 Pipeline 脚本。 下面是 Jenkinsfile 文件的内容: pipeline { agent any stages { stage('Build') { steps { sh 'make build' sh 'docker build --tag myapp:latest .' } } stage('Test') { steps { sh 'make test' } } stage('Deploy') { environment { KUBECONFIG = credentials('my-kubeconfig') } steps { sh 'kubectl apply --filename deployment.yaml' } } } } 这个 Jenkinsfile 文件定义了三个阶段:Build、Test 和 Deploy。其中,Build 阶段用于编译 Go 项目,并构建 Docker 镜像;Test 阶段用于运行 Go 项目的测试用例;Deploy 阶段用于部署 Go 项目到 Kubernetes 集群中。 在 Deploy 阶段中,我们使用了 Kubernetes 插件提供的 credentials 函数,从 Jenkins 的凭据库中获取 Kubernetes 集群的配置信息,并将其赋值给 KUBECONFIG 环境变量。然后,我们使用 kubectl apply 命令将 deployment.yaml 文件中定义的 Kubernetes 资源部署到 Kubernetes 集群中。 步骤四:创建 Kubernetes 部署文件 最后,我们需要创建一个 deployment.yaml 文件,用于部署 Go 项目到 Kubernetes 集群中。假设我们的 Kubernetes 集群已经正确配置,deployment.yaml 文件如下: apiVersion: apps/v1 kind: Deployment metadata: name: myapp spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myapp:latest ports: - containerPort: 80 这个 deployment.yaml 文件定义了一个名为 myapp 的 Deployment,它包含了 3 个 Pod,每个 Pod 包含了一个名为 myapp 的容器。容器使用了之前构建的 myapp Docker 镜像,并将容器的 HTTP 端口映射到 80 端口。 步骤五:运行 Jenkins Pipeline 项目 现在,我们可以在 Jenkins 中运行这个 Pipeline 项目,它会自动化构建、测试和部署我们的 Go 项目到 Kubernetes 集群中。 在 Jenkins 项目页面中,点击 "Build Now" 按钮,Jenkins 将会自动触发一个构建过程,按照 Pipeline 脚本中定义的阶段和任务,自动化构建、测试和部署 Go 项目到 Kubernetes 集群中。 如果一切顺利,我们可以使用 kubectl get deployments 和 kubectl get pods 命令来验证 Go 项目是否已经成功部署到 Kubernetes 集群中。 希望这个教程能够帮助你理解如何使用 Jenkins Pipeline 和 Kubernetes 构建和部署 Go 项目。如果你有任何问题或需要进一步的帮助,请随时回复我。

最新推荐

Docker+Jenkins+GitLab+Maven+Harbor+SpringBoot自动化构建

1. Docker+Jenkins+GitLab+Maven+Harbor+SpringBoot自动化构建+Jenkins自动化部署配置 2.无须运维部署 ,而是相关的开发人员,测试人员登录jenkins传入需要部署的tag即可,整个部署过程无须运维参与,解放运维劳动力

数据仓库数据挖掘综述.ppt

数据仓库数据挖掘综述.ppt

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire

springboot新闻信息管理系统开发技术文档更新

# 1. 系统概述 ## 1.1 项目背景 在当今信息爆炸的时代,新闻信息是人们获取信息的重要渠道之一。为了满足用户对新闻阅读的需求,我们决定开发一个新闻信息管理系统,该系统旨在提供便捷的新闻发布、浏览与管理功能,同时也要保证系统的性能和安全防护。 ## 1.2 系统目标与功能需求 系统的目标是构建一个高效、稳定、安全的新闻信息管理平台,主要包括但不限于以下功能需求: - 新闻信息的增加、修改、删除、查询 - 用户的注册、登录与权限控制 - 数据库性能优化与缓存机制实现 - 安全防护措施的设计与漏洞修复 ## 1.3 技术选型与架构设计 在系统设计中,我们选择采用Java

hive 分区字段获取10天账期数据

假设你的 Hive 表名为 `my_table`,分区字段为 `account_date`,需要获取最近 10 天的数据,可以按照以下步骤操作: 1. 首先,获取当前日期并减去 10 天,得到起始日期,比如: ``` start_date=$(date -d "10 days ago" +"%Y-%m-%d") ``` 2. 接下来,使用 Hive 查询语句从分区中筛选出符合条件的数据。查询语句如下: ``` SELECT * FROM my_table WHERE account_date >= '${start_date}' ```

生活垃圾卫生填埋场运营管理手册.pdf

生活垃圾卫生填埋场运营管理手册.pdf

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依

springboot新闻信息管理系统系统与用户功能示范

# 1. 引言 ## 1.1 背景介绍 在当今信息爆炸的时代,新闻信息管理系统对于各类机构和企业来说是至关重要的。它能够帮助用户高效地管理新闻信息,提升信息传播的效率和准确性。随着技术的不断发展,采用先进的技术手段来构建新闻信息管理系统已经成为一种趋势。 ## 1.2 目的和意义 本文旨在通过使用Spring Boot框架构建一个新闻信息管理系统,展示系统的基本功能和用户操作示范。通过这个系统,用户可以实现新闻信息的发布、编辑和管理,同时也可以进行用户权限管理等操作,提高了信息管理的效率和便利性。 ## 1.3 系统概述 新闻信息管理系统主要包括用户管理模块、新闻管理模块和权限管理模块。

python 实现创建一个文件(绝对路径,但是上级目录可能不存在)的代码

可以使用Python内置的os模块来实现创建一个文件(绝对路径,但是上级目录可能不存在)的代码,具体实现如下: ```python import os # 绝对路径 file_path = '/path/to/file.txt' # 获取文件所在目录 dir_path = os.path.dirname(file_path) # 如果文件所在目录不存在,则递归创建目录 if not os.path.exists(dir_path): os.makedirs(dir_path) # 创建空文件 open(file_path, 'w').close() ``` 以上代码通过os

计算机在商业银行审计中应用PPT学习教案.pptx

计算机在商业银行审计中应用PPT学习教案.pptx