PowerShell utilities for CI/CD pipelines. This module provides cmdlets to facilitate common actions in Azure DevOps Pipelines and GitHub Actions, such as logging commands, setting variables, and managing build metadata.
- Multi-Platform Support: Works with both Azure DevOps Pipelines and GitHub Actions
- Logging Commands: Write warnings, errors, and progress updates using platform-specific logging commands
- Variable Management: Set pipeline variables and outputs using appropriate syntax for each platform
- Build Management: Add tags to builds and organize output with collapsible sections
- Context Detection: Automatically detect the CI/CD environment and use appropriate commands
- Azure DevOps Pipelines - Full support for all Azure DevOps logging commands
- GitHub Actions - Full support for GitHub Actions workflow commands
Install-Module PipelineUtils -Scope CurrentUsergit clone https://github.com/igoravl/PipelineUtils.git
cd PipelineUtils
# Install dependencies and build
.\Build.ps1 -InstallDependenciesWrite-PipelineWarning- Write warning messages to pipeline logsWrite-PipelineError- Write error messages to pipeline logsWrite-PipelineDebug- Write debug messages to pipeline logsWrite-PipelineCommand- Write command messages to pipeline logsWrite-PipelineTaskProgress- Update task progress indicatorsWrite-PipelineSection- Create sections in logsWrite-PipelineProgress- Report progress with percentage
Write-PipelineGroupStart- Start a collapsible group in logsWrite-PipelineGroupEnd- End a collapsible group in logsWrite-PipelineGroup- Create a collapsible group with a script block
Set-PipelineVariable- Set pipeline variables (including secrets and output variables)Set-PipelineSecretValue- Mask a value as secret in logs
Add-PipelineBuildTag- Add tags to the current build/runSet-PipelineBuildNumber- Set the build/run numberSet-PipelineReleaseNumber- Set the release name (Azure DevOps only)Add-PipelineSummary- Add Markdown summary to the pipeline runAdd-PipelinePath- Add a directory to the PATH environment variableAdd-PipelineTaskLogFile- Upload a log file (Azure DevOps only)Complete-PipelineTask- Mark task completion with status (Azure DevOps only)
Test-PipelineContext(Private) - Detect CI/CD pipeline contextGet-PipelineType(Private) - Get the current pipeline type (Azure DevOps or GitHub Actions)
Write-PipelineWarning "This is a warning message"
Write-PipelineError "This is an error message"
Write-PipelineDebug "This is a debug message"Write-PipelineWarning -Message "Deprecated function used" -SourcePath "script.ps1" -LineNumber 42
Write-PipelineError -Message "Compilation failed" -SourcePath "build.ps1" -LineNumber 25 -IssueCode "BUILD001"# Set a regular variable (Azure DevOps) or environment variable (GitHub Actions)
Set-PipelineVariable -Name "BuildNumber" -Value "1.0.42"
# Set a secret variable (Azure DevOps only - GitHub Actions requires repository secrets)
Set-PipelineVariable -Name "ApiKey" -Value "secret123" -Secret
# Set an output variable (available to subsequent jobs/steps)
Set-PipelineVariable -Name "DeploymentTarget" -Value "Production" -Output
# Mask a secret value in logs
Set-PipelineSecretValue -Value "mySecretPassword"# Add tags to the build
Add-PipelineBuildTag -Tag "release"
Add-PipelineBuildTag -Tag "hotfix"
# Set build number
Set-PipelineBuildNumber -BuildNumber "1.0.42"
# Add a summary (markdown)
Add-PipelineSummary -Content "## Build Results`n- Tests Passed: 42`n- Code Coverage: 95%"
# Add path to PATH environment variable
Add-PipelinePath -Path "C:\tools\bin"Write-PipelineTaskProgress -CurrentOperation "Installing dependencies" -PercentComplete 25
Write-PipelineProgress -PercentComplete 75 -Activity "Running tests"Write-PipelineGroupStart "Build Phase"
# ... build commands ...
Write-PipelineGroupEnd
# Or create sections
Write-PipelineSection -Text "Deployment" -BoxedThis project uses ModuleBuilder and Invoke-Build for the build process.
# Build the module (installs dependencies automatically)
.\Build.ps1 -InstallDependencies
# Run tests
.\Build.ps1 -InstallDependencies Test
# Create distribution package
.\Build.ps1 -InstallDependencies Package
# Or use Invoke-Build directly
Invoke-Build Build
Invoke-Build TestPipelineUtils/
├── Source/ # Source files (ModuleBuilder convention)
│ ├── Public/ # Public functions (exported)
│ ├── Private/ # Private functions (internal)
│ ├── Enum/ # Enums (PipelineType)
│ ├── PipelineUtils.psd1 # Module manifest
│ └── build.psd1 # ModuleBuilder configuration
├── Tests/ # Pester tests
├── Build/ # Build output (created by ModuleBuilder)
├── artifacts/ # Distribution packages
└── ib.build.ps1 # Invoke-Build script
- Fork the repository
- Create a feature branch
- Add tests for new functionality
- Ensure all tests pass:
Build.ps1 -Targets Test - Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
- Uses
##vso[...]logging commands - Supports all advanced features like task completion status, progress tracking, and release management
- Variables set with
-Secretflag are masked in logs - Build tags are applied directly to the build
- Supports classic release pipelines with
Set-PipelineReleaseNumber - Task log files can be uploaded with
Add-PipelineTaskLogFile
- Uses
::command::workflow commands - Environment variables are written to
$env:GITHUB_ENV - Output variables are written to
$env:GITHUB_OUTPUT - Secrets must be configured in repository settings (cannot be set dynamically), but can be masked
- Summaries are written to
$env:GITHUB_STEP_SUMMARY - Groups use
::group::and::endgroup:: - Some Azure DevOps-specific commands show warnings when used in GitHub Actions