作为一名开发与运维之间的“桥梁”,我最近完成了一次从零搭建完整DevOps流水线的项目。这次实践让我感受到自动化、效率提升和版本管理的魅力。通过这篇文章,我希望分享我的具体经验、踩过的“坑”,以及最后成功跑通流水线的那种成就感。如果你也想从零搭建一条属于自己的DevOps流水线,希望这篇文章能给你一些启发。
在开始搭建之前,我问了自己两个问题:
这一步是流水线的起点,每次代码的提交都会触发流水线的运行。我们将项目代码托管在 GitLab 上,并在 Jenkins 中配置了 GitLab 的 Webhook,这样每次有代码推送时都会自动触发构建。
以下是配置Webhook的简单流程:
Webhooks 选项。http://<jenkins_url>/gitlab-webhook/。Jenkins 是整条流水线的大脑,因此配置一个稳定、高效的流水线是关键。以下是我的流水线的核心代码(基于 Jenkinsfile):
pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                // 从Git获取代码
                git branch: 'main', url: 'https://gitlab.com/your_project_repo.git'
            }
        }
        stage('Build') {
            steps {
                // 使用Maven构建项目
                sh 'mvn clean package'
            }
        }
        stage('Test') {
            steps {
                // 运行测试
                sh 'mvn test'
            }
        }
        stage('Docker Build & Push') {
            steps {
                // 构建Docker镜像并推送到仓库
                sh '''
                docker build -t your-docker-repo/your-app:latest .
                docker push your-docker-repo/your-app:latest
                '''
            }
        }
        stage('Deploy to K8s') {
            steps {
                // 使用kubectl部署
                sh '''
                kubectl apply -f k8s/deployment.yaml
                '''
            }
        }
    }
}详细解析:
Docker 的加入为开发和运维环境提供了一致性。以下是我们的 Dockerfile 示例:
FROM openjdk:11
WORKDIR /app
COPY target/your-app.jar your-app.jar
ENTRYPOINT ["java", "-jar", "your-app.jar"]通过这个 Dockerfile,我们将 Java 应用程序打包成了可以随时运行的镜像。
我们创建了一个 Kubernetes 部署文件(k8s/deployment.yaml):
apiVersion: apps/v1
kind: Deployment
metadata:
  name: your-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: your-app
  template:
    metadata:
      labels:
        app: your-app
    spec:
      containers:
      - name: your-app
        image: your-docker-repo/your-app:latest
        ports:
        - containerPort: 8080通过这个文件,我们可以在 Kubernetes 集群中运行两个副本的应用。
从零搭建一条完整的 DevOps 流水线,既是一次技术实践,也是对团队协作的一次提升。自动化的实现不仅减少了人为失误,还让我们的部署频率从每周一次提升到了每天多次。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。