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

從Jenkins遷移到Flow

更新時(shí)間:

本文將講解如何在代碼化編排的場(chǎng)景下,將 Jenkins 的任務(wù)遷移到阿里云云效流水線產(chǎn)品 Flow。通過對(duì)比兩者的對(duì)應(yīng)能力,幫助你快速理解 Flow 的設(shè)計(jì),從而更容易完成遷移。

1. 快速開始

一個(gè)最簡(jiǎn)單的Jenkinsfile:

pipeline {
    agent any

    stages {
        stage('Hello') {
            steps {
                sh 'echo hello'
            }
        }
    }
}

這個(gè)例子中,使用sh解析器執(zhí)行echo hello,因此只能在linux,unix和mac系統(tǒng)上執(zhí)行。

下面是對(duì)應(yīng)的Flow流水線定義:

stages:
  echo_stage:
    jobs:
      echo_job:
        steps:
          hello:
            step: Command
            with:
              run: echo hello

step 是 Flow 中的最小執(zhí)行單元,上述步驟指定了這個(gè) step 的類型為Command,可以在多個(gè)操作系統(tǒng)上執(zhí)行,在不同的操作系統(tǒng)上會(huì)使用對(duì)應(yīng)的默認(rèn)解釋器來執(zhí)行命令。

進(jìn)入 Flow 流水線首頁(yè),點(diǎn)擊 新建流水線 ,選擇「YAML 化編排」方式,選擇空模板,點(diǎn)擊 創(chuàng)建

image

將上述 YAML 內(nèi)容填入流水線流程配置,點(diǎn)擊右上角 保存并運(yùn)行

image

2. 詳細(xì)的能力映射

接下來會(huì)在以下幾個(gè)方面對(duì)比 Jenkins 和 Flow:

  1. 編排能力:串并聯(lián),交互等能力,條件執(zhí)行等。

  2. 構(gòu)建環(huán)境調(diào)度:執(zhí)行命令的工作空間如何分配,可以分配到哪些執(zhí)行環(huán)境中等。

  3. 觸發(fā)方式:可以以何種方式觸發(fā)流水線。

  4. 構(gòu)建環(huán)境軟件安裝:如何在構(gòu)建環(huán)境中添加自己需要的軟件工具。

  5. 密鑰管理:包括三方密鑰的管理,比如github,gitlab,以及私密配置項(xiàng)的管理。

  6. 插件機(jī)制:了解二者在擴(kuò)展能力上的差異。

  7. 權(quán)限管理:對(duì)于系統(tǒng)管理及流水線操作的相關(guān)權(quán)限管理。

2.1 編排能力

串并聯(lián)編排

Jenkinsfile可以定義多個(gè)stage,每個(gè)stage內(nèi)包含多個(gè)step。默認(rèn)所有step都在同一個(gè)agent的同一個(gè)工作空間上執(zhí)行。不同stage中的step都是串行執(zhí)行,如果希望并行執(zhí)行stage,需要使用parallel函數(shù)。

Flow流水線的基本結(jié)構(gòu)是流水線階段(stages) ->流水線任務(wù) jobs -> 流水線步驟(steps)。其中stages之間是串行的,jobs之間默認(rèn)是并行的,也可以通過needs關(guān)鍵字定義依賴,steps之間是串行的。

交互式能力

Jenkins中可以使用input指令來暫停構(gòu)建,并允許獲得用戶輸入。然后繼續(xù)執(zhí)行,并在后續(xù)的構(gòu)建中可以使用用戶的輸入。

Flow 沒有完全對(duì)標(biāo)的能力,但在觸發(fā)流水線時(shí),可以指定環(huán)境變量的值。

條件執(zhí)行

Jenkinsfile中可以使用when指令來決定是否執(zhí)行某一段step或者stage。

Flow中可以使用 condition 語(yǔ)法控制任務(wù)是否執(zhí)行來完成類似的功能。

Post

Jenkins中,post支持在任務(wù)執(zhí)行結(jié)束后,根據(jù)任務(wù)狀態(tài)執(zhí)行命令。

pipeline {
    agent any
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
    post {
        always {
            echo 'I will always say Hello again!'
        }
    }
}

Flow中沒有直接對(duì)標(biāo)的能力,您可以使用condition來做條件控制,但需要注意,post是在任務(wù)結(jié)束后執(zhí)行,而condition是在任務(wù)執(zhí)行前判斷是否需要執(zhí)行任務(wù)。具體請(qǐng)參考使用 condition 語(yǔ)法控制任務(wù)是否執(zhí)行

jobs:
      front_build_job:
        name: 前端應(yīng)用構(gòu)建
        # 根據(jù)自定義環(huán)境變量判斷是否需要執(zhí)行前端應(yīng)用構(gòu)建
        condition: |
          "${FRONT_APP_CHANGED}" == "true"
        steps:
          command_step:
            name: 執(zhí)行命令
            step: Command
            with:
              run: |
                echo This is front app build job...

Matrix

Jenkinsfile提供matrix指令來生成各種維度的任務(wù)組合。

Flow 沒有提供完全對(duì)標(biāo)的matrix語(yǔ)法,但提供了更加通用的使用 template 語(yǔ)法動(dòng)態(tài)配置流水線,可以實(shí)現(xiàn)matrix可以實(shí)現(xiàn)的所有場(chǎng)景。

2.2 觸發(fā)方式

Jenkinsfile中使用triggers指定流水線的觸發(fā)方式,原生支持定時(shí)、輪詢scm、上游任務(wù)觸發(fā)三種能力,基于插件又可以實(shí)現(xiàn)靈活的scm的webhook觸發(fā)等。

Flow支持Webhook 觸發(fā)流水線代碼源觸發(fā)定時(shí)觸發(fā)流水線、流水線源觸發(fā)、制品源觸發(fā)

2.3 構(gòu)建環(huán)境調(diào)度

Jenkinsfile中使用agent指令來指定當(dāng)前stage運(yùn)行在哪個(gè)agent上。agent本身是一個(gè)抽象,可以通過插件運(yùn)行在vm上或者容器里等。agent指令可以用在pipeline級(jí)別或者stage級(jí)別。

Flow通過jobs關(guān)鍵字指定運(yùn)行環(huán)境,支持運(yùn)行在北京和中國(guó)香港的Flow管理的共享構(gòu)建集群中,提供的是x86的容器環(huán)境。同時(shí)也支持通過安裝runner運(yùn)行在用戶自己的vm上,支持Linux、Windows、macOS等操作系統(tǒng)。但只能用在job級(jí)別。

2.4 構(gòu)建環(huán)境軟件安裝

Jenkinsfile 中使用 tools 指令來安裝指定軟件。

Flow 中使用步驟的形式安裝指定軟件,比如安裝Java、安裝Python等步驟。

2.5 密鑰管理

Jenkins使用credentials管理憑證,以便于scm、部署系統(tǒng)等外部系統(tǒng)進(jìn)行安全通信。credential的類型包括賬密、密鑰文件、github app等。

Flow使用服務(wù)連接管理來管理憑證,可以通過服務(wù)連接于阿里云的產(chǎn)品之間進(jìn)行安全授權(quán),同時(shí)也支持賬密、token、ssh私鑰等類型。Flow還支持通過環(huán)境變量來管理流水線或者跨流水線范圍內(nèi)的私密信息存儲(chǔ)和引用的能力。

2.6 插件機(jī)制

Jenkins 有著強(qiáng)大的擴(kuò)展能力,提供了很多的擴(kuò)展點(diǎn)。

Flow提供了自定義步驟的能力,可以開發(fā)專屬于云效企業(yè)的步驟。

3. 一個(gè)Github Java應(yīng)用測(cè)試構(gòu)建示例

假設(shè)我在 Github 上有一個(gè)私有 Java 項(xiàng)目,需要?jiǎng)?chuàng)建和 Github 之間的連接,并進(jìn)行構(gòu)建和測(cè)試。

  • 新建 Github 服務(wù)連接授權(quán)

    • 進(jìn)入 Flow 首頁(yè) -> 全局設(shè)置 -> 服務(wù)連接管理 -> 新建服務(wù)連接,選擇 Github;

    • 點(diǎn)擊下一步,在服務(wù)授權(quán)/證書頁(yè)面點(diǎn)擊新建,完成 Github oauth 授權(quán)后,返回 Flow 并點(diǎn)擊創(chuàng)建

    image

    image

  • 新建 YAML 流水線:添加 sources 代碼源,并選擇上述創(chuàng)建的 Github 服務(wù)連接;添加 Java 構(gòu)建任務(wù) YAML。YAML 示例如下:

    sources: 
      github_repo:
        type: github
        name: github代碼源
        endpoint: https://github.com/flow-example/spring-boot.git  # 請(qǐng)?zhí)鎿Q成你的 Github 代碼倉(cāng)庫(kù)地址 
        branch: master
        triggerEvents: push
        certificate:
          type: serviceConnection
          serviceConnection: cq8bubonpi5wixdw # 這里的服務(wù)連接就是前面創(chuàng)建出來的服務(wù)連接ID
    
    stages:
      build_test:
        jobs:
          build_test:
            runsOn:
              group: public/cn-hongkong
              container: build-steps-public-registry.cn-beijing.cr.aliyuncs.com/build-steps/alinux3:ffdb23fd-2024-02-26-17-42-35
            steps:
              setup:
                step: SetupJava
                with:
                  jdkVersion: "1.8"
                  mavenVersion: "3.9.3"
              test:
                step: Command
                with:
                  run: mvn test
              build:
                step: Command
                with:
                  run: mvn package -DskipTests
  • 保存并運(yùn)行流水線,查看運(yùn)行結(jié)果。

    image