利用ChatGPT最大程度地提高您的DevOps生产力

像ChatGPT这样的AI引擎有可能改变我们实践DevOps的方式。在这篇博客中,我们对ChatGPT进行了测试,看看它如何应对真实世界的DevOps用例和策略。

利用ChatGPT最大程度地提高您的DevOps生产力

像ChatGPT这样的AI引擎有可能改变我们实践DevOps的方式。在这篇博客中,我们对ChatGPT进行了测试,看看它如何应对真实世界的DevOps用例和策略。

最近一段时间,如果你一直活跃在社交媒体上,你一定注意到围绕ChatGPT的大量讨论。由OpenAI开发的高级语言生成模型在技术爱好者、开发者和AI专家中引发了很大的兴趣。这是因为它有能力理解和生成类似人类的文本,使其成为许多技术的宝贵工具。

一些专家认为,ChatGPT可以彻底改变我们与计算机和机器的互动方式,使它们更加自然和直观。这导致了社交媒体上对AI驱动技术的大量讨论和兴奋。在这篇博客中,我们将研究ChatGPT的使用如何简化DevOps的过程。

什么是ChatGPT

ChatGPT是OpenAI开发的一个超火爆的AI模型,能够理解并生成对话背景下的人类语言。作为GPT-3模型的一个变种,它使用基于神经网络的语言生成技术来产生密切模仿人类自然语言的文本。凭借其理解和响应人类语言的能力,ChatGPT有可能彻底改变我们与技术互动的方式,使其更加直观和自然。

为了简单地理解这个概念,想象一下与一个知道一切的人交谈,他能像另一个人一样自然地理解和回应你。这就是ChatGPT的作用,但它是一个计算机程序,而不是一个人。它可以理解并生成类似人类语言的文本,并以模仿人类对话的方式作出回应。你可以把它看作是一个能够理解并以对话方式回应你的人的计算机化版本,例如在聊天机器人或虚拟助理中。

什么是DevOps

DevOps是一种结合了实践、方法和工具的整体方法,以改善开发和运营团队之间的协作、沟通和整合。

开发团队编写代码,管理和维护公司系统的人组成了运营团队。DevOps的目的是通过自动化和精简流程以及培养协作和沟通的文化,使软件和应用程序的交付更快、更高效。

这可以包括持续集成、持续部署和基础设施即代码,等等。通过实施DevOps,企业可以提高软件交付的速度和质量,减少停机时间,并提高系统的整体性能。

现在,让我们看看一些典型的DevOps用例,看看ChatGPT能提供什么帮助。

问题#1:自动化

如上所述,自动化是DevOps的核心。作为一个例子,我们现在尝试利用ChatGPT的功能来自动化一项任务。在这个例子中,我们希望写一个自动化流程,可以使用BASH shell脚本重新启动一个托管在多个虚拟机(VM)的服务。

Prompt:

“We have multiple VMs hosted on GCP compute engine where some service named application.service runs on all the machines. The VM IPs are stored in a file. I need a shell script that connects to each VM using a username and its private key. The script should then restart application.service on all VMs.”

ChatGPT的回复:

这里有一个基本的shell脚本,应该可以完成你所描述的内容:

#!/bin/bash    
# Read in the IP addresses of the VM instances   
while read ip; do   
  # Utilize the IP address to establish a connection to the VM via SSH   
  ssh -i /path/to/private_key -o StrictHostKeyChecking=no \  
    username@$ip "sudo systemctl restart application.service"   
done < path/to/ip_file

脚本从一个文件(由path/to/ip_file指定)中读取虚拟机实例的IP地址,对于每个IP,它使用私钥(/path/to/private_key)和你指定的用户名通过SSH连接到虚拟机。然后它在远程机器上执行sudo systemctl重启application.service。

另外,确保在私钥上设置正确的权限,以保护私钥不被任何未经授权的访问。它应该是运行脚本的用户可以读和写的,但其他用户不能访问。

你可以根据你的基础设施的要求来改变ssh连接标志。

问题#2:为单行命令/查询设置框架

DevOps工程师在不同的情况和背景下使用命令行界面(CLI)来完成手头的多项任务,但为你的使用情况获得正确的命令可能是令人生畏的。让我们看看ChatGPT是否能使之更快。

Prompt:

“I need a command to list all the instances in GCP and only pull the instances starting with ‘prod’ and ending with the keyword ‘service’. “

ChatGPT的回复:

你可以使用gcloud compute instances list命令和-过滤标志来按名称过滤实例,只列出名称以 “prod “开头,以 “service “结尾的实例。

gcloud compute instances list --filter="name ~ '^prod.*service$'"

Prompt:

“OpenShift command to patch the HPA of a particular namespace.”

ChatGPT的回复:

你可以使用oc patch命令来更新OpenShift中的Horizontal Pod Autoscaler(HPA)。该命令应该在HPA所在的命名空间的上下文中运行。

下面是一个如何使用oc patch命令来更新HPA的例子:

oc patch hpa [HPA_NAME] -p='{"spec":{"minReplicas": [NEW_MIN_REPLICA], "maxReplicas": [NEW_MAX_REPLICA]}}' -n [NAMESPACE]

这样,你就可以为多种情况构建命令或查询,使你的工作更快。

问题#3:开发CI/CD流水线代码

构建CI/CD管道是一项典型的DevOps工程师实施任务。根据所涉及的复杂程度,可能需要几个小时到几天的时间来完成这个构建。让我们要求ChatGPT构建一个简单的CI/CD流水线和相关代码。

图片1显示了我们希望创建的简单构建管道的图示。

Prompt:

“I need Jenkins declarative pipeline code to clean up the app workspace, check out the code from GitHub, and build it using Maven.”

ChatGPT的回复:

下面是一个Jenkins声明式管线的例子,它执行工作区清理,从GitHub仓库检查出代码,并使用Maven构建代码。

pipeline {   
 
    agent any   
 
    stages {   
 
        stage('Cleanup') {   
 
            steps {   
 
                dir("app") {    
 
                    deleteDir()    
 
                }   
 
            }   
 
        }    
 
        stage('Checkout') {   
 
            steps {   
 
                git branch: 'master',   
 
                     url: 'https://github.com/[OWNER]/[REPO].git',   
 
                     dir: 'app'   
 
            }   
 
        }   
 
        stage('Build') {   
 
            steps {   
 
                sh 'mvn clean install -f app/pom.xml'   
 
            }   
 
        }   
 
    }   
 
}

该流水线定义了一个具有三个阶段的单一流水线块: 清理”、”签出 “和 “构建”。在运行该流水线之前,你必须确保Maven和JDK在你的Jenkins环境中已正确安装和配置。如果需要,你还可以向Maven传递额外的命令行参数来配置构建。

您可以通过要求对给定的代码进行额外的定制,使之更具有对话性。以下是对话的流程。

Prompt:

“In the above code, use the Jenkins agent with the label SLAVE01, and for tools, use Maven. The build should be discarded in 15 days and the number of builds maintained should be only 10. Pass the environment variables such as ‘app_name’ as ‘test-app’ and ‘env’ as ‘test.’ Clean up the workspace using ‘cleanWs()’ and print a message saying that the workspace is cleaned. Update the GitHub URL to ‘https://github.com/SrikanthNani/spring-framework-petclinic.git.’ In Maven, only install and skip the test. In a separate stage, print all the global variables.”

ChatGPT的回复:

下面是一个Jenkins声明式管道的例子,它执行工作区清理,从GitHub仓库中检出代码,使用Maven构建代码,丢弃旧的构建并保持10个构建的限制,设置环境变量并打印全局变量:

pipeline {   
 
    agent {   
 
        label 'SLAVE01'   
 
    }   
 
    options {   
 
        buildDiscarder(logRotator(numToKeepStr: '10',   
            artifactNumToKeepStr: '10', daysToKeepStr: '15'))   
 
        timestamps()   
 
    }   
 
    tools {   
 
        maven 'M3'   
 
    }   
 
    environment {   
 
        app_name = "test-app"   
 
        env = "test"   
 
    }   
 
    stages {   
 
        stage('Cleanup') {   
 
            steps {   
 
                echo 'Cleaning workspace...'   
 
                cleanWs()   
 
            }   
 
        }    
 
        stage('Checkout') {   
 
            steps {   
 
                git branch: 'master',   
 
                     url: 'https://github.com/SrikanthNani/spring-framework-petclinic.git',   
 
                     dir: 'app'   
 
            }   
 
        }   
 
        stage('Build') {   
 
            steps {   
 
                sh 'mvn clean install -DskipTests -f app/pom.xml'   
 
            }   
 
        }    
 
        stage('Print Global Variables') {   
 
            steps {   
 
                script {   
 
                    echo "Environment variables: ${env}"   
 
                }   
 
            }   
 
        }   
 
    }   
 
}

在该管道中,代理块指定管道应在标签为 “SLAVE01 “的Jenkins代理上运行,工具块用于指定maven “M3”。选项块用于丢弃旧的构建,并使用buildDiscarder()函数只保留10个构建。环境块用于设置app_name和env环境变量。cleanWs()方法用于清理工作区,并打印消息以示说明。在签出阶段,git步骤用于从url中指定的GitHub仓库签出代码,目录被设置为app。在构建阶段,命令mvn clean install -DskipTests -f app/pom.xml用于使用Maven构建代码并跳过测试。在打印全局变量阶段,通过使用脚本块打印所有全局变量,并回显 “环境变量:${env}”

请记住,这条管道只是一个例子,您可能需要对其进行调整,以适应您构建的具体需要。

你可以继续在Jenkins中创建一个流水线作业,并利用上述声明性的流水线脚本。此外,你可以确保在Jenkins中完成所有必要的配置,比如在 “全局工具配置 “下设置Maven等等。

另一种可能性是让ChatGPT产生在任何云平台上配置虚拟机所需的Terraform代码,或创建Ansible代码以自动进行配置管理。正如我前面所说,可能性是无穷的。

问题#4:要求提供工具建议以解决一个具体问题

假设我们需要创建一个Kubernetes集群的备份。虽然市场上的各种工具可能会满足这一要求,但要确定最佳方案可能需要时间。在这种情况下,我们可以利用ChatGPT的能力,为我们提供这方面的最佳工具建议,并评估这项任务的推荐最佳做法。

Prompt:

“What is the best tool to back up a Kubernetes cluster? “

ChatGPT的回复:

选择对Kubernetes集群进行备份的最佳工具最终取决于你的组织的具体需求和要求。也就是说,Velero被认为是目前备份Kubernetes集群的最佳工具之一。

Velero是一个开源的备份和灾难恢复工具,为备份和恢复你的Kubernetes集群、其相关卷和应用程序提供了一个简单的方法。Velero的功能包括支持各种云供应商、各种卷插件和做应用一致的备份的能力。它还可以处理Kubernetes命名空间、资源和单个资源。

Velero允许你备份整个Kubernetes集群或特定命名空间,甚至单个对象,如单个pod或特定PVC。Velero还集成了各种云供应商,并支持各种体积插件,使其成为备份集群的多功能和灵活选择。

此外,Velero支持调度和保留策略,并能够按需或按计划运行备份和恢复。

Restic、KubeVault、ClusterControl和ArgoCD是其他一些可以考虑用于备份Kubernetes集群的流行工具。最终,最适合你的工具将取决于你的具体要求和可用资源。值得研究和测试几个选项,以找到最适合你的使用情况。

值得注意的是,ChatGPT仍处于早期阶段。目前的版本,即ChatGPT-3,是使用截至2021年的数据在1750亿个参数上进行训练,并且没有连接到互联网。ChatGPT-4准备很快推出,正在对100万亿个参数进行训练。它可以从一个输入提示中生成一本60,000字的书。由于内置了所有这些智能,它是一个游戏规则的改变者。它甚至可以彻底改变我们目前使用的许多技术和框架。

图片2对比了用于训练ChatGPT-3和ChatGPT-4的数据量、