教程:将 Azure 存储用于生成构件
重要
许多 Azure 服务都有 Jenkins 插件。截至 2024 年 2 月 29 日,其中一些插件将不受支持。 Azure CLI 是目前建议将 Jenkins 与 Azure 服务集成的方法。 有关详细信息,请参阅适用于 Azure的 Jenkins 插件
本文演示如何将 Blob 存储用作 Jenkins 持续集成(CI)解决方案创建的生成项目的存储库,或用作生成过程中要使用的可下载文件的源。 在敏捷开发环境中进行编码时(无论是使用 Java 还是其他语言),一种你会发现此解决方案非常有用的场景是,生成过程基于持续集成运行,并且你需要一个存储库来存放构建工件,以便你能够与其他组织成员、客户共享,或用于维护存档。 另一种情况是,构建任务本身需要其他文件,例如,一些依赖项作为构建输入的一部分进行下载。
先决条件
- Azure 订阅:如果没有 Azure 订阅,请在开始前 创建免费的 Azure 帐户。
- Jenkins 服务器:如果没有安装 Jenkins 服务器,在 Azure上创建 Jenkins 服务器。
- Azure CLI:在 Jenkins 服务器上安装 Azure CLI(版本 2.0.67 或更高版本)。
- Azure 存储帐户:如果还没有存储帐户,创建存储帐户。
添加执行 Azure CLI 所需的 Azure 凭据
浏览到 Jenkins 门户。
从菜单中选择 管理 Jenkins。
选择管理凭据。
选择全局域。
选择“添加凭据”。
填写必填字段,如下所示:
- 种类:选择用户名携带密码。
- 用户名:指定服务主体的
appId
。 - 密码:指定服务主体的
password
。 - ID:指定凭据标识符,例如
azuresp
。 - 描述:(可选)可为您的环境添加一个有意义的描述。
选择“确定”创建凭据。
创建一个管道作业以上传构建工件
以下步骤指导你创建管道作业。 管道作业创建多个文件,并使用 Azure CLI 将文件上传到存储帐户。
在 Jenkins 仪表板中,选择“新建项”。
将作业命名myjob,选择流水线,然后选择确定。
在作业配置的 管道 部分中,选择 管道脚本,并将以下内容粘贴到 脚本。 请编辑占位符以匹配您的环境的值。
pipeline { agent any environment { AZURE_SUBSCRIPTION_ID='99999999-9999-9999-9999-999999999999' AZURE_TENANT_ID='99999999-9999-9999-9999-999999999999' AZURE_STORAGE_ACCOUNT='myStorageAccount' } stages { stage('Build') { steps { sh 'rm -rf *' sh 'mkdir text' sh 'echo Hello Azure Storage from Jenkins > ./text/hello.txt' sh 'date > ./text/date.txt' } post { success { withCredentials([usernamePassword(credentialsId: 'azuresp', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) { sh ''' echo $container_name # Login to Azure with ServicePrincipal az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID # Set default subscription az account set --subscription $AZURE_SUBSCRIPTION_ID # Execute upload to Azure az storage container create --account-name $AZURE_STORAGE_ACCOUNT --name $JOB_NAME --auth-mode login az storage blob upload-batch --destination ${JOB_NAME} --source ./text --account-name $AZURE_STORAGE_ACCOUNT # Logout from Azure az logout ''' } } } } } }
选择立即生成以运行 myjob。
检查控制台输出的状态。 生成后操作上传生成项目时,Azure 存储的状态消息将写入控制台。
如果遇到类似于以下内容的错误,这意味着需要在容器级别授予访问权限:
ValidationError: You do not have the required permissions needed to perform this operation.
如果收到此错误消息,请参阅以下文章来解决:成功完成此作业后,可通过打开公共 Blob 检查生成项目。
- 登录 Azure 门户。
- 选择“存储”。
- 选择用于 Jenkins 的存储帐户名称。
- 选择“容器”。
- 在 blob 列表中选择名为 myjob的容器。
- 应会看到以下两个文件:hello.txt 和 date.txt。
- 复制其中任一项的 URL,并将其粘贴到浏览器中。
- 可以看到上传作为构建工件的文本文件。
要点:
- 容器名称和 blob 名称在 Azure 存储中均为小写(并且区分大小写)。
创建一个管道作业以从 Azure Blob 存储中下载数据
以下步骤演示如何配置管道作业以从 Azure Blob 存储下载项。
在作业配置的 管道 部分中,选择 管道脚本,并将以下内容粘贴到 脚本。 请编辑占位符以匹配您的环境的值。
pipeline { agent any environment { AZURE_SUBSCRIPTION_ID='99999999-9999-9999-9999-999999999999' AZURE_TENANT_ID='99999999-9999-9999-9999-999999999999' AZURE_STORAGE_ACCOUNT='myStorageAccount' } stages { stage('Build') { steps { withCredentials([usernamePassword(credentialsId: 'azuresp', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) { sh ''' # Login to Azure with ServicePrincipal az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID # Set default subscription az account set --subscription $AZURE_SUBSCRIPTION_ID # Execute upload to Azure az storage blob download --account-name $AZURE_STORAGE_ACCOUNT --container-name myjob --name hello.txt --file ${WORKSPACE}/hello.txt --auth-mode login # Logout from Azure az logout ''' } } } } }
运行构建后,检查构建历史记录控制台输出。 或者,还可以查看下载位置,确认预期的 Blob 是否已成功下载。