从 Jenkins 迁移到 Azure Pipelines

这是我参与11月更文挑战的第8天,活动详情查看:11月更文挑战

从 Jenkins 迁移到 Azure Pipelines

Jenkins是一种开源自动化服务器,传统上由企业安装在自己的数据中心并在本地进行管理。许多提供商还提供托管 Jenkins 托管,或者,Azure Pipelines 是一个云原生持续集成管道,提供多阶段管道的管理并构建托管在云中的代理虚拟机。

jenkins 有两种写jenkinsfils的风格,声明式和脚本式,脚本式是以前使用groovy写的,为了支持pipeline,更新了版本也支持了声明式.

根据Microsoft的文档我们可以轻松地将声明式的jenkinsfile变成让ADO-pipeline能理解的yaml文件

比如

pipeline {
    agent none
    stages {
        stage('Build') {
            steps {
                sh 'npm install'
                sh 'npm run build'
            }
        }
        stage('Test') {
            steps {
                sh 'npm test'
            }
        }
    }
}
复制代码

可以换成这样的yaml文件

原先的stage->job , 执行的命令->script

jobs:
- job: Build
  steps:
  - script: npm install
  - script: npm run build
- job: Test
  steps:
  - script: npm test
复制代码

基于容器的构建

在构建管道中使用容器允许您在 docker 镜像中构建和测试,该镜像具有管道所需的确切依赖项,并且已经配置。它使您不必包含安装更多软件或配置环境的构建步骤。Jenkins 和 Azure Pipelines 都支持基于容器的构建。

例如,要在 Ubuntu 14.04(“Trusty”)容器中运行构建,然后在 Ubuntu 16.04(“Xenial”)容器中运行测试:

Jenkinsfile

Copy

pipeline {
    agent none
    stages {
        stage('Build') {
            agent {
                docker {
                    image 'ubuntu:trusty'
                    args '-v $HOME:/build -w /build'
                }
            }
            steps {
                sh 'make'
            }
        }
        stage('Test') {
            agent {
                docker {
                    image 'ubuntu:xenial'
                    args '-v $HOME:/build -w /build'
                }
            }
            steps {
                sh 'make test'
            }
        }
    }
}
复制代码

转换为azure-pipelines.yml

resources:
  containers:
  - container: trusty
    image: ubuntu:trusty
  - container: xenial
    image: ubuntu:xenial
​
jobs:
- job: build
  container: trusty
  steps:
  - script: make
- job: test
  dependsOn: build
  container: xenial
  steps:
  - script: make test
复制代码

代理选择

jenkins 使用agent选项提供构建代理选择,以确保您的构建管道 - 或管道的特定阶段 - 在特定构建代理机器上运行。同样,Azure Pipelines 提供了许多选项来配置构建环境的运行位置。

托管代理选择

Azure Pipelines 为 Linux、Windows 和 macOS 构建提供云托管构建代理。要选择构建环境,您可以使用 vmimage 关键字。例如,要选择 macOS 版本:

pool:
  vmimage: macOS-latest
复制代码

也指定一个container并指定一个 docker 映像,以便对构建的运行方式进行更细粒度的控制

本地代理选择

如果您在本地托管构建代理,则可以 根据机器的架构或安装在其上的软件定义 构建代理“功能”。例如,如果您已经设置了具有这些java功能的本地构建代理 ,那么您可以使用demands关键字确保您的作业在其上运行 :

YAML复制

pool:
  demands: java
复制代码

环境变量

在 Jenkins 中,您通常为整个管道定义环境变量。例如,要设置两个环境变量,CONFIGURATION=debug 以及PLATFORM=x86

pipeline {
    environment {
        CONFIGURATION = 'debug'
        PLATFORM      = 'x64'
    }
}
复制代码

同样,在 Azure Pipelines 中,配置在 YAML 配置中使用并在作业执行期间设置为环境变量的变量:

variables:
  configuration: debug
  platform: x64
复制代码

azure-pipelines.yml

jobs:
- job: debug build
  variables:
    configuration: debug
  steps:
  - script: ./build.sh $(configuration)
- job: release build
  variables:
    configuration: release
  steps:
  - script: ./build.sh $(configuration)
复制代码

成功失败时处理

Jenkins 允许您在构建完成后使用post管道部分运行命令 。您可以指定在构建成功时(使用该success部分)、构建失败时(使用该failure部分)或始终(使用该always部分)运行的命令。例如:

post {
    always {
        echo "The build has finished"
    }
    success {
        echo "The build succeeded"
    }
    failure {
        echo "The build failed"
    }
}
复制代码

同样,Azure Pipelines 具有丰富的条件执行框架,允许您根据许多条件(包括管道成功或失败)运行作业或作业步骤。

要模拟 Jenkins post-build 条件,您可以定义基于always(),succeeded()failed()条件运行的作业:

azure-pipelines.yml

jobs:
- job: always
  steps:
  - script: echo "The build has finished"
    condition: always()
​
- job: success
  steps:
  - script: echo "The build succeeded"
    condition: succeeded()
​
- job: failed
  steps:
  - script: echo "The build failed"
    condition: failed()
复制代码

猜你喜欢

转载自juejin.im/post/7031327528765620260