इसके माध्यम से साझा किया गया


GitHub क्रियाओं का उपयोग करके पाइपलाइनों का विस्तार करें

यह आलेख पाइपलाइनों का विस्तार करने के लिए GitHub क्रियाएँ और Power Automate क्लाउड प्रवाह का उपयोग प्रदर्शित करता है। Power Platform जब पाइपलाइन परिनियोजन सबमिट किया जाता है, तो क्लाउड प्रवाह GitHub वर्कफ़्लो को डाउनलोड करने, अनपैक करने और GitHub शाखा में आर्टिफैक्ट के स्रोत कोड को प्रतिबद्ध करने के लिए ट्रिगर करता है।

कार्यप्रवाह विवरण

वर्कफ़्लो को workflow_dispatch ईवेंट के माध्यम से ट्रिगर किया जाता है. वर्कफ़्लो ubuntu-latest पर चलता है और इसमें contents: write GitHub रिपोजिटरी शाखा में परिवर्तन करने की अनुमति है।

कार्यप्रवाह में निम्नलिखित चरण शामिल हैं:

  1. actions/checkout@v3: रिपोजिटरी की जांच करता है.
  2. create new branch if specified: यदि इनपुट में a target_branch निर्दिष्ट है तो एक नई शाखा बनाता है।
  3. download solution from artifact: पाइपलाइनों द्वारा बनाए गए आर्टिफैक्ट से समाधान डाउनलोड करता है।
  4. unpack solution: समाधान को खोलता है.
  5. commit changes: मौजूदा या नई शाखा में परिवर्तन करता है।
  6. push to branch: प्रतिबद्ध परिवर्तनों को स्रोत शाखा में भेजता है।

वर्कफ़्लो इनपुट

निम्नलिखित वर्कफ़्लो इनपुट आवश्यक या वैकल्पिक हैं:

  • artifact_url (आवश्यक): पाइपलाइनों द्वारा बनाए गए आर्टिफैक्ट के लिए Microsoft Dataverse पंक्ति (रिकॉर्ड) आईडी का URL.
  • solution_name (अपेक्षित): Dataverse पर्यावरण में समाधान का नाम.
  • source_branch (आवश्यक): समाधान प्रतिबद्धता के लिए शाखा.
  • target_branch (वैकल्पिक): समाधान प्रतिबद्धता के लिए बनाई जाने वाली शाखा. यदि निर्दिष्ट नहीं किया गया है, तो source_branch का प्रयोग किया जाता है।
  • commit_message (आवश्यक): प्रतिबद्धता हेतु संदेश प्रदान करना।

वर्कफ़्लो रहस्य

Dataverse और Dataverse ID (AD) में कॉन्फ़िगर किए गए एप्लिकेशन उपयोगकर्ता का उपयोग करके कनेक्ट करने के लिए निम्नलिखित रहस्यों की आवश्यकता होती है। Microsoft Entra इन रहस्यों को GitHub रिपोजिटरी सेटिंग्स में कॉन्फ़िगर करें.

  • CLIENT_ID: पंजीकृत एप्लिकेशन की क्लाइंट आईडी. Microsoft Entra
  • TENANT_ID: अनुप्रयोग से संबद्ध निर्देशिका की टेनेंट आईडी. Microsoft Entra Microsoft Entra
  • CLIENT_SECRET: पंजीकृत अनुप्रयोग का क्लाइंट सीक्रेट. Microsoft Entra

अधिक जानकारी के लिए, एन्क्रिप्टेड सीक्रेट्स बनाना और उनका उपयोग करना और एप्लिकेशन उपयोगकर्ता बनाना पर जाएं।

वर्कफ़्लो कोड

नीचे GitHub Actions वर्कफ़्लो कोड सूचीबद्ध है।

name: Download, unpack and commit the solution to git
run-name: Getting ${{ github.event.inputs.solution_name }} from pipelines host environment and committing
on:
  workflow_dispatch:
    inputs:
      artifact_url:
        description: "The url of the Dataverse record ID for the artifact created by the pipelines (Example: https://[your-env].crm.dynamics.com/api/data/v9.0/deploymentartifacts([your-artifact-id])/artifactfile/$value)."
        required: true
      solution_name:
        description: "Name of the Solution in Dataverse environment"
        required: true
      user_name: 
        description: "User name for the commit"
        required: true
      source_branch:
        description: "Branch for the solution commit"
        required: true
      target_branch:
        description: "Branch to create for the solution commit"
        required: false
      commit_message:
        description: "Message to provide for the commit"
        required: true
permissions:
  contents: write
jobs:
  export-unpack-commit:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
        with:
            ref: ${{ github.event.inputs.source_branch }}

      # Commit changes to the existing or new branch
      - name: create new branch if specified
        shell: pwsh
        run: |
            if('${{ github.event.inputs.target_branch }}' -ne '') {
                git checkout -b ${{ github.event.inputs.target_branch }} ${{ github.event.inputs.source_branch }}
            }

      # Export the solution from the artifact created by pipelines
      - name: download solution from artifact
        env:
            CLIENT_ID: ${{secrets.CLIENT_ID}}   
            TENANT_ID: ${{secrets.TENANT_ID}}   
            CLIENT_SECRET: ${{secrets.CLIENT_SECRET}}
        shell: pwsh
        run: |
            $aadHost = "login.microsoftonline.com"
            $url = "${{ github.event.inputs.artifact_url }}"
            $options = [System.StringSplitOptions]::RemoveEmptyEntries
            $dataverseHost = $url.Split("://", $options)[1].Split("/")[0]

            $body = @{client_id = $env:CLIENT_ID; client_secret = $env:CLIENT_SECRET; grant_type = "client_credentials"; scope = "https://$dataverseHost/.default"; }
            $OAuthReq = Invoke-RestMethod -Method Post -Uri "https://$aadHost/$env:TENANT_ID/oauth2/v2.0/token" -Body $body
            $spnToken = $OAuthReq.access_token
            $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
            $headers.Add("Authorization", "Bearer $spnToken")
            $headers.Add("Content-Type", "application/json")

            # Download the managed solution
            $response = Invoke-RestMethod "${{ github.event.inputs.artifact_url }}" -Method 'GET' -Headers $headers
            $bytes = [Convert]::FromBase64String($response.value)
            [IO.File]::WriteAllBytes("${{ github.event.inputs.solution_name }}_managed.zip", $bytes)

            # Download the unmanaged solution (for now we will need to use string manipulation to get the unmanaged solution URL, until the API provides this value)
            $unmanaged_artifact_url = "${{ github.event.inputs.artifact_url }}".Replace("artifactfile", "artifactfileunmanaged")
            $response = Invoke-RestMethod "$unmanaged_artifact_url" -Method 'GET' -Headers $headers
            $bytes = [Convert]::FromBase64String($response.value)
            [IO.File]::WriteAllBytes("${{ github.event.inputs.solution_name }}.zip", $bytes)

      # Unpack the solution
      - name: unpack solution
        uses: microsoft/powerplatform-actions/unpack-solution@v0
        with:
          solution-file: "${{ github.event.inputs.solution_name }}.zip"
          solution-folder: "${{ github.event.repository.name }}"
          solution-type: 'Both'
          process-canvas-apps: false
          overwrite-files: true

      # Commit changes to the existing or new branch
      - name: commit changes
        shell: pwsh
        run: |
          rm -rf ${{ github.event.inputs.solution_name }}.zip
          rm -rf ${{ github.event.inputs.solution_name }}_managed.zip
          git config user.name ${{ github.event.inputs.user_name }}
          git pull 
          git add --all
          git commit -am "${{ github.event.inputs.commit_message }}" --allow-empty

      # Push the committed changes to the source branch
      - name: push to branch
        shell: pwsh
        run: |
          if('${{ github.event.inputs.target_branch }}' -ne '') {
              git push origin ${{ github.event.inputs.target_branch }}
          } else {
              git push origin ${{ github.event.inputs.source_branch }}
          }

नोट

समाधान आर्टिफैक्ट को डाउनलोड करने के लिए उपयोग किए जाने वाले वेब एपीआई की अधिकतम फ़ाइल आकार सीमा 16 एमबी है। Dataverse

उदाहरण Power Automate प्रवाह

GitHub वर्कफ़्लो को कॉल करने के लिए, आप एक Power Automate फ़्लो बना सकते हैं जो Dataverse में परिनियोजन अनुरोध किए जाने पर ट्रिगर होता है. प्रवाह को GitHub वर्कफ़्लो में आवश्यक इनपुट पास करने के लिए कॉन्फ़िगर किया जा सकता है। प्रवाह बनाने के तरीके के बारे में अधिक जानकारी के लिए, प्रवाह बनाएँ पर जाएँ। Power Automate

प्रवाह विवरण

प्रवाह तब ट्रिगर होता है जब OnDeploymentRequested कार्रवाई Dataverse में चलाई जाती है। प्रवाह GitHub वर्कफ़्लो को ट्रिगर करने के लिए HTTP कनेक्टर को कॉल करता है. यह प्रवाह आवश्यक इनपुट को GitHub वर्कफ़्लो में भेजता है। अनुरोध बॉडी में निम्नलिखित इनपुट शामिल करें:

  • artifact_url: पाइपलाइनों द्वारा बनाए गए समाधान आर्टिफैक्ट का URL. Dataverse
  • solution_name: Dataverse पर्यावरण में समाधान का नाम.
  • user_name: कमिट के लिए उपयोगकर्ता नाम.
  • source_branch: समाधान प्रतिबद्धता के लिए स्रोत शाखा.
  • target_branch: समाधान प्रतिबद्धता के लिए बनाई जाने वाली शाखा.
  • commit_message: प्रतिबद्धता हेतु संदेश प्रदान करना।

artifact_url, solution_name, और user_name में पारित मान उस क्रिया के आउटपुट से खींचे जाते हैं जिसने पाइपलाइन को ट्रिगर किया था। commit_message को तैनाती चरण रन पंक्ति से खींचा जाता है। Dataverse

  • artifact_url: @{triggerOutputs()?['body/OutputParameters/ArtifactFileDownloadLink']}
  • solution_name: @{triggerOutputs()?['body/OutputParameters/ArtifactName']}
  • user_name: @{triggerOutputs()?['body/OutputParameters/DeployAsUser']}
  • commit_message: @{outputs('Retrieve_the_Deployment_Stage_Run')?['body/deploymentnotes']}

यह प्रवाह GitHub के साथ प्रमाणीकरण के लिए व्यक्तिगत एक्सेस टोकन (PAT) का भी उपयोग करता है। GitHub व्यक्तिगत एक्सेस टोकन बनाने के तरीके के बारे में अधिक जानकारी के लिए, व्यक्तिगत एक्सेस टोकन बनाना पर जाएँ। PAT को HTTP अनुरोध के Authorization शीर्षक में पास किया जाता है।

प्रवाह में निम्नलिखित मान अपडेट करें:

  • [GitHub Personal Access Token] - अपने GitHub व्यक्तिगत एक्सेस टोकन से बदलें।
  • [GitHub Organization] - अपने GitHub संगठन के नाम से बदलें.
  • [GitHub Repository] - अपने GitHub रिपॉजिटरी नाम से बदलें.
  • [GitHub Workflow YAML File] - अपने GitHub वर्कफ़्लो YAML फ़ाइल नाम से बदलें।
  • [Source Branch] - समाधान को प्रतिबद्ध करने के लिए Git शाखा से प्रतिस्थापित करें।
  • [Target Branch] - समाधान प्रतिबद्धता के लिए बनाए जाने वाले Git शाखा के साथ प्रतिस्थापित करें। Target Branch वैकल्पिक है. यदि आप कोई लक्ष्य शाखा निर्दिष्ट नहीं करते हैं, तो आपका समाधान Source Branch के लिए प्रतिबद्ध है।

Power Automate प्रवाह जो संबद्ध परिनियोजन चरण को पुनः प्राप्त करने के लिए एक चरण के साथ OnDeploymentRequested ट्रिगर दिखाता है और HTTP कनेक्टर का उपयोग करके GitHub वर्कफ़्लो को चलाता और कॉल करता है

अगले कदम

पाइपलाइन चलाएं Power Platform

भी देखें

GitHub क्रियाओं के लिए त्वरित प्रारंभ
पाइपलाइनों का विस्तार करें Power Platform
बादल प्रवाह क्या हैं?