<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xx="tags" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>DevOps - Ken Muse</title><atom:link href="https://www.kenmuse.com/tags/devops/rss/" rel="self" type="application/rss+xml"/><link>https://www.kenmuse.com/tags/devops/</link><description>Discover Azure, DevOps, and development insights with Ken Muse, a DevOps Architect at GitHub and 4x Microsoft Azure MVP</description><language>en-us</language><sy:updatePeriod>weekly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><image><title>DevOps - Ken Muse</title><link>https://www.kenmuse.com/tags/devops/</link><width>32</width><url>https://www.kenmuse.com/tags/devops/favicon/favicon-32x32.png</url><height>32</height></image><atom:link href="https://www.kenmuse.com/tags/devops/rss/index.xml" rel="self" type="application/rss+xml"/><item><title>Adding an MCP Server to a VS Code Extension</title><link>https://www.kenmuse.com/blog/adding-mcp-server-to-vs-code-extension/</link><pubDate>Thu, 19 Feb 2026 00:00:00 -0500</pubDate><guid isPermaLink="false">adding-mcp-server-to-vs-code-extension</guid><category>AI</category><category>DevOps</category><category>Programming</category><description>Learn how to embed an MCP server in a VS Code extension to take your development work to the next level.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/adding-mcp-server-to-vs-code-extension/images/banner.png"/></item><item><title>GitHub Agentic Workflows Bring AI Agents to Actions</title><link>https://www.kenmuse.com/blog/github-agentic-workflows-bring-ai-agents-to-actions/</link><pubDate>Fri, 13 Feb 2026 00:00:00 -0500</pubDate><guid isPermaLink="false">github-agentic-workflows-bring-ai-agents-to-actions</guid><category>AI</category><category>DevOps</category><category>GitHub</category><description>Explore GitHub's new Agentic Workflows -- AI coding agents in GitHub Actions with defense-in-depth security and natural language automation.</description><enclosure type="image/ebp" url="https://www.kenmuse.com/blog/github-agentic-workflows-bring-ai-agents-to-actions/images/banner.webp"/></item><item><title>What Is MCP and Why Do Developers Care?</title><link>https://www.kenmuse.com/blog/what-is-mcp-and-why-do-developers-care/</link><pubDate>Sat, 31 Jan 2026 00:00:00 -0500</pubDate><guid isPermaLink="false">what-is-mcp-and-why-do-developers-care</guid><category>AI</category><category>DevOps</category><category>GitHub</category><description>Discover Model Context Protocol (MCP), the open standard that lets AI models connect directly to your databases, APIs, and tools for deterministic results.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/what-is-mcp-and-why-do-developers-care/images/mcp.png"/></item><item><title>Configuring GitHub Runners With a Dotfiles Action</title><link>https://www.kenmuse.com/blog/configuring-github-runners-with-a-dotfiles-action/</link><pubDate>Fri, 23 Jan 2026 00:00:00 -0500</pubDate><guid isPermaLink="false">configuring-github-runners-with-a-dotfiles-action</guid><category>DevOps</category><category>GitHub</category><category>Security</category><description>Transform your dotfiles repo into a GitHub Action that secures runners without tokens or manual cloning.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/configuring-github-runners-with-a-dotfiles-action/images/banner.png"/></item><item><title>Storing Data in Git Objects With Notes</title><link>https://www.kenmuse.com/blog/storing-data-in-git-objects-with-notes/</link><pubDate>Thu, 15 Jan 2026 00:00:00 -0500</pubDate><guid isPermaLink="false">storing-data-in-git-objects-with-notes</guid><category>DevOps</category><description>Learn how to use Git notes to attach metadata like build results or review comments to commits without rewriting history or breaking signatures.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/storing-data-in-git-objects-with-notes/images/banner.jpg"/></item><item><title>Why Your Perforce Branch History Is Missing in Git</title><link>https://www.kenmuse.com/blog/why-perforce-branch-history-is-missing-in-git/</link><pubDate>Thu, 08 Jan 2026 00:00:00 -0500</pubDate><guid isPermaLink="false">why-perforce-branch-history-is-missing-in-git</guid><category>DevOps</category><category>GitHub</category><description>Your Perforce branch history vanishes in Git because Git has no place to store it -- here's why and how to help your team adapt.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/why-perforce-branch-history-is-missing-in-git/images/banner.jpg"/></item><item><title>Understanding How Git Merges Work</title><link>https://www.kenmuse.com/blog/understanding-how-git-merges-work/</link><pubDate>Fri, 02 Jan 2026 00:00:00 -0500</pubDate><guid isPermaLink="false">understanding-how-git-merges-work</guid><category>DevOps</category><category>GitHub</category><description>Demystifying Git merges -- from merge commits and fast-forwards to rebases and cherry-picks. Learn what's really happening under the hood.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/understanding-how-git-merges-work/images/merging.png"/></item><item><title>Understanding How Git Stores Data</title><link>https://www.kenmuse.com/blog/understanding-how-git-stores-data/</link><pubDate>Mon, 29 Dec 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">understanding-how-git-stores-data</guid><category>DevOps</category><category>GitHub</category><description>A deep dive into Git's internal storage model -- how blobs, trees, and commits work together to track your code's history without a traditional database.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/understanding-how-git-stores-data/images/banner.jpg"/></item><item><title>Deploying Services on GitHub Runner Custom Images</title><link>https://www.kenmuse.com/blog/deploying-services-on-github-runner-custom-images/</link><pubDate>Fri, 26 Dec 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">deploying-services-on-github-runner-custom-images</guid><category>DevOps</category><category>GitHub</category><description>Deploy persistent services on custom GitHub runner images to speed up builds, reduce egress costs, and cut external dependencies.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/deploying-services-on-github-runner-custom-images/images/fairies.png"/></item><item><title>Caching Repositories on GitHub Runner Custom Images</title><link>https://www.kenmuse.com/blog/caching-repositories-on-github-runner-custom-images/</link><pubDate>Wed, 24 Dec 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">caching-repositories-on-github-runner-custom-images</guid><category>DevOps</category><category>GitHub</category><description>Cache large repositories on custom GitHub runner images to speed up clones from minutes to seconds using Git reference clones.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/caching-repositories-on-github-runner-custom-images/images/elves.png"/></item><item><title>Masking Sensitive Information on GitHub Runner Custom Images</title><link>https://www.kenmuse.com/blog/masking-secrets-github-runner-custom-images/</link><pubDate>Mon, 22 Dec 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">masking-secrets-github-runner-custom-images</guid><category>DevOps</category><category>GitHub</category><category>Security</category><description>Learn the best way to protect sensitive information from leaking into the logs on GitHub runner custom images during both build-time and run-time.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/masking-secrets-github-runner-custom-images/images/banner.png"/></item><item><title>Using GitHub Custom Images with OIDC</title><link>https://www.kenmuse.com/blog/using-github-custom-images-with-oidc/</link><pubDate>Fri, 19 Dec 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">using-github-custom-images-with-oidc</guid><category>DevOps</category><category>GitHub</category><category>Security</category><description>Learn how to use OIDC tokens in GitHub Actions custom images to authenticate with private container registries without storing credentials.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/using-github-custom-images-with-oidc/images/santa-oidc.png"/></item><item><title>Pre-Caching Docker Images on GitHub Runner Custom Images</title><link>https://www.kenmuse.com/blog/pre-caching-docker-images-on-github-runner-custom-images/</link><pubDate>Wed, 17 Dec 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">pre-caching-docker-images-on-github-runner-custom-images</guid><category>Containers</category><category>DevOps</category><category>GitHub</category><description>Discover how to improve GitHub Actions performance and drastically cut the time and bandwidth required to use Docker images in your workflows.</description><enclosure type="image/ebp" url="https://www.kenmuse.com/blog/pre-caching-docker-images-on-github-runner-custom-images/images/cached-docker.webp"/></item><item><title>Using GitHub Custom Images for Workflow Validation</title><link>https://www.kenmuse.com/blog/github-custom-images-workflow-validation/</link><pubDate>Mon, 15 Dec 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">github-custom-images-workflow-validation</guid><category>DevOps</category><category>GitHub</category><description>Use pre-job scripts in custom runner images to enforce workflow validation and ensure only approved workflows run on your GitHub Actions runners.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/github-custom-images-workflow-validation/images/santa.png"/></item><item><title>Layering Approaches for Secure Secrets</title><link>https://www.kenmuse.com/blog/layering-approaches-for-secure-secrets/</link><pubDate>Fri, 12 Dec 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">layering-approaches-for-secure-secrets</guid><category>Security</category><category>DevOps</category><description>Learn to layer secret management techniques through practical examples that build defense-in-depth security for GitHub Actions, containers, and more.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/layering-approaches-for-secure-secrets/images/criminal-impossible-safe.png"/></item><item><title>More Ways to Secure Secrets</title><link>https://www.kenmuse.com/blog/more-ways-to-secure-secrets/</link><pubDate>Wed, 10 Dec 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">more-ways-to-secure-secrets</guid><category>Security</category><category>DevOps</category><description>Move beyond static credentials with federated auth, managed identities, and secret vaults -- learn the tradeoffs and security considerations.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/more-ways-to-secure-secrets/images/criminal-nested-safe.png"/></item><item><title>Securing Access to Secrets</title><link>https://www.kenmuse.com/blog/securing-access-to-secrets/</link><pubDate>Mon, 08 Dec 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">securing-access-to-secrets</guid><category>Security</category><category>DevOps</category><description>Explore practical approaches to storing secrets securely, from files to HSMs, with real-world hardening strategies you can implement today.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/securing-access-to-secrets/images/criminal-safe.png"/></item><item><title>Custom GitHub Runner Images With Pre- and Post-Job Scripts</title><link>https://www.kenmuse.com/blog/custom-github-runner-images-with-pre-and-post-job-scripts/</link><pubDate>Fri, 05 Dec 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">custom-github-runner-images-with-pre-and-post-job-scripts</guid><category>DevOps</category><category>GitHub</category><category>Security</category><description>Learn how to capture custom GitHub-hosted runner images, add pre- and post-job hooks, and make them part of your daily workflows.</description><enclosure type="image/ebp" url="https://www.kenmuse.com/blog/custom-github-runner-images-with-pre-and-post-job-scripts/images/custom-image-versions.webp"/></item><item><title>Using Azure Flexible Federation With GitHub Actions</title><link>https://www.kenmuse.com/blog/using-azure-flexible-federation-with-github-actions/</link><pubDate>Tue, 02 Dec 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">using-azure-flexible-federation-with-github-actions</guid><category>Azure</category><category>DevOps</category><category>GitHub</category><category>Security</category><description>Use Azure flexible federated identity credentials with GitHub Actions to secure your workflows with custom OIDC claims approval expressions.</description><enclosure type="image/ebp" url="https://www.kenmuse.com/blog/using-azure-flexible-federation-with-github-actions/images/banner.webp"/></item><item><title>How I Avoided Shai-Hulud's Second Coming (Part 2)</title><link>https://www.kenmuse.com/blog/how-i-avoided-shai-hulud-second-coming-part-2/</link><pubDate>Fri, 28 Nov 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">how-i-avoided-shai-hulud-second-coming-part-2</guid><category>DevOps</category><category>GitHub</category><category>Security</category><description>How signed commits and repository protections completed my defense against the Shai-Hulud supply chain attack.</description><enclosure type="image/ebp" url="https://www.kenmuse.com/blog/how-i-avoided-shai-hulud-second-coming-part-2/images/activity-log.webp"/></item><item><title>How I Avoided Shai-Hulud's Second Coming (Part 1)</title><link>https://www.kenmuse.com/blog/how-i-avoided-shai-hulud-second-coming-part-1/</link><pubDate>Wed, 26 Nov 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">how-i-avoided-shai-hulud-second-coming-part-1</guid><category>Containers</category><category>DevOps</category><category>GitHub</category><category>Security</category><description>Simple security practices that protected my dev environment from the Shai-Hulud supply chain attack -- and how you can use them too.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/how-i-avoided-shai-hulud-second-coming-part-1/images/desert-worm.png"/></item><item><title>Understanding IPv6: From GitHub's IPs to Kubernetes and ARC</title><link>https://www.kenmuse.com/blog/understanding-ipv6-from-github-to-kubernetes-arc/</link><pubDate>Sat, 08 Nov 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">understanding-ipv6-from-github-to-kubernetes-arc</guid><category>Containers</category><category>DevOps</category><category>General</category><description>Learn how IPv6 affects your DevOps workflows, from GitHub's IP ranges to Kubernetes networking, Docker containers, and the latest ARC improvements.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/understanding-ipv6-from-github-to-kubernetes-arc/images/docker-desktop.png"/></item><item><title>The Hidden Danger in Git Ref Names</title><link>https://www.kenmuse.com/blog/the-hidden-danger-in-git-ref-names/</link><pubDate>Fri, 31 Oct 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">the-hidden-danger-in-git-ref-names</guid><category>DevOps</category><category>GitHub</category><category>Security</category><description>A Halloween lesson: how a weaponized Git branch name let attackers inject code via a GitHub expression and the simple steps you can take to block it.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/the-hidden-danger-in-git-ref-names/images/halloween-banner.png"/></item><item><title>The Key to a Secure CI/CD Process</title><link>https://www.kenmuse.com/blog/key-to-a-secure-ci-cd-process/</link><pubDate>Mon, 20 Oct 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">key-to-a-secure-ci-cd-process</guid><category>DevOps</category><category>GitHub</category><category>Security</category><description>Learn how to create a secure CI/CD pipeline by starting with securing your most important asset: your people.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/key-to-a-secure-ci-cd-process/images/banner.png"/></item><item><title>Speed Up Git Clones With Local References</title><link>https://www.kenmuse.com/blog/speed-up-git-clones-with-local-references/</link><pubDate>Fri, 03 Oct 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">speed-up-git-clones-with-local-references</guid><category>DevOps</category><category>GitHub</category><description>Discover how to optimize Git clones by using references to share repository data and Git LFS objects across multiple systems.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/speed-up-git-clones-with-local-references/images/banner.png"/></item><item><title>Publishing npm Packages to GitHub Packages With Yarn</title><link>https://www.kenmuse.com/blog/publishing-npm-packages-to-github-with-yarn/</link><pubDate>Sat, 27 Sep 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">publishing-npm-packages-to-github-with-yarn</guid><category>DevOps</category><category>GitHub</category><category>Programming</category><description>Trying to publish npm packages to GitHub Packages with Yarn? Learn how to authenticate and publish your GitHub Packages with Yarn v4.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/publishing-npm-packages-to-github-with-yarn/images/banner.png"/></item><item><title>The New DevOps - Why AI Is Not Taking Your Job (Yet)</title><link>https://www.kenmuse.com/blog/the-new-devops-why-ai-is-not-taking-your-job-yet/</link><pubDate>Thu, 28 Aug 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">the-new-devops-why-ai-is-not-taking-your-job-yet</guid><category>AI</category><category>DevOps</category><category>Programming</category><description>Exploring why AI tools complement rather than replace developers, and how smart companies use AI to enhance team productivity instead of downsizing talent.</description><enclosure type="image/ebp" url="https://www.kenmuse.com/blog/the-new-devops-why-ai-is-not-taking-your-job-yet/images/good-ai.webp"/></item><item><title>Adding Help (man) to Buildroot Packages</title><link>https://www.kenmuse.com/blog/adding-help-with-man-to-buildroot-packages/</link><pubDate>Fri, 22 Aug 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">adding-help-with-man-to-buildroot-packages</guid><category>Containers</category><category>DevOps</category><description>A step-by-step guide to adding configurable man page support to custom Buildroot packages, extending the GitHub CLI package with comprehensive documentation.</description><enclosure type="image/ebp" url="https://www.kenmuse.com/blog/adding-help-with-man-to-buildroot-packages/images/menu-ghcli.webp"/></item><item><title>Creating a CodeQL Image for ARC With Python 2</title><link>https://www.kenmuse.com/blog/creating-a-codeql-image-for-arc-with-python-2/</link><pubDate>Thu, 24 Jul 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">creating-a-codeql-image-for-arc-with-python-2</guid><category>Containers</category><category>DevOps</category><category>GitHub</category><description>Add Python 2 support to your CodeQL Docker image using multistage builds (and some Docker tricks) to support security scanning in ARC.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/creating-a-codeql-image-for-arc-with-python-2/images/banner.png"/></item><item><title>Creating a CodeQL Image for ARC</title><link>https://www.kenmuse.com/blog/creating-a-codeql-image-for-arc/</link><pubDate>Sat, 19 Jul 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">creating-a-codeql-image-for-arc</guid><category>Containers</category><category>DevOps</category><category>GitHub</category><description>Learn how to build a custom Docker image with CodeQL pre-installed for GitHub ARC runners, eliminating download times and ensuring consistent analysis.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/creating-a-codeql-image-for-arc/images/banner2.png"/></item><item><title>Creating a Custom Buildroot Package For Binaries</title><link>https://www.kenmuse.com/blog/creating-a-custom-buildroot-package-for-binaries/</link><pubDate>Fri, 11 Jul 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">creating-a-custom-buildroot-package-for-binaries</guid><category>Containers</category><category>DevOps</category><description>A step-by-step guide to creating your first custom Buildroot package for a binary package containing an installable GitHub CLI.</description><enclosure type="image/ebp" url="https://www.kenmuse.com/blog/creating-a-custom-buildroot-package-for-binaries/images/banner.webp"/></item><item><title>Speeding Up the Buildroot Toolchain</title><link>https://www.kenmuse.com/blog/speeding-up-the-buildroot-toolchain/</link><pubDate>Sat, 05 Jul 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">speeding-up-the-buildroot-toolchain</guid><category>Containers</category><category>DevOps</category><description>Speed up your Buildroot builds with prebuilt toolchains, SDK reuse, and CI/CD caching. Enjoy faster results and less frustration!</description><enclosure type="image/ebp" url="https://www.kenmuse.com/blog/speeding-up-the-buildroot-toolchain/images/toolchain-options.webp"/></item><item><title>Configuring Buildroot for Crafting Images</title><link>https://www.kenmuse.com/blog/configuring-buildroot-for-crafting-images/</link><pubDate>Wed, 25 Jun 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">configuring-buildroot-for-crafting-images</guid><category>Containers</category><category>DevOps</category><description>Learn how to use Buildroot's menu system to create and configure a minimal, Bash-only image for Docker.</description><enclosure type="image/ebp" url="https://www.kenmuse.com/blog/configuring-buildroot-for-crafting-images/images/menu-main.webp"/></item><item><title>Building OCI Images With Buildroot</title><link>https://www.kenmuse.com/blog/building-oci-images-with-buildroot/</link><pubDate>Sat, 21 Jun 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">building-oci-images-with-buildroot</guid><category>Containers</category><category>DevOps</category><description>Build Docker images and OCI packages easily with Buildroot. Learn to automate, customize, and simplify your image creation process.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/building-oci-images-with-buildroot/images/banner.png"/></item><item><title>Calling Docker From Inside a GitHub Job Container</title><link>https://www.kenmuse.com/blog/calling-docker-from-inside-a-github-job-container/</link><pubDate>Sat, 24 May 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">calling-docker-from-inside-a-github-job-container</guid><category>Containers</category><category>DevOps</category><category>GitHub</category><description>Learn to run Docker commands inside a GitHub Actions job container and understand the magic behind how Actions creates and manages job and service containers.</description><enclosure type="image/ebp" url="https://www.kenmuse.com/blog/calling-docker-from-inside-a-github-job-container/images/banner.webp"/></item><item><title>Authenticating Docker in Docker Containers in Kubernetes</title><link>https://www.kenmuse.com/blog/authenticating-docker-in-docker-containers-in-kubernetes/</link><pubDate>Sat, 17 May 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">authenticating-docker-in-docker-containers-in-kubernetes</guid><category>Containers</category><category>DevOps</category><description>Discover how to securely authenticate Docker-in-Docker containers inside Kubernetes to enable private registry access.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/authenticating-docker-in-docker-containers-in-kubernetes/images/banner.png"/></item><item><title>Why Exporting Environment Variables Doesn't Work In Actions</title><link>https://www.kenmuse.com/blog/exporting-environment-variables-fails-in-github-actions/</link><pubDate>Sat, 10 May 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">exporting-environment-variables-fails-in-github-actions</guid><category>DevOps</category><category>GitHub</category><description>Ever wondered why you can't just export your environment variables in GitHub Actions? In this post, you'll learn why that happens and what you can do about it.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/exporting-environment-variables-fails-in-github-actions/images/excited-aliens.png"/></item><item><title>How to Dynamically Authenticate With Git</title><link>https://www.kenmuse.com/blog/how-to-dynamically-authenticate-with-git/</link><pubDate>Tue, 06 May 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">how-to-dynamically-authenticate-with-git</guid><category>DevOps</category><category>GitHub</category><category>Security</category><description>Discover practical techniques for dynamically authenticating with Git using environment variables or secret vaults to retrieve user credentials.</description><enclosure type="image/ebp" url="https://www.kenmuse.com/blog/how-to-dynamically-authenticate-with-git/images/banner.webp"/></item><item><title>How Does Git Authentication Work?</title><link>https://www.kenmuse.com/blog/how-does-git-authentication-work/</link><pubDate>Sat, 03 May 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">how-does-git-authentication-work</guid><category>DevOps</category><category>GitHub</category><category>Security</category><description>Discover the intricacies of Git authentication, how it works, and how to configure credential helpers to allow fine-grained control over authentication.</description><enclosure type="image/ebp" url="https://www.kenmuse.com/blog/how-does-git-authentication-work/images/banner.webp"/></item><item><title>Good Code Doesn't Care Where It Lives</title><link>https://www.kenmuse.com/blog/good-code-doesnt-care-where-it-lives/</link><pubDate>Mon, 21 Apr 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">good-code-doesnt-care-where-it-lives</guid><category>DevOps</category><category>Programming</category><description>Trying create code that is truly flexible? Learn how to write software and services that run everywhere: in VMs, containers, and serverless platforms.</description><enclosure type="image/ebp" url="https://www.kenmuse.com/blog/good-code-doesnt-care-where-it-lives/images/abstract.webp"/></item><item><title>Retrieving Properties From a Gitsigned Commit</title><link>https://www.kenmuse.com/blog/retrieving-properties-from-a-gitsigned-commit/</link><pubDate>Wed, 16 Apr 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">retrieving-properties-from-a-gitsigned-commit</guid><category>DevOps</category><category>Security</category><description>Learn how to extract and validate signed Git commits using the Gitsign certificates and OpenSSL to enhance your software supply chain security.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/retrieving-properties-from-a-gitsigned-commit/images/banner.png"/></item><item><title>Using Gitsign for Keyless Git Commit Signing</title><link>https://www.kenmuse.com/blog/using-gitsign-for-keyless-git-commit-signing/</link><pubDate>Sat, 12 Apr 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">using-gitsign-for-keyless-git-commit-signing</guid><category>DevOps</category><category>Security</category><description>Use Gitsign and GitHub Actions for keyless Git commit signing to enhance supply chain security and ensure code provenance without managing private keys.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/using-gitsign-for-keyless-git-commit-signing/images/banner.png"/></item><item><title>What's New in GitHub Actions Runner Controller</title><link>https://www.kenmuse.com/blog/whats-new-in-github-arc/</link><pubDate>Mon, 31 Mar 2025 00:00:00 -0400</pubDate><guid isPermaLink="false">whats-new-in-github-arc</guid><category>Containers</category><category>DevOps</category><category>GitHub</category><description>The new version of Actions Runner Controller has performance fixes, improved configurability, and a new approach to metrics. This post reviews those changes.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/whats-new-in-github-arc/images/banner.png"/></item><item><title>The Most Dangerous Phrase in Software Development</title><link>https://www.kenmuse.com/blog/most-dangerous-phrase-in-software-development/</link><pubDate>Sat, 01 Feb 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">most-dangerous-phrase-in-software-development</guid><category>DevOps</category><category>Programming</category><category>Security</category><description>Discover why "it should work" is software development's most dangerous phrase and how this mindset leads to unreliable, untested code.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/most-dangerous-phrase-in-software-development/images/banner.jpg"/></item><item><title>The Secret Life of Git Large File Storage</title><link>https://www.kenmuse.com/blog/secret-life-of-git-lfs/</link><pubDate>Sat, 25 Jan 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">secret-life-of-git-lfs</guid><category>DevOps</category><category>GitHub</category><description>Uncover the hidden secrets and inner workings of Git LFS! Learn the tricks behind how it uses native Git extensibility features to manage your large files.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/secret-life-of-git-lfs/images/git-lfs-push-hooks.png"/></item><item><title>Migrating Git With An LFS Configuration File</title><link>https://www.kenmuse.com/blog/migrating-git-with-lfs-config-file/</link><pubDate>Sat, 18 Jan 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">migrating-git-with-lfs-config-file</guid><category>DevOps</category><category>GitHub</category><description>Learn how to configure Git LFS endpoints and to safely migrate repositories that are using .lfsconfig to manage the storage location.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/migrating-git-with-lfs-config-file/images/banner.jpg"/></item><item><title>Defining an Infrastructure-as-Code Maturity Model</title><link>https://www.kenmuse.com/blog/defining-an-infrastructure-as-code-maturity-model/</link><pubDate>Sat, 11 Jan 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">defining-an-infrastructure-as-code-maturity-model</guid><category>DevOps</category><category>Programming</category><description>Infrastructure-as-code should continuously improve. This post introduces a maturity model to enhance how you develop testable and reusable IaC solutions.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/defining-an-infrastructure-as-code-maturity-model/images/banner.jpg"/></item><item><title>Managing Pod Resource Requests and Limits in Kubernetes</title><link>https://www.kenmuse.com/blog/managing-pod-resource-requests-and-limits-in-kubernetes/</link><pubDate>Thu, 02 Jan 2025 00:00:00 -0500</pubDate><guid isPermaLink="false">managing-pod-resource-requests-and-limits-in-kubernetes</guid><category>Containers</category><category>DevOps</category><description>In Kubernetes, we cannot manage resources at the pod level and must resort to setting requests and limits on containers. Learn how that's changing.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/managing-pod-resource-requests-and-limits-in-kubernetes/images/banner.jpg"/></item><item><title>Distributing .NET Dependencies and Settings With Packages</title><link>https://www.kenmuse.com/blog/distributing-dotnet-dependencies-and-settings-with-packages/</link><pubDate>Thu, 26 Dec 2024 00:00:00 -0500</pubDate><guid isPermaLink="false">distributing-dotnet-dependencies-and-settings-with-packages</guid><category>DevOps</category><category>Programming</category><description>Learn how to standardize development practices by distributing dependencies, settings, and analyzers using NuGet packages.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/distributing-dotnet-dependencies-and-settings-with-packages/images/banner.jpg"/></item><item><title>Using A Kubernetes Native Sidecar With GitHub ARC</title><link>https://www.kenmuse.com/blog/using-kubernetes-native-sidecars-with-github-arc/</link><pubDate>Fri, 20 Dec 2024 00:00:00 -0500</pubDate><guid isPermaLink="false">using-kubernetes-native-sidecars-with-github-arc</guid><category>Containers</category><category>DevOps</category><category>GitHub</category><description>Explore how to modernize the Docker-in-Docker support in GitHub Actions Runner Controller (ARC) using the latest Kubernetes feature: native sidecars.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/using-kubernetes-native-sidecars-with-github-arc/images/banner.png"/></item><item><title>Taking Advantage of Kubernetes Native Sidecars</title><link>https://www.kenmuse.com/blog/taking-advantage-of-kubernetes-native-sidecars/</link><pubDate>Thu, 19 Dec 2024 00:00:00 -0500</pubDate><guid isPermaLink="false">taking-advantage-of-kubernetes-native-sidecars</guid><category>Containers</category><category>DevOps</category><description>Kubernetes has a powerful feature that can help you build more robust deployments. Learn about native sidecars, the problems they solve and how to use them.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/taking-advantage-of-kubernetes-native-sidecars/images/banner.jpg"/></item><item><title>Exploring The Three Flavors of GitOps</title><link>https://www.kenmuse.com/blog/three-flavors-of-gitops/</link><pubDate>Sat, 14 Dec 2024 00:00:00 -0500</pubDate><guid isPermaLink="false">three-flavors-of-gitops</guid><category>DevOps</category><description>Discover the world of GitOps, where Git becomes your source of truth for deployments and learn the three models for defining your GitOps practices.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/three-flavors-of-gitops/images/banner.jpg"/></item><item><title>How to Test a .NET Package</title><link>https://www.kenmuse.com/blog/how-to-test-a-dotnet-package/</link><pubDate>Fri, 06 Dec 2024 00:00:00 -0500</pubDate><guid isPermaLink="false">how-to-test-a-dotnet-package</guid><category>DevOps</category><category>Programming</category><description>Packages are code, too! Like any code solution, you need to test your work. Learn how to test a custom .NET package that adds ZIP support to the build process.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/how-to-test-a-dotnet-package/images/banner.jpg"/></item><item><title>Distributing Custom .NET Tasks</title><link>https://www.kenmuse.com/blog/distributing-custom-dotnet-tasks/</link><pubDate>Wed, 27 Nov 2024 00:00:00 -0500</pubDate><guid isPermaLink="false">distributing-custom-dotnet-tasks</guid><category>DevOps</category><category>Programming</category><description>There's a simple trick to easily share .NET build tasks between developers. Learn to create a NuGet package that automatically ZIPs your builds for deployment.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/distributing-custom-dotnet-tasks/images/banner.jpg"/></item><item><title>Creating a Zip Package in .NET</title><link>https://www.kenmuse.com/blog/creating-a-zip-package-in-dotnet/</link><pubDate>Sat, 23 Nov 2024 00:00:00 -0500</pubDate><guid isPermaLink="false">creating-a-zip-package-in-dotnet</guid><category>Azure</category><category>DevOps</category><category>Programming</category><description>Compiling code and packaging it as a ZIP file to deploy a .NET application can be simplified to a single command with this native MSBuild feature.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/creating-a-zip-package-in-dotnet/images/banner.jpg"/></item><item><title>Migrating Submodules That Use Large File Storage (LFS)</title><link>https://www.kenmuse.com/blog/migrating-submodules-with-large-files-storage-lfs/</link><pubDate>Sat, 09 Nov 2024 00:00:00 -0500</pubDate><guid isPermaLink="false">migrating-submodules-with-large-files-storage-lfs</guid><category>DevOps</category><category>GitHub</category><description>When repositories are migrated, it's easy to break the links to the submodules. In this post, learn why it happens, how to avoid it, and how to fix it.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/migrating-submodules-with-large-files-storage-lfs/images/banner.png"/></item><item><title>What Is a GitHub Tool (And Why to Use Them)</title><link>https://www.kenmuse.com/blog/what-is-a-github-tool-and-why-to-use-them/</link><pubDate>Sat, 02 Nov 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">what-is-a-github-tool-and-why-to-use-them</guid><category>GitHub</category><category>DevOps</category><description>GitHub tools make it easier to manage the dependencies of a project and ensure your environment remains consistent and stable. Learn how to use them (and why).</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/what-is-a-github-tool-and-why-to-use-them/images/tools.jpg"/></item><item><title>Defining The Process for Securing Your Supply Chain</title><link>https://www.kenmuse.com/blog/define-process-for-secure-supply-chain/</link><pubDate>Sat, 26 Oct 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">define-process-for-secure-supply-chain</guid><category>DevOps</category><category>GitHub</category><description>A company's development practices are only as secure as their supply chain. Learn how to define a process for properly reviewing your supply chain.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/define-process-for-secure-supply-chain/images/banner.png"/></item><item><title>Using React in Visual Studio Code Webviews</title><link>https://www.kenmuse.com/blog/using-react-in-vs-code-webviews/</link><pubDate>Fri, 18 Oct 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">using-react-in-vs-code-webviews</guid><category>DevOps</category><category>Programming</category><description>Build custom extensions and Webviews is for Visual Studio Code is just the start. Learn how to upgrade your views to use React.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/using-react-in-vs-code-webviews/images/banner.png"/></item><item><title>Improved Blogging With Visual Studio Code Webviews</title><link>https://www.kenmuse.com/blog/improve-blogging-with-vs-code-webviews/</link><pubDate>Fri, 11 Oct 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">improve-blogging-with-vs-code-webviews</guid><category>DevOps</category><category>Programming</category><description>A custom extension in VS Code gives me a more efficient blogging process. Explore how I incorporate custom UIs using Webviews.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/improve-blogging-with-vs-code-webviews/images/banner.png"/></item><item><title>Improved Blogging With Visual Studio Code Extensions</title><link>https://www.kenmuse.com/blog/improve-blogging-with-visual-studio-code-extensions/</link><pubDate>Fri, 04 Oct 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">improve-blogging-with-visual-studio-code-extensions</guid><category>DevOps</category><category>Programming</category><description>Combining Visual Studio Code with Hugo has given me a great workflow for my blog. I made it even better by creating a custom VS Code extension.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/improve-blogging-with-visual-studio-code-extensions/images/banner.png"/></item><item><title>Improved Blogging With Visual Studio Code Tasks</title><link>https://www.kenmuse.com/blog/improve-blogging-with-visual-studio-code-tasks/</link><pubDate>Tue, 01 Oct 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">improve-blogging-with-visual-studio-code-tasks</guid><category>DevOps</category><category>Programming</category><description>I use Visual Studio Code and Hugo to manage my blog and make it easier to create content. Today I explore how I use VSCode Tasks to automate the work I do.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/improve-blogging-with-visual-studio-code-tasks/images/banner.png"/></item><item><title>Testing Kubernetes Operators and Controllers With Minikube</title><link>https://www.kenmuse.com/blog/testing-kubernetes-operators-and-controllers-with-minikube/</link><pubDate>Fri, 27 Sep 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">testing-kubernetes-operators-and-controllers-with-minikube</guid><category>Containers</category><category>DevOps</category><description>Sometimes you need to try out a modified image or custom chart you're creating in Kubernetes. Minikube can make that process easier.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/testing-kubernetes-operators-and-controllers-with-minikube/images/banner.png"/></item><item><title>How to Handle Step and Job Errors in GitHub Actions</title><link>https://www.kenmuse.com/blog/how-to-handle-step-and-job-errors-in-github-actions/</link><pubDate>Fri, 06 Sep 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">how-to-handle-step-and-job-errors-in-github-actions</guid><category>DevOps</category><category>GitHub</category><description>In most cases, we write a workflow where all of the steps succeed. In this post, we'll explore how to create workflows that can handle a failing step or job.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/how-to-handle-step-and-job-errors-in-github-actions/images/banner.png"/></item><item><title>Using Dynamic Environment Variables With GitHub</title><link>https://www.kenmuse.com/blog/using-dynamic-environment-variables-with-github/</link><pubDate>Sat, 31 Aug 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">using-dynamic-environment-variables-with-github</guid><category>DevOps</category><category>GitHub</category><description>Learn how to dynamically generate environment variables in GitHub Actions, and learn how this technique can be used to configure Actions themselves.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/using-dynamic-environment-variables-with-github/images/banner.png"/></item><item><title>Mastering the Jest TestEnvironment Event Types</title><link>https://www.kenmuse.com/blog/mastering-jest-testenvironment-event-types/</link><pubDate>Thu, 29 Aug 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">mastering-jest-testenvironment-event-types</guid><category>DevOps</category><category>Programming</category><description>If you're implementing a TestEnvironment, you'll need interact with the testing lifecycle. This post will explore events that are raised and how to use them.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/mastering-jest-testenvironment-event-types/images/jest.png"/></item><item><title>A Crash Course on Jest TestEnvironments with TypeScript</title><link>https://www.kenmuse.com/blog/crash-course-jest-test-environments-with-typescript/</link><pubDate>Sat, 24 Aug 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">crash-course-jest-test-environments-with-typescript</guid><category>DevOps</category><category>Programming</category><description>Want to get the most out of Jest and you love TypeScript? Need some code that runs outside of the tests? Learn how (and why) to build custom TestEnvironments.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/crash-course-jest-test-environments-with-typescript/images/banner.png"/></item><item><title>Implementing Processes for GHAS using GitHub Probot</title><link>https://www.kenmuse.com/blog/implementing-security-processes-for-ghas-using-github-probot/</link><pubDate>Fri, 16 Aug 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">implementing-security-processes-for-ghas-using-github-probot</guid><category>DevOps</category><category>GitHub</category><category>Programming</category><description>GitHub Advanced Security helps teams to shift left and secure their development. When its processes don't quite fit the team's approach, it's time for Probot!</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/implementing-security-processes-for-ghas-using-github-probot/images/banner.png"/></item><item><title>Planning Kubernetes Cloud Deployments</title><link>https://www.kenmuse.com/blog/planning-kubernetes-cloud-deployments/</link><pubDate>Sat, 27 Jul 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">planning-kubernetes-cloud-deployments</guid><category>GitHub</category><category>DevOps</category><description>Understanding resource allocation is a critical skill for successful Kubernetes cluster deployments. Learn how the cloud providers reserve Kubernetes resources.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/planning-kubernetes-cloud-deployments/images/banner.png"/></item><item><title>Understanding Kubernetes Resource Consumption</title><link>https://www.kenmuse.com/blog/understanding-kubernetes-resource-consumption/</link><pubDate>Fri, 19 Jul 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">understanding-kubernetes-resource-consumption</guid><category>GitHub</category><category>DevOps</category><description>Surprised that you can't fit as many pods on a node as you thought? It turns out that there's a lot more to the story of how Kubernetes allocates resources.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/understanding-kubernetes-resource-consumption/images/banner.png"/></item><item><title>The Ultimate Debugging Hack for Developers</title><link>https://www.kenmuse.com/blog/the-ultimate-debugging-hack-for-developers/</link><pubDate>Fri, 12 Jul 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">the-ultimate-debugging-hack-for-developers</guid><category>DevOps</category><category>Programming</category><description>Developers usually want to be able to directly connect to a system and start their debugger. What if there's a better way to get the information you need?</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/the-ultimate-debugging-hack-for-developers/images/banner.png"/></item><item><title>Scaling ARC on a Schedule</title><link>https://www.kenmuse.com/blog/scaling-arc-on-a-schedule/</link><pubDate>Wed, 03 Jul 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">scaling-arc-on-a-schedule</guid><category>GitHub</category><category>DevOps</category><description>The Actions Runner Controller (ARC) can't configure the minimum runner count based on a schedule. Learn to use native `CronJob` resources for the task!</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/scaling-arc-on-a-schedule/images/banner.png"/></item><item><title>The Top 5 Things To Know About ARC</title><link>https://www.kenmuse.com/blog/top-five-things-to-know-about-arc/</link><pubDate>Fri, 21 Jun 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">top-five-things-to-know-about-arc</guid><category>GitHub</category><category>DevOps</category><description>Actions Runner Controller (ARC) is a powerful way to manage ephemeral, self-hosted GitHub runners. There are five keys that can make you successful using it.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/top-five-things-to-know-about-arc/images/banner.png"/></item><item><title>The Importance of Kubernetes Logs</title><link>https://www.kenmuse.com/blog/the-importance-of-kubernetes-logs/</link><pubDate>Thu, 13 Jun 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">the-importance-of-kubernetes-logs</guid><category>GitHub</category><category>DevOps</category><description>If you really want to master your Kubernetes environment, it begins with understanding the value of a logging and how to implement good logging practices.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/the-importance-of-kubernetes-logs/images/banner.png"/></item><item><title>The Magic of Scaling and Auto-Scaling</title><link>https://www.kenmuse.com/blog/the-magic-of-scaling/</link><pubDate>Thu, 06 Jun 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">the-magic-of-scaling</guid><category>Azure</category><category>DevOps</category><description>Scaling systems is a journey. It's not just about adding more resources. It's about understanding the bottlenecks and how to overcome them.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/the-magic-of-scaling/images/banner.png"/></item><item><title>Strategies for Upgrading ARC</title><link>https://www.kenmuse.com/blog/strategies-for-upgrading-arc/</link><pubDate>Thu, 30 May 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">strategies-for-upgrading-arc</guid><category>GitHub</category><category>DevOps</category><description>Understand the best practices for upgrading Actions Runner Controller and minimizing downtime, including when (and if) you can skip a release.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/strategies-for-upgrading-arc/images/banner.png"/></item><item><title>Building Base Images for ARC</title><link>https://www.kenmuse.com/blog/building-base-images-for-arc/</link><pubDate>Thu, 09 May 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">building-base-images-for-arc</guid><category>Containers</category><category>GitHub</category><category>DevOps</category><description>If you're using Actions Runner Controller, the provided base image may not be enough. Learn what's needed in your image to make your workflows run smoothly.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/building-base-images-for-arc/images/banner.png"/></item><item><title>Supply Chain Security in CI/CD Systems</title><link>https://www.kenmuse.com/blog/supply-chain-security/</link><pubDate>Thu, 02 May 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">supply-chain-security</guid><category>DevOps</category><category>GitHub</category><description>Your supply chain is frequently the most vulnerable part of your development process. In this post, we'll explore how you can protect your CI/CD systems.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/supply-chain-security/images/banner.png"/></item><item><title>Fashion, DevOps, and Certificates</title><link>https://www.kenmuse.com/blog/fashion-devops-and-certificates/</link><pubDate>Sat, 20 Apr 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">fashion-devops-and-certificates</guid><category>Programming</category><category>Security</category><category>DevOps</category><description>Google has announced an initiative that will change the way certificates are issued, impacting 50% of companies. Are your dev practices up for the challenge?</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/fashion-devops-and-certificates/images/banner.png"/></item><item><title>Building GitHub Runner Images With an Action Archive Cache</title><link>https://www.kenmuse.com/blog/building-github-actions-runner-images-with-an-action-archive-cache/</link><pubDate>Fri, 29 Mar 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">building-github-actions-runner-images-with-an-action-archive-cache</guid><category>Containers</category><category>GitHub</category><category>DevOps</category><description>If you want to make images for GitHub Actions Runner Controller (ARC) that are fast and network-friendly, learn how to include an Action archive cache.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/building-github-actions-runner-images-with-an-action-archive-cache/images/banner.png"/></item><item><title>Building GitHub Actions Runner Images With A Tool Cache</title><link>https://www.kenmuse.com/blog/building-github-actions-runner-images-with-a-tool-cache/</link><pubDate>Thu, 28 Mar 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">building-github-actions-runner-images-with-a-tool-cache</guid><category>Containers</category><category>GitHub</category><category>DevOps</category><description>If you want to make an efficient image for GitHub Actions Runner Controller (ARC), you need to first understand how to prepopulate the runner's tool cache.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/building-github-actions-runner-images-with-a-tool-cache/images/banner.png"/></item><item><title>What Is ARC Doing &amp; How Does It Interact With Kubernetes?</title><link>https://www.kenmuse.com/blog/what-is-arc-doing/</link><pubDate>Sat, 16 Mar 2024 00:00:00 -0400</pubDate><guid isPermaLink="false">what-is-arc-doing</guid><category>GitHub</category><category>DevOps</category><description>Understanding ARC begins with understanding what it does (and does not do) to create runners on Kubernetes. In this post, I explore the basics of the process.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/what-is-arc-doing/images/banner.png"/></item><item><title>What Developers Should Know About Floating Point Numbers</title><link>https://www.kenmuse.com/blog/what-developers-should-know-about-floating-point-numbers/</link><pubDate>Fri, 01 Mar 2024 00:00:00 -0500</pubDate><guid isPermaLink="false">what-developers-should-know-about-floating-point-numbers</guid><category>Programming</category><description>Fun fact: adding 0.1 to 0.2 doesn't exactly equal 0.3 in most programming languages. Learn why floating point numbers don't behave the way you think they do.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/what-developers-should-know-about-floating-point-numbers/images/banner.png"/></item><item><title>GitHub Actions and Monitoring</title><link>https://www.kenmuse.com/blog/github-actions-and-monitoring/</link><pubDate>Fri, 23 Feb 2024 00:00:00 -0500</pubDate><guid isPermaLink="false">github-actions-and-monitoring</guid><category>DevOps</category><description>&lt;p&gt;Whether you&amp;rsquo;re developing drivers, building appliances, or testing system deployments, you need to test your code. For many, this means installing GitHub Actions Runners (or other agents) on the system under test. But is this really the best way to test your code?&lt;/p&gt;
&lt;p&gt;For many teams, this doesn&amp;rsquo;t seem to create any direct issues. By monitoring the system as they deploy, they can directly assess whether the deployment is working correctly. This approach has several significant drawbacks. If you&amp;rsquo;re testing system drivers (or low-level components), the first issue is obvious: system failures will kill the current agent and the pipeline process. When the system restarts or crashes, the runner or agent is also killed. Because the system is no longer accessible, teams look for ways to reconnect to the environment to query the root cause. The common work around is to treat those as &amp;ldquo;failures&amp;rdquo; and then try to assess what happened manually. When manual processes are required, we lose efficiency. We need to be able to assess the outcome and report it as easily as possible in order to enable the problem to be remediated.&lt;/p&gt;</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/github-actions-and-monitoring/images/banner.jpg"/></item><item><title>Troubleshooting Git Authentication</title><link>https://www.kenmuse.com/blog/troubleshooting-git-authentication/</link><pubDate>Fri, 16 Feb 2024 00:00:00 -0500</pubDate><guid isPermaLink="false">troubleshooting-git-authentication</guid><category>DevOps</category><category>GitHub</category><category>Programming</category><description>Whether you're dealing with bad credentials or connectivity issues, there are a few tricks with Git that can make it easier to understand what's happening.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/troubleshooting-git-authentication/images/banner.png"/></item><item><title>Mounting Files as Volumes</title><link>https://www.kenmuse.com/blog/mounting-files-as-volumes/</link><pubDate>Fri, 02 Feb 2024 00:00:00 -0500</pubDate><guid isPermaLink="false">mounting-files-as-volumes</guid><category>DevOps</category><description>Kubernetes and containerized systems mount drives and folders as volumes, but there is another option. Learn how to mount a file and treat it like a drive.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/mounting-files-as-volumes/images/banner.jpg"/></item><item><title>Understanding Container Image Layers</title><link>https://www.kenmuse.com/blog/understanding-container-image-layers/</link><pubDate>Sat, 27 Jan 2024 00:00:00 -0500</pubDate><guid isPermaLink="false">understanding-container-image-layers</guid><category>DevOps</category><description>To master containers, it's important to understand the concept of layers. In this post, I'll explain how layers work and the basis behind their implementation.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/understanding-container-image-layers/images/banner.jpg"/></item><item><title>Automating Azure OIDC Application Federation</title><link>https://www.kenmuse.com/blog/automating-azure-oidc-application-federation/</link><pubDate>Mon, 22 Jan 2024 00:00:00 -0500</pubDate><guid isPermaLink="false">automating-azure-oidc-application-federation</guid><category>Azure</category><category>DevOps</category><category>GitHub</category><category>Security</category><description>&lt;p&gt;I was recently asked if I knew how to automate creating Azure Entra ID (formerly Active Directory) applications. More specifically, they wanted to know if they could use PowerShell to automate creating the OIDC federation between Azure AD and GitHub. To do this, we just need to use a few PowerShell modules that save us the trouble of crafting several REST calls. These modules work with PowerShell 5.x and 7.x.&lt;/p&gt;</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/automating-azure-oidc-application-federation/images/banner.jpg"/></item><item><title>More Best Practices for Deploying GitHub ARC</title><link>https://www.kenmuse.com/blog/more-best-practices-for-deploying-github-arc/</link><pubDate>Thu, 11 Jan 2024 00:00:00 -0500</pubDate><guid isPermaLink="false">more-best-practices-for-deploying-github-arc</guid><category>GitHub</category><category>DevOps</category><description>There are some common issues that lead to teams struggling to set up ARC, and nearly all can be avoided with these recommendations.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/more-best-practices-for-deploying-github-arc/images/banner.png"/></item><item><title>Best Practices for Deploying GitHub ARC</title><link>https://www.kenmuse.com/blog/best-practices-for-deploying-github-arc/</link><pubDate>Fri, 05 Jan 2024 00:00:00 -0500</pubDate><guid isPermaLink="false">best-practices-for-deploying-github-arc</guid><category>GitHub</category><category>DevOps</category><description>There are some common issues that lead to teams struggling to set up ARC. Nearly all of them can be avoided with these recommendations.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/best-practices-for-deploying-github-arc/images/banner.png"/></item><item><title>Why You Should Use Dedicated Clusters For GitHub ARC</title><link>https://www.kenmuse.com/blog/why-you-should-use-dedicated-clusters-for-github-arc/</link><pubDate>Sat, 30 Dec 2023 00:00:00 -0500</pubDate><guid isPermaLink="false">why-you-should-use-dedicated-clusters-for-github-arc</guid><category>GitHub</category><category>DevOps</category><description>I recommend using a dedicated Kubernetes cluster with GitHub Actions Runner Controller (ARC) to get the best performance and security. This post explains why.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/why-you-should-use-dedicated-clusters-for-github-arc/images/banner.jpg"/></item><item><title>GitHub Actions Injection Attacks</title><link>https://www.kenmuse.com/blog/github-actions-injection-attacks/</link><pubDate>Thu, 21 Dec 2023 00:00:00 -0500</pubDate><guid isPermaLink="false">gitHub-actions-injection-attacks</guid><category>DevOps</category><category>GitHub</category><category>Security</category><description>Security is important, even in your CI/CD processes. Learn the basics of injection exploits with GitHub Actions and how to avoid them.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/github-actions-injection-attacks/images/banner.jpg"/></item><item><title>The Two GitHub ARCs (and Why You Should Only Use One)</title><link>https://www.kenmuse.com/blog/the-two-github-arcs/</link><pubDate>Sat, 16 Dec 2023 00:00:00 -0500</pubDate><guid isPermaLink="false">the-two-github-arcs</guid><category>GitHub</category><category>DevOps</category><description>Many teams want to have GitHub self-hosted runners on Kubernetes using ARC, but aren’t aware there are two different versions. This post attempts to explain.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/the-two-github-arcs/images/banner.jpg"/></item><item><title>Enabling GitHub ARC Metrics</title><link>https://www.kenmuse.com/blog/enabling-github-arc-metrics/</link><pubDate>Sat, 09 Dec 2023 00:00:00 -0500</pubDate><guid isPermaLink="false">enabling-github-arc-metrics</guid><category>GitHub</category><category>DevOps</category><description>Learn to enable metrics in GitHub's Actions Runner Controller (ARC) and get visibility into the processing queue and the performance of jobs and runners.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/enabling-github-arc-metrics/images/grafana.png"/></item><item><title>Understanding OIDC and Identity Federation</title><link>https://www.kenmuse.com/blog/understanding-oidc-and-identity-federation/</link><pubDate>Fri, 24 Nov 2023 00:00:00 -0500</pubDate><guid isPermaLink="false">understanding-oidc-and-identity-federation</guid><category>Azure</category><category>DevOps</category><category>GitHub</category><category>Security</category><description>Adopting OIDC can be challenging for teams that don't understand how the process works. This post explores OIDC and explains what's happening under the covers.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/understanding-oidc-and-identity-federation/images/banner.png"/></item><item><title>Automatic SSH Commit Signing With 1Password</title><link>https://www.kenmuse.com/blog/automatic-ssh-commit-signing-with-1password/</link><pubDate>Fri, 10 Nov 2023 00:00:00 -0500</pubDate><guid isPermaLink="false">automatic-ssh-commit-signing-with-1password</guid><category>DevOps</category><category>Programming</category><description>Learn how to automate SSH commit signing with 1Password and dotfiles to enable others to verify the authenticity of your Git commits.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/automatic-ssh-commit-signing-with-1password/images/banner.png"/></item><item><title>Windows Runners on Actions Runner Controller</title><link>https://www.kenmuse.com/blog/windows-runners-on-actions-runner-controller/</link><pubDate>Thu, 26 Oct 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">windows-runners-on-actions-runner-controller</guid><category>Azure</category><category>GitHub</category><category>Containers</category><category>DevOps</category><description>GitHub's Actions Runner Controller (ARC) does not officially support Windows containers for runners. With a little bit of work, we can make it possible.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/windows-runners-on-actions-runner-controller/images/banner.jpg"/></item><item><title>Automatic SSH Commit Signing With Dotfiles</title><link>https://www.kenmuse.com/blog/automatic-ssh-commit-signing-with-dotfiles/</link><pubDate>Thu, 19 Oct 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">automatic-ssh-commit-signing-with-dotfiles</guid><category>DevOps</category><category>Programming</category><description>&lt;p&gt;I previously talked about
&lt;a class="" href="https://www.kenmuse.com/blog/the-magic-of-dotfiles/" target="_self"&gt;how dotfiles can improve the development experience&lt;/a&gt;. By automating the processing of setting up your environment, you are free to focus on more important things. One of the more mundane tasks for developers is setting up commit signing and verification. By doing this, others can verify that you are the author of a specific commit. It just requires some setup, especially if you want automatic support in your dev containers. For these examples, I&amp;rsquo;m going to use SSH-based commit signing. It&amp;rsquo;s a common approach, and it doesn&amp;rsquo;t require sharing a private key between environments.&lt;/p&gt;</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/automatic-ssh-commit-signing-with-dotfiles/images/banner.jpg"/></item><item><title>Organizing Build Processes</title><link>https://www.kenmuse.com/blog/organizing-build-processes/</link><pubDate>Thu, 05 Oct 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">organizing-build-processes</guid><category>DevOps</category><category>GitHub</category><description>Most automated processes aren't maintainable. There are practices you can use to create CI/CD workflows that are maintainable, testable, and reusable.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/organizing-build-processes/images/banner.png"/></item><item><title>The Image Factory Pattern</title><link>https://www.kenmuse.com/blog/the-image-factory-pattern/</link><pubDate>Thu, 28 Sep 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">the-image-factory-pattern</guid><category>DevOps</category><description>Looking to maintain virtual machine or Docker images in the most efficient way possible? Use the Image Factory pattern to automate creation and distribution!</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/the-image-factory-pattern/images/banner.drawio.png"/></item><item><title>Shared Commits and GitHub Checks</title><link>https://www.kenmuse.com/blog/shared-commits-and-github-checks/</link><pubDate>Thu, 21 Sep 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">shared-commits-and-github-checks</guid><category>DevOps</category><category>GitHub</category><description>Using a pull request to merge the same commit to multiple branches causes GitHub Checks and validations to fail. Learn the technique needed to fix this issue.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/shared-commits-and-github-checks/images/work-branch.png"/></item><item><title>The Hidden Dangers in Dependencies</title><link>https://www.kenmuse.com/blog/the-hidden-dangers-in-dependencies/</link><pubDate>Thu, 14 Sep 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">the-hidden-dangers-in-dependencies</guid><category>DevOps</category><category>Programming</category><category>Security</category><description>When it comes to code, what you don't know can hurt you. Dependencies come with more security considerations than most people realize. Learn to tighten it up!</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/the-hidden-dangers-in-dependencies/images/banner.jpg"/></item><item><title>Forcing .NET Into Debug Mode</title><link>https://www.kenmuse.com/blog/forcing-dotnet-debug-mode/</link><pubDate>Thu, 07 Sep 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">forcing-dotnet-debug-mode</guid><category>DevOps</category><category>Programming</category><description>How does .NET determine debug or release at runtime? It's more than just specifying a build configuration. And it's more configurable than most people realize.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/forcing-dotnet-debug-mode/images/banner.png"/></item><item><title>Understanding .NET Debug vs Release</title><link>https://www.kenmuse.com/blog/understanding-dotnet-debug-vs-release/</link><pubDate>Thu, 24 Aug 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">understanding-dotnet-debug-vs-release</guid><category>DevOps</category><category>Programming</category><description>Not completely sure about the differences between Debug and Release builds in .NET? Explore the implementation and the implications.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/understanding-dotnet-debug-vs-release/images/banner.png"/></item><item><title>An Introduction to SourceLink</title><link>https://www.kenmuse.com/blog/an-intro-to-sourcelink/</link><pubDate>Thu, 17 Aug 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">an-intro-to-sourcelink</guid><category>DevOps</category><category>Programming</category><description>Instead of using symbol servers to index our PDBs, we can use an open, standardized approach to map our symbols to source code and improve the debug experience.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/an-intro-to-sourcelink/images/banner.jpg"/></item><item><title>Understanding Symbol Servers</title><link>https://www.kenmuse.com/blog/understanding-symbol-servers/</link><pubDate>Thu, 10 Aug 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">understanding-symbol-servers</guid><category>DevOps</category><category>Programming</category><description>It's not really an exploration of PDBs and debugging without talking about symbol servers. Today we'll learn about what they do and when you need one.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/understanding-symbol-servers/images/banner.jpg"/></item><item><title>What Every Developer Should Know About PDBs</title><link>https://www.kenmuse.com/blog/what-every-developer-should-know-about-pdbs/</link><pubDate>Thu, 03 Aug 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">what-every-developer-should-know-about-pdbs</guid><category>DevOps</category><category>Programming</category><description>Almost a decade ago, John Robbins opened up the details of PDBs to the developer world. It's time to re-examine the format and how it works in modern .NET.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/what-every-developer-should-know-about-pdbs/images/metadata.png"/></item><item><title>Universal Packages on GitHub With ORAS</title><link>https://www.kenmuse.com/blog/universal-packages-on-github-with-oras/</link><pubDate>Fri, 14 Jul 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">universal-packages-on-github-with-oras</guid><category>DevOps</category><category>GitHub</category><description>Most package management systems support "universal artifacts" storage. Although not explicitly documented, GitHub also supports universal packages via ORAS.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/universal-packages-on-github-with-oras/images/banner.jpg"/></item><item><title>Creating GitHub Checks (and Understanding the Checks API)</title><link>https://www.kenmuse.com/blog/creating-github-checks/</link><pubDate>Thu, 06 Jul 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">creating-github-checks</guid><category>DevOps</category><category>GitHub</category><description>If you need to integrate an external system or execute parts of the CI process asynchronously, the GitHub Checks API can provide a way to make that happen.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/creating-github-checks/images/banner.png"/></item><item><title>The Many SHAs of a GitHub Pull Request</title><link>https://www.kenmuse.com/blog/the-many-shas-of-a-github-pull-request/</link><pubDate>Fri, 30 Jun 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">the-many-shas-of-a-github-pull-request</guid><category>DevOps</category><category>GitHub</category><description>Executing a GitHub Action for a pull request creates a surprising number of SHA commits. Learn the purpose of the different SHAs and when to use each one.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/the-many-shas-of-a-github-pull-request/images/banner.png"/></item><item><title>Why You Should (Not) Prefer Monorepos For Git</title><link>https://www.kenmuse.com/blog/why-you-should-not-prefer-monorepos-for-git/</link><pubDate>Fri, 23 Jun 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">why-you-should-not-prefer-monorepos-for-git</guid><category>DevOps</category><category>GitHub</category><category>Programming</category><description>Monorepos are often seen as the simple solution to complex collaboration and code management problems. Like with most quick fixes, the devil's in the details.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/why-you-should-not-prefer-monorepos-for-git/images/banner.jpg"/></item><item><title>That Template Repository Trick</title><link>https://www.kenmuse.com/blog/that-template-repository-trick/</link><pubDate>Thu, 15 Jun 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">that-template-repository-trick</guid><category>DevOps</category><category>GitHub</category><description>&lt;p&gt;Many people are familiar with the idea of the &lt;em&gt;template repository&lt;/em&gt;. It provides a great way to centralize configurations for common projects for teams. I can declare a repository, configure it with files and folders, and set up one or more branches. After
&lt;a class="external-link" href="https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-template-repository" arial-label="The marking it as a template link opens in a new tab" target="_blank"&gt;marking it as a template&lt;span class="fa-solid fa-up-right-from-square" &gt;&lt;/span&gt;&lt;/a&gt; in the Settings, it becomes available to other team members when they create a repository.&lt;/p&gt;</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/that-template-repository-trick/images/banner.jpg"/></item><item><title>GitHub Actions Workflow Permissions</title><link>https://www.kenmuse.com/blog/github-actions-workflow-permissions/</link><pubDate>Thu, 08 Jun 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">github-actions-workflow-permissions</guid><category>DevOps</category><category>GitHub</category><description>GitHub Actions provide powerful workflow support but rely on trusting third-party code. Learn how to secure your GitHub Actions workflows using permissions.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/github-actions-workflow-permissions/images/banner.jpg"/></item><item><title>Improving Dev Container Feature Performance</title><link>https://www.kenmuse.com/blog/improving-dev-container-feature-performance/</link><pubDate>Thu, 01 Jun 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">improving-dev-container-feature-performance</guid><category>DevOps</category><category>Containers</category><description>Dev container features provide a quick way to add functionality. The tradeoff for the ease of use is often speed. Learn the tricks to preserving performance.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/improving-dev-container-feature-performance/images/banner.jpg"/></item><item><title>Dynamic Build Matrices in GitHub Actions</title><link>https://www.kenmuse.com/blog/dynamic-build-matrices-in-github-actions/</link><pubDate>Thu, 04 May 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">dynamic-build-matrices-in-github-actions</guid><category>DevOps</category><description>GitHub Actions allows you to create matrix builds to execute steps multiple times with different parameters. Learn how to define them programmatically!</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/dynamic-build-matrices-in-github-actions/images/banner.png"/></item><item><title>GitHub, Maven, and Packages</title><link>https://www.kenmuse.com/blog/github-maven-and-packages/</link><pubDate>Thu, 27 Apr 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">github-maven-and-packages</guid><category>Programming</category><category>GitHub</category><category>DevOps</category><description>It's important to understand how to securely access package repositories when doing a Java build. Understand how GitHub Actions supports this process.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/github-maven-and-packages/images/banner.jpg"/></item><item><title>Mythical Development Heroes</title><link>https://www.kenmuse.com/blog/mythical-heroes/</link><pubDate>Thu, 20 Apr 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">mythical-heroes</guid><category>DevOps</category><description>&lt;p&gt;Last week, we examined some common
&lt;a class="" href="https://www.kenmuse.com/blog/mythical-time/" target="_self"&gt;myths about time&lt;/a&gt;. Did you know that software also has hero myths?
These are mythologies that have crept into development practices that ultimately have a negative impact on teams. Normally, we like to think of a a hero as someone admired for their achievements that overcomes adversity. They &amp;ldquo;save the day&amp;rdquo;, rescuing others from imminent dangers. In software development, however, a hero is often a problem.&lt;/p&gt;</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/mythical-heroes/images/banner.jpg"/></item><item><title>Mythical Development Time</title><link>https://www.kenmuse.com/blog/mythical-time/</link><pubDate>Thu, 13 Apr 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">mythical-time</guid><category>DevOps</category><description>There are three common ways we misuse time in development. Believing in the myths of how to manage time can reduce productivity and introduce unnecessary risk.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/mythical-time/images/banner.jpg"/></item><item><title>Preventing GitHub Actions Injection Attacks</title><link>https://www.kenmuse.com/blog/github-actions-injection/</link><pubDate>Fri, 07 Apr 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">github-actions-injection</guid><category>DevOps</category><category>Security</category><description>Everything coded can be exploited, including GitHub Actions. The powerful expressions syntax can also break your systems. Learn better ways to handle them.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/github-actions-injection/images/banner.png"/></item><item><title>The Life of a Commit After Git Squash</title><link>https://www.kenmuse.com/blog/life-after-git-squash/</link><pubDate>Fri, 31 Mar 2023 00:00:00 -0400</pubDate><guid isPermaLink="false">life-after-git-squash</guid><category>DevOps</category><category>GitHub</category><description>Explore what happens to files in Git after squashing a set of commits that have a tag applied to them. What happens to the commits and the tag may surprise you!</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/life-after-git-squash/images/banner.png"/></item><item><title>Modeling the Hidden Costs of Development</title><link>https://www.kenmuse.com/blog/modeling-the-hidden-costs-of-development/</link><pubDate>Thu, 02 Mar 2023 00:00:00 -0500</pubDate><guid isPermaLink="false">modeling-the-hidden-costs-of-development</guid><category>DevOps</category><category>General</category><description>Create financial models that help you understand the actual costs of your technical debt and bad development practices.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/modeling-the-hidden-costs-of-development/images/banner.jpg"/></item><item><title>The Hidden Costs of Bad Development Practices</title><link>https://www.kenmuse.com/blog/the-hidden-costs-of-bad-development-practices/</link><pubDate>Thu, 23 Feb 2023 00:00:00 -0500</pubDate><guid isPermaLink="false">the-hidden-costs-of-bad-development-practices</guid><category>DevOps</category><category>General</category><description>Major products and companies disappear without a trace. From Blackberry to Internet Explorer, they all succumbed to fatal technical debt. Learn how to fix it.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/the-hidden-costs-of-bad-development-practices/images/banner.jpg"/></item><item><title>Doing DevOps With Databricks</title><link>https://www.kenmuse.com/blog/databricks-devops/</link><pubDate>Thu, 03 Nov 2022 00:00:00 -0400</pubDate><guid isPermaLink="false">databricks-devops</guid><category>Azure</category><category>Data</category><category>DevOps</category><description>&lt;p&gt;Databricks is an exciting and powerful platform for creating solutions that can process big data into actionable content. Originally, the platform lacked several important aspects that are necessary to fully automate the platform. This historically limited the ability to integrate it into a holistic DevOps practice. Thankfully, those days are long past. Those limitations have been removed, making it possible to utilize the platform more fully.&lt;/p&gt;
&lt;p&gt;There are three parts to the DevOps story with this platform: infrastructure, notebooks, and jobs. Over the last few years, the Databricks team has worked hard to build up the DevOps story around these aspects. Today, we&amp;rsquo;ll explore some of those features!&lt;/p&gt;</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/databricks-devops/images/banner.png"/></item><item><title>Implementing DevOps for Azure Data Factory</title><link>https://www.kenmuse.com/blog/implementing-devops-for-azure-data-factory/</link><pubDate>Thu, 27 Oct 2022 00:00:00 -0400</pubDate><guid isPermaLink="false">implementing-devops-for-azure-data-factory</guid><category>Azure</category><category>Data</category><description>&lt;p&gt;There&amp;rsquo;s a lot of documentation around using Azure Data Factory, but surprisingly little on implementing DevOps practices. There&amp;rsquo;s even less when it comes to implementing an automated workflow. Typically, the system expects you to design and build the pipelines within the provided user interface, then press Publish.&lt;/p&gt;
&lt;h2 id="the-native-cicd-process"&gt;
&lt;a class="heading-link" href="#the-native-cicd-process"&gt;The Native CI/CD Process&lt;span class="fa-solid fa-link" aria-hidden="true"&gt;&lt;/span&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Under the covers, edits in ADF create a series of JSON files which stores the configuration. Changes in the portal are stored to these files. When the configuration is published, those JSON documents are used to generate ARM templates. If ADF is configured to use a Git repository, a copy of the published templates is pushed to the publish branch (typically, &lt;code&gt;adf_publish&lt;/code&gt;). This branch can then be reused for automation and deployment to other environments.&lt;/p&gt;</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/implementing-devops-for-azure-data-factory/images/banner.png"/></item><item><title>Azure Data Factory DevOps</title><link>https://www.kenmuse.com/blog/azure-data-factory-devops/</link><pubDate>Thu, 20 Oct 2022 00:00:00 -0400</pubDate><guid isPermaLink="false">azure-data-factory-devops</guid><category>Azure</category><category>Data</category><description>&lt;p&gt;It&amp;rsquo;s been fun spending time re-exploring the data platform this week. After months away from the world of big data, I&amp;rsquo;ve been amazed at how far the tools have come. Two years ago, the support for DevOps tools and practices was very limited. Now, it&amp;rsquo;s substantially more robust. Don&amp;rsquo;t get me wrong — you could create workable solutions. It was just harder than necessary.&lt;/p&gt;
&lt;p&gt;Azure Data Factory (ADF) was a surprising entry into the big data space. Microsoft actually started the project as code-first, so there was a level of support for DevOps from the beginning. It generates code that can be edited and modified by users, and the environment could be integrated with Git. It wasn&amp;rsquo;t a perfect solution, but it was great to see them thinking about the problem.&lt;/p&gt;</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/azure-data-factory-devops/images/banner.png"/></item><item><title>Dev Containers and AWS Credentials</title><link>https://www.kenmuse.com/blog/dev-containers-and-aws-credentials/</link><pubDate>Wed, 03 Aug 2022 00:00:00 -0400</pubDate><guid isPermaLink="false">dev-containers-and-aws-credentials</guid><category>DevOps</category><category>Containers</category><description>Did you know it's possible to share your AWS credentials between your host computer and your Dev Containers? Once again we explore the power of Docker mounts!</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/dev-containers-and-aws-credentials/images/banner.jpg"/></item><item><title>Dev Containers and node_modules</title><link>https://www.kenmuse.com/blog/dev-containers-and-node_modules/</link><pubDate>Wed, 27 Jul 2022 00:00:00 -0400</pubDate><guid isPermaLink="false">dev-containers-and-node_modules</guid><category>DevOps</category><category>Containers</category><description>There's a trick you can use with dev containers and Docker volumes to make it easier to manage your node_modules folder.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/dev-containers-and-node_modules/images/banner.jpg"/></item><item><title>Coloring Consoles in ANSI</title><link>https://www.kenmuse.com/blog/coloring-in-ansi/</link><pubDate>Wed, 13 Jul 2022 00:00:00 -0400</pubDate><guid isPermaLink="false">coloring-in-ansi</guid><category>Programming</category><description>Explore how to use ANSI escape sequences to force PowerShell (and other tools) to colorize console outputs.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/coloring-in-ansi/images/banner.png"/></item><item><title>Creating a .gitattributes Without Committing</title><link>https://www.kenmuse.com/blog/creating-a-gitattributes-without-committing/</link><pubDate>Wed, 06 Jul 2022 00:00:00 -0400</pubDate><guid isPermaLink="false">creating-a-gitattributes-without-committing</guid><category>DevOps</category><description>Did you know that you can specify file handling in Git without committing a .gitattributes file? Learn how to configure a Git repo without a commit.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/creating-a-gitattributes-without-committing/images/banner.png"/></item><item><title>What Is The .gitattributes File?</title><link>https://www.kenmuse.com/blog/what-is-gitattributes/</link><pubDate>Wed, 29 Jun 2022 00:00:00 -0400</pubDate><guid isPermaLink="false">what-is-gitattributes</guid><category>DevOps</category><description>&lt;p&gt;Sometimes you see the file in a project. It&amp;rsquo;s just sitting there, somehow influencing Git. But what is
&lt;a class="external-link" href="https://git-scm.com/docs/gitattributes" arial-label="The .gitattributes link opens in a new tab" target="_blank"&gt;&lt;code&gt;.gitattributes&lt;/code&gt;&lt;span class="fa-solid fa-up-right-from-square" &gt;&lt;/span&gt;&lt;/a&gt;? In short, it is a basic text document that associates attributes and behaviors with specific file types. At its most basic, it configures how files matching certain patterns (usually file extensions) are handled. Common scnearios include configuring how the line feeds are handled, whether the document is treated as a binary (non-diffable), and providing special processing before a commit or after checkout.&lt;/p&gt;</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/what-is-gitattributes/images/banner.png"/></item><item><title>Creating a .gitignore Without Committing</title><link>https://www.kenmuse.com/blog/creating-a-gitignore-without-committing/</link><pubDate>Thu, 23 Jun 2022 00:00:00 -0400</pubDate><guid isPermaLink="false">creating-a-gitignore-without-committing</guid><category>DevOps</category><description>Did you know that you can ignore files and folders in Git without committing a .gitignore file? Learn a trick for working with Git more effectively.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/creating-a-gitignore-without-committing/images/banner.png"/></item><item><title>Variable Groups in GitHub</title><link>https://www.kenmuse.com/blog/variable-groups-in-github/</link><pubDate>Thu, 16 Jun 2022 00:00:00 -0400</pubDate><guid isPermaLink="false">variable-groups-in-github</guid><category>DevOps</category><category>GitHub</category><description>Missing your Azure DevOps variable groups? Learn techniques you can use to implement variable groups in GitHub Actions.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/variable-groups-in-github/images/banner.jpg"/></item><item><title>Distributing Templates with GitHub</title><link>https://www.kenmuse.com/blog/distributing-templates-with-github/</link><pubDate>Fri, 22 Apr 2022 00:00:00 -0400</pubDate><guid isPermaLink="false">distributing-templates-with-github</guid><category>DevOps</category><description>To make the packages we've created available to the rest of our team, we need a package management solution, such as GitHub Packages.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/distributing-templates-with-github/images/banner.jpg"/></item><item><title>Custom .NET Item Templates</title><link>https://www.kenmuse.com/blog/custom-net-item-templates/</link><pubDate>Fri, 15 Apr 2022 00:00:00 -0400</pubDate><guid isPermaLink="false">custom-net-item-templates</guid><category>DevOps</category><description>Explore creating a reusable template that uses dotnet new to package and distribute a file.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/custom-net-item-templates/images/banner.jpg"/></item><item><title>Deploying to Azure from Private Container Registries</title><link>https://www.kenmuse.com/blog/deploying-to-azure-from-private-container-registries/</link><pubDate>Thu, 17 Mar 2022 00:00:00 -0400</pubDate><guid isPermaLink="false">deploying-to-azure-from-private-container-registries</guid><category>Azure</category><category>Containers</category><category>GitHub</category><category>DevOps</category><description>How to use private registries and GitHub Container Registry with services like Azure Container Instances, Azure App Services, and Azure Container Apps.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/deploying-to-azure-from-private-container-registries/images/banner.jpg"/></item><item><title>Using Azure Run From Package</title><link>https://www.kenmuse.com/blog/azure-website-run-from-package/</link><pubDate>Fri, 04 Feb 2022 00:00:00 -0500</pubDate><guid isPermaLink="false">azure-website-run-from-package</guid><category>Azure</category><category>DevOps</category><description>Learn how to use "Run From Package" to create atomic deployments to your Azure App Service.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/azure-website-run-from-package/images/banner.jpg"/></item><item><title>Have It Your Way - The Magic of dotfiles</title><link>https://www.kenmuse.com/blog/the-magic-of-dotfiles/</link><pubDate>Thu, 20 Jan 2022 00:00:00 -0500</pubDate><guid isPermaLink="false">the-magic-of-dotfiles</guid><category>DevOps</category><category>Containers</category><description>Have your favorite configurations follow you in your Dev Containers by creating a dotfiles Git repository.</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/the-magic-of-dotfiles/images/banner.jpg"/></item><item><title>Using Development Containers</title><link>https://www.kenmuse.com/blog/using-development-containers/</link><pubDate>Tue, 19 Oct 2021 00:00:00 -0400</pubDate><guid isPermaLink="false">using-development-containers</guid><category>Containers</category><category>DevOps</category><description>Learn how to implement development environments using infrastructure-as-code with Dev Containers, Codespaces, and Gitpod!</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/using-development-containers/images/banner.jpg"/></item><item><title>Reusing GitHub Workflows and Centralized Processes</title><link>https://www.kenmuse.com/blog/reusing-github-workflows/</link><pubDate>Thu, 07 Oct 2021 00:00:00 -0400</pubDate><guid isPermaLink="false">reusing-github-workflows</guid><category>GitHub</category><category>DevOps</category><description>&lt;p&gt;It&amp;rsquo;s almost Friday, so we&amp;rsquo;ll keep today&amp;rsquo;s post short.&lt;/p&gt;
&lt;p&gt;This week, GitHub officially launched the public
&lt;a class="external-link" href="https://docs.github.com/en/get-started/using-github/exploring-early-access-releases-with-feature-preview#githubs-release-cycle" arial-label="The beta link opens in a new tab" target="_blank"&gt;beta&lt;span class="fa-solid fa-up-right-from-square" &gt;&lt;/span&gt;&lt;/a&gt; of reusable workflows. Reusable workflows make it easy to treat a workflow like an Action. It can be referenced and executed from other workflows in the caller&amp;rsquo;s context. This allows teams to share common patterns, to centralize best practices, and to centralize the development of processes.&lt;/p&gt;</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/reusing-github-workflows/images/banner.png"/></item><item><title>My Experience Migrating to Hugo</title><link>https://www.kenmuse.com/blog/migrating-to-hugo/</link><pubDate>Mon, 16 Aug 2021 00:00:00 -0400</pubDate><guid isPermaLink="false">migrating-to-hugo</guid><category>Azure</category><category>DevOps</category><category>General</category><description>&lt;p&gt;It&amp;rsquo;s that time of the season. Just over a year ago, I
&lt;a class="" href="https://www.kenmuse.com/blog/the-new-site/" target="_self"&gt;moved to Piranha&lt;/a&gt; for my CMS hosting. At the time, I wanted something quick and easy to setup and didn&amp;rsquo;t have time to consider Hugo. It&amp;rsquo;s a year later, and things have changed.
Earlier this year, I had to reconsider that decision as I went through the process of upgrading my Piranha install.&lt;/p&gt;
&lt;p&gt;Piranha is powerful and easy to use, and I&amp;rsquo;ve been able to sustain a rather steady amount of traffic with minimal Azure resources (and a little CDN magic). It also uses
&lt;a class="external-link" href="https://github.com/xoofx/markdig" arial-label="The Markdig link opens in a new tab" target="_blank"&gt;Markdig&lt;span class="fa-solid fa-up-right-from-square" &gt;&lt;/span&gt;&lt;/a&gt;, which is definitely my favorite CommonMark compliant Markdown processor. I love the fact that it integrates extensions from GitHub Flavor, PHP Markdown, and Pandoc. This makes it incredibly easy to author content without having to spent my time finding workarounds for missing formatting features. Frankly, it provides me with the best aspects from multiple markdown tools.&lt;/p&gt;</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/migrating-to-hugo/images/banner.jpg"/></item><item><title>Restoring Azure Tests for SonarQube</title><link>https://www.kenmuse.com/blog/restoring-azure-tests-sonarqube/</link><pubDate>Wed, 25 Sep 2019 00:00:00 -0400</pubDate><guid isPermaLink="false">restoring-azure-tests-sonarqube</guid><category>Azure DevOps</category><category>DevOps</category><description>&lt;p&gt;Continuing from the
&lt;a class="" href="https://www.kenmuse.com/blog/azure-devops-missing-tests/" target="_self"&gt;previous post&lt;/a&gt;, SonarQube expects a certain set of files to be present in &lt;code&gt;$(Common.TestResultsDirectory)&lt;/code&gt;. When it doesn&amp;rsquo;t find the files in the folder, it can prevent it from reporting the results correctly. Because of changes to the &lt;strong&gt;vstest&lt;/strong&gt; task, that folder is cleaned up once the tests results are uploaded, meaning that the files may not exist when SonarQube looks for them. We have a few options for resolving this issue.&lt;/p&gt;</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/restoring-azure-tests-sonarqube/images/banner.jpg"/></item><item><title>Missing Tests on Azure DevOps</title><link>https://www.kenmuse.com/blog/azure-devops-missing-tests/</link><pubDate>Tue, 24 Sep 2019 00:00:00 -0400</pubDate><guid isPermaLink="false">azure-devops-missing-tests</guid><category>Azure DevOps</category><category>DevOps</category><description>&lt;p&gt;The customer was having a rough day. They had lots of unit tests, but were seeing an unexpected behavior from Azure DevOps and SonarQube. Because some tests were written in XUnit and others with MSTest, they had separated the execution into two tasks in their build. At the end of the build, results were sent to SonarQube for analysis. The problem was that each time the second set of tests ran in Azure DevOps, the results from the first pass disappeared. The assumption was that the files were being overwritten by the second test run. The fix seemed simple &amp;ndash; copy the results before the second set of tests executed.&lt;/p&gt;</description><enclosure type="image/jpeg" url="https://www.kenmuse.com/blog/azure-devops-missing-tests/images/banner.jpg"/></item><item><title>Understanding ARM Templates _artifactsLocation</title><link>https://www.kenmuse.com/blog/devops-understanding-arm-artifactslocation/</link><pubDate>Mon, 18 Feb 2019 00:00:00 -0500</pubDate><guid isPermaLink="false">devops-understanding-arm-artifactslocation</guid><category>Azure</category><description>&lt;p&gt;I&amp;rsquo;m someone that is always interested in seeing what&amp;rsquo;s behind the curtain, pulling apart designs to understand the &lt;em&gt;why&lt;/em&gt; and the &lt;em&gt;how&lt;/em&gt;. When I began working with ARM templates, I noticed there were two parameters that Microsoft always included in the default template. These parameters were used in the template, but generally never had a value assigned to them. I&amp;rsquo;m talking about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;_artifactsLocation&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;_artifactsLocationSasToken&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I decided it was time to understand the reason for these parameters and how to best take advantage of them. I find that a lot of people don&amp;rsquo;t understand these fields. So &amp;ndash; let&amp;rsquo;s discuss!&lt;/p&gt;</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/devops-understanding-arm-artifactslocation/images/arm-template.png"/></item><item><title>ARM Templates and Cloud Init</title><link>https://www.kenmuse.com/blog/arm-templates-and-cloud-init/</link><pubDate>Thu, 07 Feb 2019 00:00:00 -0500</pubDate><guid isPermaLink="false">arm-templates-and-cloud-init</guid><category>Azure</category><description>&lt;p&gt;If you&amp;rsquo;ve been spending much time with Linux VMs, you may have encountered Cloud-Init. Cloud-Init is an easy way to specify the configuration which needs to be applied to a deployed virtual machine. Executed when the machine is first provisioned, it can easily configure the environment on your behalf.&lt;/p&gt;
&lt;p&gt;The process of using Cloud-Init with ARM has been documented several times on the Microsoft site. In each case, it tends to rely on base64 encoding the template and including it into your ARM template. This ensures that it is deployed automatically as part of the virtual machine.&lt;/p&gt;</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/arm-templates-and-cloud-init/images/banner.png"/></item><item><title>Data DevOps: Deploying SQL Server DACPACs to Docker</title><link>https://www.kenmuse.com/blog/devops-sql-server-dacpac-docker/</link><pubDate>Mon, 31 Dec 2018 00:00:00 -0500</pubDate><guid isPermaLink="false">devops-sql-server-dacpac-docker</guid><category>DevOps</category><description>&lt;p&gt;In order to truly optimize the workflow and create a culture of DevOps, we need to be able to quickly build and deploy databases. To automate this process, we need to rely on improving our ability to utilize infrastructure as code. In this post, I&amp;rsquo;m going to show you how to use &lt;strong&gt;sqlpackage&lt;/strong&gt; to automate the process of deploying a DACPAC to SQL Server 2017 on a Linux container.&lt;/p&gt;
&lt;h2 id="what-is-a-dacpac"&gt;
&lt;a class="heading-link" href="#what-is-a-dacpac"&gt;What is a DACPAC?&lt;span class="fa-solid fa-link" aria-hidden="true"&gt;&lt;/span&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;If you&amp;rsquo;re not familiar with the terms, DACPACs are a way of encapsulating the definition of a SQL Server database for automated deployment. Essentially, it&amp;rsquo;s a ZIP file (or, more specifically, an Open Packaging Convention document) which contains the details of the schema and an optional set of pre-deployment and post-deployment scripts to be executed. The benefit of this model is that it uses state-based deployments to update the schema of the database. Think of this as desired state configuration for your database schema. Rather than manually creating migration scripts, you can instead focus on defining the end state and allowing DACFx (Database Application Framework) to determine how to best apply the migration.&lt;/p&gt;</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/devops-sql-server-dacpac-docker/images/deploy-sql-container.png"/></item><item><title>DevOps and Creating Documentation</title><link>https://www.kenmuse.com/blog/devops-and-documentation/</link><pubDate>Mon, 05 Nov 2018 00:00:00 -0500</pubDate><guid isPermaLink="false">devops-and-documentation</guid><category>Azure DevOps</category><description>&lt;p&gt;Just because your software iterations are fast and lean doesn&amp;rsquo;t mean that you shouldn&amp;rsquo;t have good documentation. In fact, with shorter release cycles documentation becomes even more important. Consequently, it&amp;rsquo;s important to have a a process that makes rapid updates possible.&lt;/p&gt;
&lt;p&gt;I was faced with just such a situation the other day. I had to assist with some documentation which were authored as
&lt;a class="external-link" href="https://docs.microsoft.com/en-us/contribute/how-to-write-use-markdown" arial-label="The Markdown link opens in a new tab" target="_blank"&gt;Markdown&lt;span class="fa-solid fa-up-right-from-square" &gt;&lt;/span&gt;&lt;/a&gt; and stored in source control. The documents were manually published by converting them to HTML using a Python 3 package called
&lt;a class="external-link" href="https://github.com/joeyespo/grip" arial-label="The Grip link opens in a new tab" target="_blank"&gt;&lt;strong&gt;Grip&lt;/strong&gt;&lt;span class="fa-solid fa-up-right-from-square" &gt;&lt;/span&gt;&lt;/a&gt;. This formatted the documents and gave them an appearance based on Github&amp;rsquo;s look and feel. The results were packaged in a ZIP file for distribution. A repetitive process like this seems like a great excuse to automate!&lt;/p&gt;</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/devops-and-documentation/images/DevOps-Docs-1429x375.png"/></item><item><title>Conditional Build and Release Tasks in VSTS</title><link>https://www.kenmuse.com/blog/conditional-build-and-release-tasks-in-vsts/</link><pubDate>Mon, 25 Jun 2018 00:00:00 -0400</pubDate><guid isPermaLink="false">conditional-build-and-release-tasks-in-vsts</guid><category>Azure DevOps</category><description>&lt;p&gt;One of the most overlooked features in VSTS is the ability to determine whether a task will be executed using custom conditions. What are custom conditions? It&amp;rsquo;s the ability to specify a short expression which evaluates to a boolean value. If the result is true, the task will be executed. If the value is false, the task is ignored. For example, let&amp;rsquo;s take this expression:&lt;/p&gt;
&lt;p&gt;
&lt;img
src="https://www.kenmuse.com/blog/conditional-build-and-release-tasks-in-vsts/images/2018-06-21-Conditional-Buildscond-01_hu_5da29ddda76a5960.webp"
alt=""
loading="lazy"
width="761"
height="197"
/&gt;&lt;/p&gt;
&lt;p&gt;This expression evaluates the built-in variable &lt;code&gt;Build.Reason&lt;/code&gt; to determine if the task is executing the build as part of a pull request branch policy. If the build status is currently &lt;em&gt;failed&lt;/em&gt; and the build was triggered by a pull request, the task will execute. In all other cases, the task will be skipped.&lt;/p&gt;</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/conditional-build-and-release-tasks-in-vsts/images/2018-06-21-Conditional-Buildscond-01.png"/></item><item><title>Enabling Release Annotations in VSTS</title><link>https://www.kenmuse.com/blog/enabling-release-annotations-vsts/</link><pubDate>Mon, 11 Jun 2018 00:00:00 -0400</pubDate><guid isPermaLink="false">enabling-release-annotations-vsts</guid><category>Azure DevOps</category><category>Azure</category><description>&lt;p&gt;Application Insights is a powerful component of Azure. It provides us with real-time logging about the performance of our application, the reliability of the site, and any exceptions that might arise. It&amp;rsquo;s an important and often overlooked part of the DevOps lifecycle &amp;mdash; monitoring the application in production.&lt;/p&gt;
&lt;p&gt;New releases can introduce new issues. Whether its a new bug being exposed as part of the release or simply some latency issues during the rollout, it&amp;rsquo;s important to understand the relationship. Today&amp;rsquo;s post will explore how we can use VSTS to automatically add annotations to our Application Insights environment.&lt;/p&gt;</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/enabling-release-annotations-vsts/images/2018-05-30-Release-Annotationsannotation-01.png"/></item><item><title>Handling “Open File – Security Warning”</title><link>https://www.kenmuse.com/blog/handling-open-file-security-warning/</link><pubDate>Wed, 31 Jan 2018 00:00:00 -0500</pubDate><guid isPermaLink="false">handling-open-file-security-warning</guid><category>DevOps</category><description>&lt;p&gt;It seems like a simple enough task. Use an Azure File share to store an executable and use a PowerShell script to execute the application on a new virtual machines. In practice, however, you might find that the executable is quietly failing to run. Running the executable on the server manually, the problem becomes apparent as a dialog box appears with the title:&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Open File &amp;ndash; Security Warning&amp;rdquo;&lt;/p&gt;
&lt;p&gt;
&lt;img
src="https://www.kenmuse.com/blog/handling-open-file-security-warning/images/OpenFileSecurityWarningofsw_hu_3be5282a21fdb9e0.webp"
alt=""
loading="lazy"
width="464"
height="323"
/&gt;&lt;/p&gt;
&lt;p&gt;This issue typically occurs when executing files that originated from the internet. In this case, the cause is different: the UNC path is treated as part of the Internet Zone, restricting the permissions.&lt;/p&gt;</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/handling-open-file-security-warning/images/banner.png"/></item><item><title>DevOps News From Connect(); 2017</title><link>https://www.kenmuse.com/blog/devops-news-from-connect-2017/</link><pubDate>Thu, 16 Nov 2017 00:00:00 -0500</pubDate><guid isPermaLink="false">devops-news-from-connect-2017</guid><category>Azure DevOps</category><category>DevOps</category><description>&lt;p&gt;The
&lt;a class="external-link" href="https://www.microsoft.com/en-us/connectevent/default.aspx" arial-label="The Microsoft Connect(); 2017 online event link opens in a new tab" target="_blank"&gt;Microsoft Connect(); 2017 online event&lt;span class="fa-solid fa-up-right-from-square" &gt;&lt;/span&gt;&lt;/a&gt; is nearly over, and so far we&amp;rsquo;ve heard lots of exciting news from Microsoft about Azure and changes to improve their support for DevOps. In fact, DevOps has been a big part of the theme this year.&lt;br&gt;
So let&amp;rsquo;s recap some of the announcements that have been made&amp;hellip;&lt;/p&gt;
&lt;h2 id="azure-devops-projects"&gt;
&lt;a class="heading-link" href="#azure-devops-projects"&gt;Azure DevOps Projects&lt;span class="fa-solid fa-link" aria-hidden="true"&gt;&lt;/span&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;If you&amp;rsquo;re new to Azure and VSTS, it can be difficult to know how to begin building a DevOps pipeline thatand configuring everything to deploy to Azure. Microsoft is introducing the
&lt;a class="external-link" href="https://blogs.msdn.microsoft.com/devops/2017/11/15/announcing-azure-devops-project-public-preview/?WT.mc_id=DT-MVP-5003035" arial-label="The Azure DevOps Project public preview link opens in a new tab" target="_blank"&gt;Azure DevOps Project public preview&lt;span class="fa-solid fa-up-right-from-square" &gt;&lt;/span&gt;&lt;/a&gt; to try to solve that. If you open
&lt;a class="external-link" href="https://portal.azure.com/#create/Microsoft.AzureProject," arial-label="The https://portal.azure.com/#create/Microsoft.AzureProject, link opens in a new tab" target="_blank"&gt;https://portal.azure.com/#create/Microsoft.AzureProject,&lt;span class="fa-solid fa-up-right-from-square" &gt;&lt;/span&gt;&lt;/a&gt; you will be presented with a Wizard that will walk you through the process of creating a code repository and CI/CD pipeline for a new application. You can choose from a set of sample applications in .NET, Node.js, PHP, Python, Java, or pure HTML &amp;hellip; or bring your own code. The wizard will create a Git Repository with the code and a CI/CD pipeline in VSTS. It will also create all of necessary the Azure resources, including Application Insights monitoring. This promises to make it easier for everyone to get started.&lt;/p&gt;</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/devops-news-from-connect-2017/images/banner.png"/></item><item><title>Using SSH with Visual Studio Team Services</title><link>https://www.kenmuse.com/blog/vsts-ssh/</link><pubDate>Mon, 13 Nov 2017 00:00:00 -0500</pubDate><guid isPermaLink="false">vsts-ssh</guid><category>Azure DevOps</category><description>&lt;p&gt;In April 2016, Visual Studio Team Services introduced support for using SSH to connect to Git repositories. Over the summer of 2017, Microsoft made a number of improvements to reduce latency and improve performance for Git connections. These changes take advantage of Azure Traffic Manager to route the traffic over the
&lt;a class="external-link" href="https://azure.microsoft.com/en-gb/blog/how-microsoft-builds-its-fast-and-reliable-global-network/" arial-label="The Azure Global Network link opens in a new tab" target="_blank"&gt;Azure Global Network&lt;span class="fa-solid fa-up-right-from-square" &gt;&lt;/span&gt;&lt;/a&gt;. According to the
&lt;a class="external-link" href="https://blogs.msdn.microsoft.com/devops/2017/10/23/vsts-ssh-on-azure-global-network/" arial-label="The Microsoft announcement link opens in a new tab" target="_blank"&gt;Microsoft announcement&lt;span class="fa-solid fa-up-right-from-square" &gt;&lt;/span&gt;&lt;/a&gt;, the results were a success &amp;ndash; an overall improvement in transfer speeds and latency. Of course, changes like this have a cost. In this case, Microsoft needed to change the URLs used for SSH connections. Consequently, Microsoft announced that on November 17, the old URLs will be deprecated and no longer work. That day is almost here &amp;ndash; so consider this a friendly reminder!&lt;/p&gt;</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/vsts-ssh/images/image_thumb.png"/></item><item><title>Creating a Temporary Visual Studio Environment</title><link>https://www.kenmuse.com/blog/creating-temporary-visual-studio-environment/</link><pubDate>Thu, 24 Aug 2017 00:00:00 -0400</pubDate><guid isPermaLink="false">creating-temporary-visual-studio-environment</guid><category>Azure</category><description>Learn to create a temporary environment on an Azure VM for your Visual Studio project.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/creating-temporary-visual-studio-environment/images/banner.png"/></item><item><title>DevOps: Connecting VSTS to Azure</title><link>https://www.kenmuse.com/blog/devops-connect-vsts-azure/</link><pubDate>Fri, 11 Aug 2017 00:00:00 -0400</pubDate><guid isPermaLink="false">devops-connect-vsts-azure</guid><category>Azure DevOps</category><description>Learn how to manually connect Visual Studio Team Services (VSTS) to Microsoft Azure.</description><enclosure type="image/png" url="https://www.kenmuse.com/blog/devops-connect-vsts-azure/images/banner.png"/></item></channel></rss>