教程:对生成项目使用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,并将其粘贴到浏览器中。
- 你会看到已作为生成工件上传的文本文件。
要点:
- 在 Azure 存储中,容器名称和 Blob 名称都是小写的(并且区分大小写)。
创建要从 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 是否已成功下载。