नोट
इस पेज तक पहुँच के लिए प्रमाणन की आवश्यकता होती है. आप साइन इन करने या निर्देशिकाओं को बदलने का प्रयास कर सकते हैं.
इस पेज तक पहुँच के लिए प्रमाणन की आवश्यकता होती है. आप निर्देशिकाओं को बदलने का प्रयास कर सकते हैं.
यह आलेख पाइपलाइनों का विस्तार करने के लिए GitHub क्रियाएँ और Power Automate क्लाउड प्रवाह का उपयोग प्रदर्शित करता है। Power Platform जब पाइपलाइन परिनियोजन सबमिट किया जाता है, तो क्लाउड प्रवाह GitHub वर्कफ़्लो को डाउनलोड करने, अनपैक करने और GitHub शाखा में आर्टिफैक्ट के स्रोत कोड को प्रतिबद्ध करने के लिए ट्रिगर करता है।
कार्यप्रवाह विवरण
वर्कफ़्लो को workflow_dispatch ईवेंट के माध्यम से ट्रिगर किया जाता है. वर्कफ़्लो ubuntu-latest पर चलता है और इसमें contents: write GitHub रिपोजिटरी शाखा में परिवर्तन करने की अनुमति है।
कार्यप्रवाह में निम्नलिखित चरण शामिल हैं:
-
actions/checkout@v3: रिपोजिटरी की जांच करता है. -
create new branch if specified: यदि इनपुट में atarget_branchनिर्दिष्ट है तो एक नई शाखा बनाता है। -
download solution from artifact: पाइपलाइनों द्वारा बनाए गए आर्टिफैक्ट से समाधान डाउनलोड करता है। -
unpack solution: समाधान को खोलता है. -
commit changes: मौजूदा या नई शाखा में परिवर्तन करता है। -
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के लिए प्रतिबद्ध है।
अगले कदम
भी देखें
GitHub क्रियाओं के लिए त्वरित प्रारंभ
पाइपलाइनों का विस्तार करें Power Platform
बादल प्रवाह क्या हैं?