You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps中如何在单个CI作业完成后触发发布流水线?

实现CI流水线构建完成后直接触发发布,无需等待漏洞扫描

核心思路是让Docker构建作业和漏洞扫描作业并行执行,同时在构建作业完成后立即触发发布流水线,完全不依赖扫描作业的状态。以下是主流CI工具的具体实现方式:

GitHub Actions

主CI流水线配置

将构建和扫描设为并行作业,在构建完成后通过repository_dispatch事件触发发布流水线:

name: CI Pipeline
on: [push]

jobs:
  docker-build:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4
      - name: 构建并推送Docker镜像
        run: |
          docker build -t your-registry/my-image:latest .
          docker push your-registry/my-image:latest
      - name: 触发发布流水线
        uses: peter-evans/repository-dispatch@v3
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          event-type: trigger-deployment
          client-payload: '{"image_tag": "latest"}'

  sec-scan:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4
      - name: 运行漏洞扫描
        run: |
          # 替换为你的扫描命令,比如Trivy、Snyk
          trivy image your-registry/my-image:latest

发布流水线配置

让发布流水线监听repository_dispatch事件即可:

name: Deployment Pipeline
on:
  repository_dispatch:
    types: [trigger-deployment]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: 执行部署
        run: |
          echo "部署镜像: ${{ github.event.client_payload.image_tag }}"
          # 这里添加你的部署命令

GitLab CI

主CI流水线配置

将构建和扫描放在同一个并行阶段,构建完成后通过GitLab API触发发布流水线:

stages:
  - build_scan
  - deploy

docker-build:
  stage: build_scan
  script:
    - docker build -t your-registry/my-image:latest .
    - docker push your-registry/my-image:latest
    # 触发发布流水线(替换为你的项目ID和分支)
    - curl --request POST \
        --form "token=${CI_JOB_TOKEN}" \
        --form "ref=main" \
        "https://your-gitlab-instance/api/v4/projects/${CI_PROJECT_ID}/trigger/pipeline"
  tags:
    - docker-runner

sec-scan:
  stage: build_scan
  script:
    - trivy image your-registry/my-image:latest
  tags:
    - scan-runner

发布流水线配置

在发布流水线的only规则中添加triggers,确保只接受触发请求:

stages:
  - deploy

deploy-job:
  stage: deploy
  script:
    # 部署命令
  only:
    - triggers

Jenkins

Pipeline配置

使用parallel块让构建和扫描并行执行,构建完成后用build步骤触发发布流水线(wait: false表示不等待发布完成):

pipeline {
  agent any
  stages {
    stage('Build & Scan') {
      parallel {
        stage('Docker Build') {
          steps {
            script {
              sh 'docker build -t your-registry/my-image:latest .'
              sh 'docker push your-registry/my-image:latest'
              // 触发发布流水线,wait: false 不等待发布完成
              build job: 'Deployment-Pipeline', 
                    parameters: [string(name: 'IMAGE_TAG', value: 'latest')], 
                    wait: false
            }
          }
        }
        stage('Vulnerability Scan') {
          steps {
            script {
              sh 'trivy image your-registry/my-image:latest'
            }
          }
        }
      }
    }
  }
}

通用注意事项

  • 确保扫描作业的资源不影响构建作业的执行效率,可以给两个作业分配独立的运行环境
  • 扫描作业的结果可以单独通知(比如Slack邮件),但不要阻塞发布流程
  • 如果需要在扫描出严重漏洞时回滚发布,可以单独配置一个后续的回滚流水线,由扫描结果触发

内容的提问来源于stack exchange,提问作者Hanzala Siddique

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 08:46:30