这是我参与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()
复制代码