使用 Azure Batch 作为 Jenkins 的节点

use Azure Batch as Jenkins' node

我有一个 Jenkins 服务器 运行 与其他机器作为节点很好。 我还有一个 Azure Batch 帐户和一个工作池。 有没有办法连接两者以便将 Jenkins 任务发送到 Azure Batch 池?

到目前为止我只发现这个 https://github.com/Azure/batch-jenkins 是一个 post-build 插件来并行执行测试,这不是我想要的为了。我只需要向 Azure 发送命令行。

谢谢

由于您的要求是向 Azure 发送命令行,因此我建议您使用一个简单的 Jenkins 作业(自由式作业或管道作业)来完成该要求。

先决条件:

  1. 拥有 Azure Batch 帐户
  2. 拥有 Azure Batch 池
  3. 拥有 Azure Batch 作业
  4. Azure CLI 安装在 Jenkins 节点中,您将在其中 运行 Jenkins 作业
  5. 按照说明将 Azure 服务主体添加到 Jenkins 凭证here

然后在使用 Azure 服务主体连接到 Azure CLI 后,让 Jenkins 自由式作业执行类似于 shell 构建步骤中的以下命令。

az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID

az batch task create --task-id mytask$i --job-id myjob --command-line "/bin/bash -c 'xxxxxxxxxxxxxxxxxxxxx; sleep 90s'"

或者有一个 Jenkins 管道作业,如下所示。

#!groovy
node {
    try {
        xxxxxxxxxxxxxxxxxxxxx
        xxxxxxxxxxxxxxxxxxxxx
    }
    catch (MissingPropertyException e) {
        xxxxxxxxxxxxxxxxxxxxx
        xxxxxxxxxxxxxxxxxxxxx
    }
    stage('test'){
        withCredentials([azureServicePrincipal('JENKINSSERVICEPRINCIPALCREDENTIALID')]) {
            def sampleoutputone = sh (returnStdout: true, script: '''az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID > /dev/null
            az account set -s $AZURE_SUBSCRIPTION_ID > /dev/null
            sampleoutputtwo=$(az batch task create --task-id mytask --job-id myjob --command-line "/bin/bash -c 'xxxxxxxxxxxxxxxxxxxxx; sleep 90s'")
            xxxxxxxxxxxxxxxxxxxxx
            xxxxxxxxxxxxxxxxxxxxx
        }
    }
}

P.S。请注意,此答案中提供的代码只是示例代码,您可能需要稍微调整一下才能根据需要工作。

希望对您有所帮助!!干杯!!