[英]Execute github actions workflow/job in directory where code was changed
我正在嘗試實施github 操作工作流,該工作將計划和應用我的 terraform 代碼更改,僅用於進行更改的目錄。 我目前面臨的問題是我無法弄清楚如何切換目錄,以便從代碼已更新/更改的目錄執行 terraform 計划。
我有一個 monorepo 設置,如下所示:
repo
tf-folder-1
tf-folder-2
tf-folder-3
每個文件夾包含一個獨立的 terraform 配置。 因此,例如,我只想在 tf-folder-1 中的文件發生更改時運行工作流。 這樣的工作流需要切換到工作目錄 tf-folder-1 然后運行terraform plan/apply 。
jobs:
terraform:
name: "Terraform"
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./tf-folder-1
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Configure AWS credentials from Test account
uses: aws-actions/configure-aws-credentials@v1
with:
role-to-assume: arn:aws:iam::000000000000000:role/deploy-role
aws-region: eu-west-2
- name: Setup Terraform
uses: hashicorp/setup-terraform@v2
...
到目前為止,我有上面的 terraform 作業,但它只針對靜態定義的工作目錄運行。 它不適用於在特定文件夾中發生更改時應該運行工作流的用例。 有人可以建議如何修復此管道嗎?
謝謝
GitHub 操作具有路徑過濾功能,您可以在處理由push
或push_request
事件觸發的工作流時加以利用。
例如,假設您有一個包含tf_1
、 tf_2
和 tf_3 目錄的tf_3
。 當目錄tf_1
發生更改時,您可以執行以下操作。
name: Demonstrate GitHub Actions on Monorepo
on:
push:
branches:
- master
paths:
- 'tf_1/**'
defaults:
run:
working-directory: tf_1
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
有關路徑過濾的更多詳細信息,請參閱GitHub Actions 語法文檔。
您可以使用 GitHub 操作來輸出文件已更改/修改的目錄,例如: Changed-files ,甚至使用git diff
執行 shell 步驟的計算。
如果您使用 GHA 建議您可以將輸入dir_names
設置為true
,這將 output 唯一更改的目錄而不是文件名,根據結果您可以更改目錄以運行您的 Terraform 操作。
這是根據已更新的目錄數量運行多個作業的解決方案。
在下面的代碼片段中,您可以看到將檢查哪些目錄已更新的directories
作業,然后是 output 一個數組或開關,然后用於 terraform 作業的matrix
策略。
jobs:
directories:
name: "Directory-changes"
runs-on: ubuntu-latest
steps:
- uses: theappnest/terraform-monorepo-action@master
id: directories
with:
ignore: |
aws/**/policies
aws/**/templates
aws/**/scripts
- run: echo ${{ steps.directories.outputs.modules }}
outputs:
dirs: ${{ steps.directories.outputs.modules }}
terraform:
name: "Terraform"
runs-on: ubuntu-latest
needs: directories
strategy:
matrix:
directories: ${{ fromJson(needs.directories.outputs.dirs) }}
defaults:
run:
working-directory: ${{ matrix.directories }}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Terraform
uses: hashicorp/setup-terraform@v2
with:
cli_config_credentials_token: ${{ secrets.TF_CLOUD_TEAM_API_TOKEN_PREPROD }}
- name: Terraform Format
id: fmt
run: terraform fmt -check
- name: Terraform Init
id: init
run: terraform init
- name: Terraform Validate
id: validate
run: terraform validate -no-color
- name: Terraform Plan
id: plan
if: github.event_name == 'pull_request'
run: terraform plan -no-color -input=false
continue-on-error: true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.