日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

流水線關鍵概念解析

本文主要介紹云效流水線的關鍵概念和組件。了解如何使用云效流水線幫助你更有效地構建、測試和部署代碼。

概述

image

image

  1. 配置不同的觸發器,從而以不同的方式觸發流水線。

  2. 流水線頂層結構是階段,階段之間默認順序執行。

  3. 階段內可以包含多個任務,任務默認并行執行(YAML模式下),可以配置Job間的依賴關系(可跨階段)。

  4. 任務分為普通的順序執行任務交互式執行任務,以及服務端任務。

    1. 通過步驟的擴展,順序執行任務可以完成各種各樣的工作,也包括對Kubernetes集群進行部署

    2. 有一些任務可能涉及到在執行完一些操作之后讓用戶進行選擇下一步該做什么,此時可以使用交互式執行任務來實現。

    3. 服務端任務包含兩種:人工卡點和主機部署,其中主機部署負責對主機組中的主機進行部署操作。

  5. 所有的任務都可以配置生命周期插件,可以在特定的生命周期節點執行通知類操作。

  6. 云效流水線提供了托管集群可以執行順序執行任務交互式執行任務,同時你也可以將自己的主機通過Runner應用程序來托管到云效流水線,并將其關聯到對應的私有構建集群(自托管集群),以便將任務調度到這些主機上進行執行。

流水線 pipeline

流水線是一套工作流程的定義,提供多層級的串并聯能力,以及暫停,條件執行等,來幫助你自動化你的研發過程。

可以通過流水線提供的預置模板來創建流水線。你可以創建GUI類型的流水線,或者YAML類型的流水線。二者不可相互轉換。其中YAML類型的流水線提供了相對GUI類型流水線更多的能力,比如創建流水線的OpenAPI,條件判斷能力等等。

image

創建好流水線之后,可以進行流水線的編排,以及一些其他的設置,比如觸發設置環境變量緩存等。

image

觸發器 trigger

你可以手動在流水線頁面上觸發流水線。

image

同時也可以配置不同的觸發器來自動觸發流水線運行。包括:

  1. 代碼源觸發。當代碼庫有推送等事件發生時候觸發流水線。

  2. Webhook 觸發流水線。直接通過Restful方式調用固定的URL來觸發流水線。

  3. ACR 觸發。當阿里云ACR倉庫發生推送等事件時,觸發流水線。

  4. 定時觸發。通過定時配置,可以周期性地自動觸發流水線的執行。

  5. Flow流水線觸發。當另一條流水線執行完畢時候觸發流水線。

  6. Jenkins 觸發。配置一個Jenkins任務執行完畢之后觸發流水線。

階段 stages

階段通常表示研發過程中的不同環節,比如開發、測試、預發布、發布生產等。如下圖就包含了測試構建部署三個階段。

image

在YAML流水線中,使用stages關鍵字定義不同的階段。

image

任務 jobs

一個階段中通常可以包含多個可以并行執行的任務,比如多個不同類型的測試可以同時執行。

image

在 YAML 流水線中,使用stages.<stage_id>.jobs關鍵字定義不同的任務。

image

如果一條流水線僅含一個 stage,則無需顯示指定stages,可直接定義 jobs

image

步驟 steps

一個步驟本質上是執行一些可以在某個構建集群上執行的一段命令的描述。比如進行Java構建、基于Java構建的產物進行鏡像構建等。

image

在 YAML 流水線中,使用jobs.<job_id>.steps關鍵字定義不同的步驟。

image

如果一條流水線僅包含一個 job,則無需顯示指定jobs,可直接定義 steps

image

云效內置了非常豐富的步驟,同時你也可以自定義一個步驟來滿足你的特殊場景。

順序執行任務

上述提到的Java構建,鏡像構建等任務執行一段腳本就結束了,我們稱之為順序執行任務。

交互式任務

有一些場景,比如SAE的部署,在觸發了發布之后,需要等待第一批發布結束,然后用戶驗證完畢之后,根據驗證的結果選擇繼續發布,或者是回滾發布,這種帶有交互的任務,我們稱之為交互式任務,如下。

image

image

這種交互式的任務也是通過步驟來實現的,其特殊之處在于,步驟的第一次運行結束之后,會返回給服務端特定的數據結構告訴,接下來的Action有哪些,同時步驟的處理邏輯中包含處理各種Action的能力,于是服務端通過重復調用包含這個步驟的任務,并傳入用戶選擇的那個Action就可以實現上述的交互式的效果。

服務連接管理

在步驟運行過程中,會涉及到一些密鑰信息,比如代碼克隆的賬密、Jenkins的賬密、Kubernetes的kubeconfig、用于訪問阿里云API的臨時token等等。云效流水線使用服務連接的概念來統一管理上述信息。

image

image

image

image

在 YAML流水線中,通過serviceConnection關鍵字指定。

image

在上圖 「Java 鏡像構建」步驟在運行時可以獲取到對應的docker login的賬密,并寫入到~/.docker/config.json,以便后續的docker pulldocker push使用。

Kubernetes 部署

為了方便步驟和用戶的 Kubernetes 集群之間的交互,云效流水線提供了 Kubernetes 集群管理的能力,并可以在步驟中引用,以便在運行時,讓步驟獲取到這個 Kubernetes 集群的 kubeconfig。

image

image

在 YAML 流水線中,通過kubernetesCluster指定集群ID連接。

image

云效流水線支持添加兩種類型的 Kubernetes 集群:

  • 阿里云ACK。為了添加阿里云ACK集群,需要先添加一個服務連接,然后通過這個服務連接選擇該服務連接下的ACK集群即可。流水線會在運行時,計算一個臨時的kubeconfig供步驟使用。這種情況下用戶的集群的ApiServer可以不開放公網。

image.png

  • 普通的Kubernetes集群,用戶需要填寫kubeconfig。這種情況,用戶的Kubernetes的ApiServer需要公網可訪問。

image.png

主機部署

云效流水線支持主機部署功能。為了使用該功能,需要先創建主機組,然后在主機部署的任務中選擇主機組。

image

image

主機部署可以引用上游的制品產物,并按照你的配置將這個制品下載到每一臺主機對應的目錄。主機部署提供了分批發布的能力,并且支持第一批暫停和每批暫停的策略。

imageimageimage

在 YAML 流水線中,通過machineGroup指定主機組ID部署。

image

云效流水線支持以下幾種方式接入主機:

  • 阿里云ECS。首先創建阿里云ECS類型的服務連接,然后通過這個服務連接選擇該賬號下的機器,綁定到主機組。云效流水線會通過云助手的通道在機器上安裝Runner程序,作為和流水線服務端的通信的客戶端。這種情況下阿里云ECS不需要有訪問公網資源的能力,Runner程序會使用內網的endpoint連接到流水線服務端。

image

  • 阿里云托管實例。和阿里云ECS的接入方式相同,唯一的差別的是,由于托管主機不在阿里云的內網,因此無法通過內網endpoint連接到流水線服務端,所以需要該主機可以訪問公網。

  • 通過標簽的方式定義主機組。在運行時通過標簽決定選擇哪些主機進行部署。由于實際部署的主機是不確定的,因此在主機組定義時,不會在任何主機上安裝Runner程序,而是在運行時通過云助手的命令通道直接進行命令下發,從而完成部署。

image

image

  • 任意可以訪問公網的主機。需要粘貼安裝Runner的命令到主機上執行,即可添加該主機到流水線。

image

私有構建集群

如果你的構建過程需要和你的內網資源進行交互,比如從內網clone代碼,或者從內網的 maven 服務器上拉取依賴,可以使用私有構建集群來把你的內網主機托管到流水線。

image

構建集群中的主機同樣是通過安裝Runner程序的方式托管到流水線的,支持Linux、Windows、macOS主機的接入,并支持 amd64 和 arm64 兩種芯片架構的接入。

image

流水線任務可以指定任務調度到對應的私有構建集群上。

image

在 YAML 流水線中,通過runsOn關鍵字指定任務構建集群。

image