将文件内容发布到CI管道的服务总线

发布于 2025-02-03 23:48:51 字数 2962 浏览 5 评论 0原文

在我的CI管道中,我正在尝试将消息发布到Service Bus及其正常工作时,当它只是一些硬编码的文本或变量时,请在此处使用“ PublishToazureservicebus”任务。 但是问题是在尝试从存储库中读取文件,然后将其发布到服务总线时。

我尝试使用脚本语言使用读取文件并将其放入变量,但由于变量无法存储Big JSON文件,因此它无法工作。 将消息发布到服务总线时,有什么方法可以直接读取文件。

以下是用于调试的示例代码段

trigger:
- none

pool:
  vmImage: ubuntu-latest

parameters:
- name: ProjectName
  displayName: Project Name
  type: string
  default: DevOpsDemo
- name: repoName
  displayName: repo Name
  type: string
  default: ProjectCode
- name: branchRef
  displayName: Branch Name
  type: string
  default: main
variables:
 - name: jobStatus
   value: "Failed"
 - name: projectFile
   value: ""
stages:
- stage: Stage1
  displayName: Stage 1
  jobs:
  - job: CheckOutRepo
    displayName: CheckOut-Repo Display
    steps:
    - script: |
        echo "Checkout for " ${{ parameters.ProjectName}} : ${{ parameters.repoName}} : ${{ parameters.branchRef}}
      name: PrintMessage
    - checkout: git://${{ parameters.ProjectName}}/${{ parameters.repoName}}@refs/heads/${{ parameters.branchRef}}
      name: Checkout
    - task: PythonScript@0
      inputs:
        scriptSource: 'inline'
        script: |
          import json
          import requests
          f = open('project-release.json')
          projectFile = json.load(f)
          print(projectFile)
          f.close()
          print("Afterclosing")
          print(projectFile)
    - script: |
        echo "Project release file" $(cat project-release.json)
      name: TestPrint
    - task: CopyFiles@2
      inputs:
        SourceFolder: 'services'
        Contents: '**'
        TargetFolder: $(Build.ArtifactStagingDirectory)
      name: CopyFiles
    - task: PublishBuildArtifacts@1
      inputs:
        PathtoPublish: $(Build.ArtifactStagingDirectory)
        ArtifactName: 'drop'
        publishLocation: 'Container'
      name: PublishArtifacts
    - bash: |
        echo "##vso[task.setvariable variable=jobStatus]Success"
      name: setVar
    - bash: |
        echo "##vso[task.setvariable variable=jobStatus;isOutput=true]$(jobStatus)"
        echo "##vso[task.setvariable variable=projectFile;isOutput=true]$(cat project-release.json)"
      name: SetStatus
      condition: always()
- stage: Stage2
  displayName: Stage 2
  condition: always()
  jobs:
  - job: Publish
    pool: server
    variables:
      jobStatus: $[ stageDependencies.Stage1.CheckOutRepo.outputs['SetStatus.jobStatus'] ]
      projectFile: $[ stageDependencies.Stage1.CheckOutRepo.outputs['SetStatus.projectFile'] ]
    steps:
      - task: PublishToAzureServiceBus@1
        inputs:
          azureSubscription: 'SBConnection'
          messageBody: |
            {
            "Status": "$(jobStatus)",
            "BuildID": "$(build.buildid)",
            "BuildNumber":"$(build.buildnumber)",
            "projectFile":$(cat project-release.json)
            }
          signPayload: false
          waitForCompletion: false
        condition: always()

In my CI pipeline I am trying to publish message to service bus and its working when its just some hardcoded text or variables, here Using "PublishToAzureServiceBus" task .
But problem is when trying to a read file from repository and then publish that to service bus.

I have tried using read file using scripting language and put to variable but its not able to work as variable is not storing big json file.
Is there any way to read file directly when publishing message to service bus.

Below is sample code snippet for debugging

trigger:
- none

pool:
  vmImage: ubuntu-latest

parameters:
- name: ProjectName
  displayName: Project Name
  type: string
  default: DevOpsDemo
- name: repoName
  displayName: repo Name
  type: string
  default: ProjectCode
- name: branchRef
  displayName: Branch Name
  type: string
  default: main
variables:
 - name: jobStatus
   value: "Failed"
 - name: projectFile
   value: ""
stages:
- stage: Stage1
  displayName: Stage 1
  jobs:
  - job: CheckOutRepo
    displayName: CheckOut-Repo Display
    steps:
    - script: |
        echo "Checkout for " ${{ parameters.ProjectName}} : ${{ parameters.repoName}} : ${{ parameters.branchRef}}
      name: PrintMessage
    - checkout: git://${{ parameters.ProjectName}}/${{ parameters.repoName}}@refs/heads/${{ parameters.branchRef}}
      name: Checkout
    - task: PythonScript@0
      inputs:
        scriptSource: 'inline'
        script: |
          import json
          import requests
          f = open('project-release.json')
          projectFile = json.load(f)
          print(projectFile)
          f.close()
          print("Afterclosing")
          print(projectFile)
    - script: |
        echo "Project release file" $(cat project-release.json)
      name: TestPrint
    - task: CopyFiles@2
      inputs:
        SourceFolder: 'services'
        Contents: '**'
        TargetFolder: $(Build.ArtifactStagingDirectory)
      name: CopyFiles
    - task: PublishBuildArtifacts@1
      inputs:
        PathtoPublish: $(Build.ArtifactStagingDirectory)
        ArtifactName: 'drop'
        publishLocation: 'Container'
      name: PublishArtifacts
    - bash: |
        echo "##vso[task.setvariable variable=jobStatus]Success"
      name: setVar
    - bash: |
        echo "##vso[task.setvariable variable=jobStatus;isOutput=true]$(jobStatus)"
        echo "##vso[task.setvariable variable=projectFile;isOutput=true]$(cat project-release.json)"
      name: SetStatus
      condition: always()
- stage: Stage2
  displayName: Stage 2
  condition: always()
  jobs:
  - job: Publish
    pool: server
    variables:
      jobStatus: $[ stageDependencies.Stage1.CheckOutRepo.outputs['SetStatus.jobStatus'] ]
      projectFile: $[ stageDependencies.Stage1.CheckOutRepo.outputs['SetStatus.projectFile'] ]
    steps:
      - task: PublishToAzureServiceBus@1
        inputs:
          azureSubscription: 'SBConnection'
          messageBody: |
            {
            "Status": "$(jobStatus)",
            "BuildID": "$(build.buildid)",
            "BuildNumber":"$(build.buildnumber)",
            "projectFile":$(cat project-release.json)
            }
          signPayload: false
          waitForCompletion: false
        condition: always()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

乱了心跳 2025-02-10 23:48:51

我可以通过在bash脚本中使用setVaria,如下

pool:
  vmImage: ubuntu-latest

stages:
- stage: Stage1
  displayName: Stage 1
  jobs:
  - job: CheckOutRepo
    displayName: CheckOut-Repo Display
    steps:
    - checkout: git://${{ parameters.ProjectName}}/${{ parameters.repoName}}@refs/heads/${{ parameters.branchRef}}
      name: Checkout
    - bash: |
        data=$(cat project-release.json)
        echo "##vso[task.setvariable variable=jobStatus;isOutput=true]$(jobStatus)"
        echo "##vso[task.setvariable variable=data;isOutput=true]"$data
      name: SetStatus
      condition: always()
- stage: Stage2
  displayName: Stage 2
  condition: always()
  jobs:
  - job: Publish
    pool: server
    variables:
      jobStatus: $[ stageDependencies.Stage1.CheckOutRepo.outputs['SetStatus.jobStatus'] ]
      projectFile: $[ stageDependencies.Stage1.CheckOutRepo.outputs['SetStatus.data'] ]
    steps:
      - task: PublishToAzureServiceBus@1
        inputs:
          azureSubscription: 'SBConnection'
          messageBody: |
            {
            "Status": "$(jobStatus)",
            "BuildID": "$(build.buildid)",
            "BuildNumber":"$(build.buildnumber)",
            "projectFile":$(projectFile)
            }
          signPayload: false
          waitForCompletion: false
        condition: always()

I am able to solve this by using setvariable in bash script as below

pool:
  vmImage: ubuntu-latest

stages:
- stage: Stage1
  displayName: Stage 1
  jobs:
  - job: CheckOutRepo
    displayName: CheckOut-Repo Display
    steps:
    - checkout: git://${{ parameters.ProjectName}}/${{ parameters.repoName}}@refs/heads/${{ parameters.branchRef}}
      name: Checkout
    - bash: |
        data=$(cat project-release.json)
        echo "##vso[task.setvariable variable=jobStatus;isOutput=true]$(jobStatus)"
        echo "##vso[task.setvariable variable=data;isOutput=true]"$data
      name: SetStatus
      condition: always()
- stage: Stage2
  displayName: Stage 2
  condition: always()
  jobs:
  - job: Publish
    pool: server
    variables:
      jobStatus: $[ stageDependencies.Stage1.CheckOutRepo.outputs['SetStatus.jobStatus'] ]
      projectFile: $[ stageDependencies.Stage1.CheckOutRepo.outputs['SetStatus.data'] ]
    steps:
      - task: PublishToAzureServiceBus@1
        inputs:
          azureSubscription: 'SBConnection'
          messageBody: |
            {
            "Status": "$(jobStatus)",
            "BuildID": "$(build.buildid)",
            "BuildNumber":"$(build.buildnumber)",
            "projectFile":$(projectFile)
            }
          signPayload: false
          waitForCompletion: false
        condition: always()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文