<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Jared Zagelbaum on Medium]]></title>
        <description><![CDATA[Stories by Jared Zagelbaum on Medium]]></description>
        <link>https://medium.com/@jzagelbaum?source=rss-4e4cd3c62086------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*h1tPH1lbDItvZc8zLWy2vA.jpeg</url>
            <title>Stories by Jared Zagelbaum on Medium</title>
            <link>https://medium.com/@jzagelbaum?source=rss-4e4cd3c62086------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 22:54:41 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@jzagelbaum/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Updated (December 2024) CICD Implementation for Azure Data Factory using Github Actions]]></title>
            <link>https://medium.com/@jzagelbaum/updated-december-2024-cicd-implementation-for-azure-data-factory-using-github-actions-d6c522f2ef1c?source=rss-4e4cd3c62086------2</link>
            <guid isPermaLink="false">https://medium.com/p/d6c522f2ef1c</guid>
            <category><![CDATA[azure]]></category>
            <category><![CDATA[github-actions]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[azure-data-factory]]></category>
            <category><![CDATA[microsoft-fabric]]></category>
            <dc:creator><![CDATA[Jared Zagelbaum]]></dc:creator>
            <pubDate>Mon, 23 Dec 2024 14:31:02 GMT</pubDate>
            <atom:updated>2024-12-23T14:31:02.001Z</atom:updated>
            <content:encoded><![CDATA[<p>In a previous blog post I described how to implement a CICD pipeline for Azure Data Factory using marketplace actions:</p><p><a href="https://medium.com/microsoftazure/azure-data-factory-build-and-deploy-with-new-ci-cd-flow-using-github-actions-cd46c95054e0">Azure Data Factory build and deploy with new CI/CD flow using GitHub Actions | by Jared Zagelbaum | Microsoft Azure | Medium</a></p><p>The data factory marketplace actions are no longer being maintained as Microsoft makes the transition to fully investing and integrating Data Factory functionality into <a href="https://www.microsoft.com/en-us/microsoft-fabric?msockid=08b9cc8b95af6ced1272d8cc91af67e9">Microsoft Fabric</a>.</p><p>To support customers that are continuing to use Azure Data Factory along with GitHub Actions, I’ve developed a new sample yaml for the CICD workflow as a reference: <a href="https://github.com/jzagelbaum/Sample-CICD-for-ADF-with-GitHub-Actions/blob/main/.github/workflows/cicd.yml">Sample-CICD-for-ADF-with-GitHub-Actions/.github/workflows/cicd.yml at main · jzagelbaum/Sample-CICD-for-ADF-with-GitHub-Actions</a>.</p><p>This action workflow follows all of the recommended practices for Azure Data Factory Releases (<a href="https://learn.microsoft.com/en-us/azure/data-factory/continuous-integration-delivery-improvements">Automated publishing for continuous integration and delivery — Azure Data Factory | Microsoft Learn</a>) including the pre and post deployment PowerShell script and uses the latest versions of the Azure marketplace action dependencies.</p><p>The authentication to Azure CLI leverages a user assigned managed identity and federated credentials per best practice and the setup steps are included in <a href="https://medium.com/u/8f5f2c9efba3">Olga Molocenco</a>’s prior post: <a href="https://techcommunity.microsoft.com/blog/fasttrackforazureblog/azure-data-factory-cicd-with-github-actions/3768493">Azure Data Factory CI/CD with GitHub Actions | Microsoft Community Hub</a></p><p>The ADFUtilities NPM package has not received any recent updates as of late either. I hope this helps bridge any gaps in the meantime for those of you supporting Azure Data Factory implementations in your current environment.</p><pre>name: Validate, Export and Deploy ARM Template and ADF pre / post deployment scripts<br><br>on:<br>  push:<br>    branches:<br>      - main<br><br>permissions:<br>  id-token: write<br>  contents: read<br><br>jobs:<br>  build:<br>    runs-on: ubuntu-latest<br><br>    steps:<br>    - name: Checkout repository<br>      uses: actions/checkout@v4<br><br>    - name: Install Node.js<br>      uses: actions/setup-node@v3<br>      with:<br>        node-version: &#39;18.x&#39;<br><br>    - name: Install npm packages<br>      run: npm install<br>      working-directory: ${{github.workspace}}/build # replace with the package.json folder<br><br>    - name: Validate Data Factory resources<br>      run: npm run build validate ${{github.workspace}} /subscriptions/&lt;replace with dev sub id&gt;/resourceGroups/&lt;replace with dev rg&gt;/providers/Microsoft.DataFactory/factories/&lt;replace with dev adf name&gt;<br>      working-directory: ${{github.workspace}}/build # replace with the package.json folder<br><br>    - name: Validate and Generate ARM template<br>      run: npm run build export ${{github.workspace}} /subscriptions/&lt;replace with dev sub id&gt;/resourceGroups/&lt;replace with dev rg&gt;/providers/Microsoft.DataFactory/factories/&lt;replace with dev adf name&gt; &quot;ArmTemplate&quot;<br>      # For using preview that allows you to only stop/start triggers that are modified, uncomment the below line and make sure the package.json contains the build-preview command.<br>      # run: npm run build-preview export ./&lt;Root-folder-from-Git-configuration-settings-in-ADF&gt; /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/GartnerMQ2021/providers/Microsoft.DataFactory/factories/Dev-GartnerMQ2021-DataFactory &quot;ArmTemplate&quot;<br>      working-directory: ${{github.workspace}}/build # replace with the package.json folder<br><br>    - name: Upload ARM template artifact<br>      uses: actions/upload-artifact@v4<br>      with:<br>        name: ArmTemplates<br>        path: ${{github.workspace}}/build/ArmTemplate # replace with generated ARM template folder<br><br>  release:<br>    needs: build<br>    runs-on: ubuntu-latest<br><br>    steps:<br><br>        <br> # we 1st download the previously uploaded artifact so we can leverage it later in the release job     <br>      - name: Download a Build Artifact<br>        uses: actions/download-artifact@v4<br>        with:<br>          name: ArmTemplates # (5) Artifact name <br><br><br> # Display the structure of the downloaded files for debugging purposes<br> #     - name: Display structure of downloaded files<br> #       run: ls -R<br><br>      - name: Login via Az module<br>        uses: azure/login@v2<br>        with:<br>          client-id: ${{ secrets.AZURE_CLIENT_ID }}<br>          tenant-id: ${{ secrets.AZURE_TENANT_ID }}<br>          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}<br>          enable-AzPSSession: true       <br><br><br>      - name: Run Pre-deployment PowerShell Script File<br>        uses: azure/powershell@v2<br>        with:<br>         inlineScript: |<br>          ./PrePostDeploymentScript.ps1 `<br>          -armTemplate ${{github.workspace}}/ARMTemplateForFactory.json `<br>          -ArmTemplateParameters ${{github.workspace}}/ARMTemplateParametersForFactory.json `<br>          -ResourceGroupName &#39;&lt;replace with target resource group for deployment&gt;&#39; `<br>          -DataFactoryName &#39;&lt;replace with target data factory name&gt;&#39;`<br>          -predeployment $true `<br>          -deleteDeployment $false<br>         azPSVersion: &quot;latest&quot;<br><br>      - name: Run ARM deploy<br>        uses: azure/arm-deploy@v2<br>        with:<br>            resourceGroupName: &#39;&lt;replace with target resource group for deployment&gt;&#39;  <br>            template: &#39;ARMTemplateForFactory.json&#39; <br>            parameters: ARMTemplateParametersForFactory.json factoryName=&lt;replace with target data factory name&gt;  #add additional overide parameters if needed here &#39;&#39;<br><br>            <br>      - name: Run Post-deployment PowerShell Script File<br>        uses: azure/powershell@v2<br>        with:<br>         inlineScript: |<br>          ./PrePostDeploymentScript.ps1 `<br>          -armTemplate ${{github.workspace}}/ARMTemplateForFactory.json ` <br>          -ArmTemplateParameters ${{github.workspace}}/ARMTemplateParametersForFactory.json `<br>          -ResourceGroupName &#39;&lt;replace with target resource group for deployment&gt;&#39; `<br>          -DataFactoryName &#39;&lt;replace with target data factory name&gt;&#39;`<br>          -predeployment $false `<br>          -deleteDeployment $true<br>         azPSVersion: &quot;latest&quot;</pre><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d6c522f2ef1c" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Azure Data Factory build and deploy with new CI/CD flow using GitHub Actions]]></title>
            <link>https://medium.com/microsoft/azure-data-factory-build-and-deploy-with-new-ci-cd-flow-using-github-actions-cd46c95054e0?source=rss-4e4cd3c62086------2</link>
            <guid isPermaLink="false">https://medium.com/p/cd46c95054e0</guid>
            <category><![CDATA[azure-data-factory]]></category>
            <category><![CDATA[github-actions]]></category>
            <dc:creator><![CDATA[Jared Zagelbaum]]></dc:creator>
            <pubDate>Fri, 03 Mar 2023 20:37:43 GMT</pubDate>
            <atom:updated>2023-08-09T15:55:18.395Z</atom:updated>
            <content:encoded><![CDATA[<p>Azure Data Factory (ADF) now supports an ADFUtilities NPM package, <a href="https://www.npmjs.com/package/@microsoft/azure-data-factory-utilities">@microsoft/azure-data-factory-utilities</a>, to allow for build activities to run independently of the service. This post will show you how to setup a sample end to end workflow using Github actions with the new ci/cd flow.</p><p>A previous blog post in Technet, <a href="https://techcommunity.microsoft.com/t5/fasttrack-for-azure/azure-data-factory-ci-cd-with-github-actions/ba-p/3444374">Azure Data Factory CI/CD with GitHub Actions</a>, outlined how to setup GitHub Actions for ADF using the manual publish flow. The initial setup steps and requirements are the same up through to “Configure the GitHub Secrets”.</p><p><strong>The updated flow:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/977/0*mW2XYfY0POijaPfd.png" /><figcaption><a href="https://learn.microsoft.com/en-us/azure/data-factory/continuous-integration-delivery-improvements#the-new-cicd-flow">Automated publishing for continuous integration and delivery — Azure Data Factory | Microsoft Learn</a></figcaption></figure><p><strong>Updated guidance on creating the workflow to build and deploy the ARM template:</strong></p><p>In addition to the ADFUtilities NPM package, there are <a href="https://github.com/marketplace?type=actions">marketplace actions</a> published by Azure that make it even easier to implement the build and deploy job steps into your workflow. For validate and generate ARM templates we can use <a href="https://github.com/marketplace/actions/data-factory-export">data-factory-export</a> and for release there is <a href="https://github.com/marketplace/actions/data-factory-deploy">data-factory-deploy</a>.</p><p><strong>Putting it all together, we can implement this workflow as follows:</strong></p><ol><li>Follow steps from <a href="https://techcommunity.microsoft.com/t5/fasttrack-for-azure/azure-data-factory-ci-cd-with-github-actions/ba-p/3444374">Azure Data Factory CI/CD with GitHub Actions</a> through to “Configure the GitHub Secrets”.</li><li>Add an additional secret that is the name of the Azure Data Factory deployment target.</li><li>Add a .yaml workflow definition file in the .github/workflows directory of your collaboration branch. It can have any name; in my repo I just named it after the branch:</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*PKGgGbERDCx7AyD4sPMZOA.png" /><figcaption>Repo with GitHub workflow directory</figcaption></figure><p>Sample .yaml:</p><pre>name: Deploy ARM template to Azure Data Factory<br><br>on:<br>  push:<br>    branches:<br>      - main<br><br>jobs:<br>  build:<br>    runs-on: ubuntu-latest<br>    steps:<br>      - name: Checkout code<br>        uses: actions/checkout@v2<br><br>      - name: Validate ARM template<br>        uses: Azure/data-factory-validate-action@v1.1.5<br>     <br><br>      - name: Export Azure Data Factory<br>        id: export<br>        uses: Azure/data-factory-export-action@v1.2.0<br>     <br>      <br>      - name: Publish ARM template<br>        uses: actions/upload-artifact@v2<br>        with:<br>          name: adf-armtemplate<br>          path: ${{ steps.export.outputs.arm-template-directory }}<br>          if-no-files-found: error<br>  <br>  deploy:<br>    runs-on: ubuntu-latest<br>    steps:<br>      - name: Login via Az module<br>        uses: azure/login@v1<br>        with:<br>          creds: ${{ secrets.AZURE_CREDENTIALS }}<br>          enable-AzPSSession: true <br>     <br>      - name: Download ARM template<br>        uses: actions/download-artifact@v3<br>        with:<br>          name: adf-armtemplate<br><br>      - name: Deploy resources<br>        uses: Azure/data-factory-deploy-action@v1.2.0<br>        with:<br>          resourceGroupName: ${{ secrets.AZURE_RG }} <br>          dataFactoryName: ${{ secrets.AZURE_DATA_FACTORY }} <br><br>          </pre><p>For an explanation of the .yaml file, I phoned a friend:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/795/1*EdFdXdfzIerjx9qpjcOAeA.png" /><figcaption>ChatGPT code explanation curtesy of chat.openai.com</figcaption></figure><p>5. Add a branch protection rule to require PRs against the collaboration branch (at minimum):</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*eac2wz9ut3sLNAYmaniaRg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OHl1eR24r4QcZGJ2ROtTqQ.png" /></figure><p>6. Disable Publish (from ADF Studio):</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xLsSb029bbMdBDg2F4db6Q.png" /><figcaption>Git configuration with Publish (from ADF Studio) Disabled</figcaption></figure><p>Now you have a baseline workflow for implementing the new ADF ci/cd flow using GitHub Actions. Instead of manually publishing updates to the ADF instance we initiate the build and deploy when committing the PR.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/601/1*tbsaZ8mlD1XAN7m8tr14Jw.png" /><figcaption>Initiating a PR from ADF Studio</figcaption></figure><p>Releases to higher environments can be managed by cloning the workflow deploy (and build) steps and replacing triggers and secret references as needed. The use of marketplace actions allows us the implement best practices for ADF deployment with a minimum amount of code.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cd46c95054e0" width="1" height="1" alt=""><hr><p><a href="https://medium.com/microsoft/azure-data-factory-build-and-deploy-with-new-ci-cd-flow-using-github-actions-cd46c95054e0">Azure Data Factory build and deploy with new CI/CD flow using GitHub Actions</a> was originally published in <a href="https://medium.com/microsoft">Microsoft</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>