Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Dit artikel demonstreert het gebruik van GitHub Actions en Power Automate-cloudstromen voor het uitbreiden van pipelines in Power Platform. Wanneer een pipeline-implementatie wordt ingediend, activeert een cloudstroom de GitHub-werkstroom om de broncode van het artefact te downloaden, uit te pakken en door te voeren naar een GitHub-vertakking.
Werkstroomdetails
De werkstroom wordt geactiveerd via een workflow_dispatch-gebeurtenis. De werkstroom wordt uitgevoerd op ubuntu-latest en heeft de contents: write-machtiging om wijzigingen door te voeren in de vertakking van de GitHub-opslagplaats.
De werkstroom bestaat uit de volgende stappen:
-
actions/checkout@v3: controleert de opslagplaats. -
create new branch if specified: maakt een nieuwe vertakking als eentarget_branchis opgegeven in de invoer. -
download solution from artifact: downloadt de oplossing van het artefact dat door pipelines is gemaakt. -
unpack solution: pakt de oplossing uit. -
commit changes: voert wijzigingen door in de bestaande of nieuwe vertakking. -
push to branch: stuurt de vastgelegde wijzigingen door naar de bronvertakking.
Werkstroominvoer
De volgende werkstroominvoer is vereist of optioneel:
-
artifact_url(vereist): de URL van de Microsoft Dataverse-rij (record)-id voor het artefact dat door de pipelines is gemaakt. -
solution_name(vereist): naam van de oplossing in de Dataverse-omgeving. -
source_branch(vereist): vertakking voor de commit van de oplossing. -
target_branch(optioneel): vertakking die moet worden gemaakt voor de commit van de oplossing. Indien niet opgegeven, wordtsource_branchgebruikt. -
commit_message(vereist): bericht voor de commit.
Werkstroomgeheimen
De volgende geheimen zijn vereist om verbinding te maken met Dataverse met behulp van een toepassingsgebruiker die is geconfigureerd in Dataverse en in Microsoft Entra ID (AD). Configureer deze geheimen in de instellingen voor de GitHub-opslagplaats.
-
CLIENT_ID: de client-id van de geregistreerde Microsoft Entra-toepassing. -
TENANT_ID: de tenant-id van de Microsoft Entra-map die aan de Microsoft Entra-toepassing is gekoppeld. -
CLIENT_SECRET: het clientgeheim van de geregistreerde Microsoft Entra-toepassing.
Ga voor meer informatie naar Gecodeerde geheimen maken en gebruiken en Een toepassingsgebruiker maken.
Werkstroomcode
Hieronder vindt u de werkstroomcode van 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 }}
}
Notitie
De Dataverse-web-API die wordt gebruikt om het oplossingsartefact te downloaden, heeft een maximale bestandsgrootte van 16 MB.
Voorbeeld van Power Automate-stroom
Als u een GitHub-werkstroom wilt aanroepen, kunt u een Power Automate-stroom maken die wordt geactiveerd wanneer een implementatieaanvraag wordt uitgevoerd in Dataverse. De stroom kan worden geconfigureerd om de vereiste invoer door te geven aan de GitHub-werkstroom. Ga voor meer informatie over het maken van een Power Automate-stroom naar Een stroom maken.
Stroomdetails
De stroom wordt geactiveerd wanneer de OnDeploymentRequested-actie wordt uitgevoerd in Dataverse. De stroom roept de HTTP-connector aan om de GitHub-werkstroom te activeren. De stroom geeft de vereiste invoer door aan de GitHub-werkstroom. Neem de volgende invoer op in de aanvraagtekst:
-
artifact_url: URL van het Dataverse-oplossingsartefact dat is gemaakt door de pipelines. -
solution_name: naam van de oplossing in de Dataverse-omgeving. -
user_name: gebruikersnaam voor de doorvoering. -
source_branch: vertakking voor de doorvoering van de oplossing. -
target_branch: vertakking die moet worden gemaakt voor de commit van de oplossing. -
commit_message: bericht voor de doorvoering.
De waarden die zijn doorgegeven aan de artifact_url, solution_name en user_name worden opgehaald uit de uitvoer van de actie die de pipeline heeft geactiveerd. De commit_message wordt opgehaald uit de uitvoeringsrij van de implementatiefase in 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']}
De stroom gebruikt ook een persoonlijke toegangstoken (PAT) om te verifiëren met GitHub. Ga voor meer informatie over het maken van een persoonlijk toegangstoken voor GitHub naar Een persoonlijk toegangstoken maken. De PAT wordt doorgegeven in de Authorization-header van de HTTP-aanvraag.
Werk de volgende waarden bij in de stroom:
-
[GitHub Personal Access Token]- Vervang door uw persoonlijke GitHub-toegangstoken. -
[GitHub Organization]- Vervang door uw GitHub-organisatienaam. -
[GitHub Repository]- Vervang door uw GitHub-opslagplaatsnaam. -
[GitHub Workflow YAML File]- Vervang door de naam van het YAML-bestand voor uw GitHub-werkstroom. -
[Source Branch]- Vervang door de Git-vertakking om de oplossing door te voeren. -
[Target Branch]- Vervang door de Git-vertakking die moet worden gemaakt voor het doorvoeren van de oplossing.Target Branchis optioneel. Als u geen doelvertakking specificeert, wordt uw oplossing doorgevoerd naar deSource Branch.
Volgende stappen
Pijplijnen uitvoeren in Power Platform
Zie ook
Snelstart voor GitHub Actions
Pijplijnen uitbreiden in Power Platform
Wat zijn cloudstromen?