---
title: "DevSecOps 服务与安全 CI/CD"
canonical: https://wavect.io/zh/services/devsecops/
language: zh
description: "通过明确的权限、安全检查和发布证据改进软件交付。Wavect 评估约定的流程，实施控制措施，并复测其实际行为。"
image: "https://wavect.io/img/general/bak/open_graph_preview.jpg"
---

DevSecOps

# 让团队能够核验软件发布过程的 DevSecOps 服务。

弄清一项变更如何从代码仓库进入生产环境、谁能批准，以及哪些检查能够阻止发布。我们评估约定的交付路径，实施优先控制措施，并交付验证记录和操作说明。

合作范围

## 一条交付路径。明确的控制。由你掌握的证据。

1. **梳理路径** 确认仓库、构建任务、身份和部署目标。
2. **实施控制** 在你的代码与配置中落实优先变更。
3. **验证并交接** 记录预期拦截、允许的发布、例外和负责人。

服务概要

DevSecOps 将安全控制纳入软件构建和发布流程。本服务覆盖约定的代码仓库、构建任务、制品和部署权限，交付实际变更及其行为验证记录。

适合这些情况

- 发布检查缺失、不一致或容易被绕过的产品团队
- 需要针对明确范围获得实施支持的现有工程团队

其他服务可能更合适

- 需要收回访问权限并继续开发的供应商交接
- 持续功能测试，或另行约定范围的渗透测试

## 从承载关键发布风险的路径开始

选择一个有代表性的代码仓库和发布流程，记录谁能修改代码、调整检查、批准发布和部署制品。使用 AI 辅助开发时，这些职责更需要明确；人工编写的变更同样适用。运行中的基础设施由 [云安全服务](/zh/services/cloud-security/) 负责，AI 应用内部的数据和操作权限由 [AI 安全服务](/zh/services/ai-security/) 负责。把工作负载迁到新环境属于 [云迁移](/zh/services/cloud-migration/) 。

## 建立团队能够持续操作的检查机制

根据系统的实际风险选择控制。每项检查都应有负责人、清晰的失败提示和处理流程。安装扫描工具本身并不等于完成交付。

仓库和发布权限

检查角色范围、受保护的变更、审批路径，以及自动化流程如何获得部署权限。

依赖与密钥

根据实际技术栈选择静态应用安全测试（SAST）、依赖分析（SCA）、密钥、容器和基础设施即代码检查。评估发现的问题，并记录有明确范围的例外。

构建与制品证据

记录约定发布所使用的源代码版本、构建配置和制品。按平台能力确定来源追踪或验证工作的范围。

部署与回退

明确环境隔离、发布条件和受支持的回退流程，在适当环境中验证约定步骤。

## 示例验收：被拦截的发布不能继续部署

在隔离的测试分支中，用无害测试样例触发一条约定的发布规则。检查失败，部署步骤保持阻断。修正后，同一路径按预期完成。记录包括提交、工作流版本、环境、预期与观察结果，以及限制。这是验收方式的示例，不是客户成果，也不能证明系统不存在其他漏洞。

## 先评估，再实施，并按约定持续复核

每个阶段开始前确认范围和报价。你的团队可以自行采用评估结果，也可以委托我们实施约定的改进。

1. **评估** - 获得交付清单、已确认的问题、检查缺口和按优先级排列的控制计划。
2. **实施与复测** - 获得约定的工作流及配置变更、验证记录、例外管理流程和交接说明。
3. **持续复核** - 另行约定仓库范围、复核频率、变更边界和响应责任，不因此产生全天候支持或可用性 SLA。

## 准备环境信息和有权批准变更的负责人

需要明确仓库与 CI 范围、部署目标、现有检查、已知问题、测试环境及验收负责人。只读访问和生产变更是不同权限。平台支持在范围确认时核实。在平台支持的情况下， [通过 OIDC 获取短期部署凭据](https://docs.github.com/en/actions/concepts/security/openid-connect) 可以减少对长期云密钥的依赖，但其信任条件仍需审查。

## 保留实施成果，并按需要引入专业能力

约定变更和操作说明保存在你的仓库中。 [Souhail Mssassi](/zh/experts/souhail-mssassi/) 等专家是否参与，由具体项目范围决定；其在过往雇主处的工作仍归属于其个人履历。如果当前任务仅涉及一个符合条件的依赖系列，可查看现有的 [限定范围依赖升级服务](/zh/services/software-takeover/#dependency-upgrade) 。原有前提和条款保持不变。 [信任中心](/zh/trust-center/) 说明我们的交付责任和服务水平。

// 实证

## 现有工程项目中的交付控制实践

Polity 案例记录了按服务设置的 CI 门禁、发布自动化和 CI/CD 加固。它证明的是公开描述的工程工作，不代表认证，也不保证其他系统取得相同结果。

### [Polity](/zh/case-studies/polity/)
- **状态:** 上线
- **成果:** 7个服务 - 统一测试
- **概要:** 1.5 年在七个服务和多个供应商上拥有 QA。每一次重构后质量都依然可发布。
- **技术栈:** React, Java/Kotlin, Go

这些是精选项目，并非我们的全部作品。自 2018 年以来我们已交付 100+ 款产品。

## 开始前的常见问题

### DevSecOps 能替代渗透测试吗？

它改进约定的软件交付控制。对应用或基础设施进行对抗性评估需要不同的范围，应另行委托。通用 QA 服务不会因此自动包含完整渗透测试。

### 可以与我们现有的团队一起工作吗？

可以。我们会约定谁修改配置、审查问题和验收成果。仓库与部署环境仍由你的团队掌握。

### 支持哪些构建平台？

承诺范围前会审查平台、权限和部署目标。方案中会列出包含的系统与控制措施。

### 扫描工具误报时如何处理？

我们核查问题并记录决定。例外需要说明原因、负责人和复核或到期时间。默默关闭检查不是可持续的操作流程。

### 能否先从一个仓库开始？

可以，前提是它包含有代表性的交付路径。共用执行器、凭据和部署依赖仍需识别，以明确服务边界。

## 选择下一步

- [加固运行中的基础设施](/zh/services/cloud-security/)
- [独立验证每次发布](/zh/services/software-quality-assurance/)
- [规划软件供应商交接](/zh/services/software-takeover/)

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/zh/services/devsecops/#service",
      "@type": "Service",
      "areaServed": [
        {
          "@type": "Country",
          "name": "Austria"
        },
        {
          "@type": "Place",
          "name": "Worldwide"
        }
      ],
      "category": "安全与运维",
      "dateModified": "2026-10-30",
      "description": "通过明确的权限、安全检查和发布证据改进软件交付。Wavect 评估约定的流程，实施控制措施，并复测其实际行为。",
      "name": "DevSecOps 服务与安全 CI/CD",
      "provider": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "serviceType": "DevSecOps",
      "url": "https://wavect.io/zh/services/devsecops/"
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "item": "https://wavect.io/zh/",
          "name": "首页",
          "position": 1
        },
        {
          "@type": "ListItem",
          "item": "https://wavect.io/zh/services/overview/",
          "name": "服务",
          "position": 2
        },
        {
          "@type": "ListItem",
          "item": "https://wavect.io/zh/services/overview/#security",
          "name": "安全与运维",
          "position": 3
        },
        {
          "@type": "ListItem",
          "item": "https://wavect.io/zh/services/devsecops/",
          "name": "DevSecOps",
          "position": 4
        }
      ]
    },
    {
      "@id": "https://wavect.io/zh/services/devsecops/#webpage",
      "@type": "WebPage",
      "dateModified": "2026-10-30",
      "description": "通过明确的权限、安全检查和发布证据改进软件交付。Wavect 评估约定的流程，实施控制措施，并复测其实际行为。",
      "inLanguage": "zh",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "mainEntity": {
        "@id": "https://wavect.io/zh/services/devsecops/#service"
      },
      "name": "DevSecOps 服务与安全 CI/CD",
      "url": "https://wavect.io/zh/services/devsecops/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "它改进约定的软件交付控制。对应用或基础设施进行对抗性评估需要不同的范围，应另行委托。通用 QA 服务不会因此自动包含完整渗透测试。"
      },
      "name": "DevSecOps 能替代渗透测试吗？"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "可以。我们会约定谁修改配置、审查问题和验收成果。仓库与部署环境仍由你的团队掌握。"
      },
      "name": "可以与我们现有的团队一起工作吗？"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "承诺范围前会审查平台、权限和部署目标。方案中会列出包含的系统与控制措施。"
      },
      "name": "支持哪些构建平台？"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "我们核查问题并记录决定。例外需要说明原因、负责人和复核或到期时间。默默关闭检查不是可持续的操作流程。"
      },
      "name": "扫描工具误报时如何处理？"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "可以，前提是它包含有代表性的交付路径。共用执行器、凭据和部署依赖仍需识别，以明确服务边界。"
      },
      "name": "能否先从一个仓库开始？"
    }
  ],
  "speakable": {
    "@type": "SpeakableSpecification",
    "cssSelector": [
      ".faq-question",
      ".faq-answer"
    ]
  }
}
```
