Die Aktion hashicorp/setup-terraform
ist eine JavaScript-Aktion, die Terraform CLI in Ihrem GitHub Actions-Workflow einrichtet durch:
PATH
hinzu.terraform
Binärdatei zu umschließen und ihren STDOUT-, STDERR- und Exit-Code als Ausgaben mit den Namen stdout
, stderr
bzw. exitcode
verfügbar zu machen. (Dies kann optional übersprungen werden, wenn nachfolgende Schritte im selben Job nicht auf die Ergebnisse von Terraform-Befehlen zugreifen müssen.) Nachdem Sie die Aktion verwendet haben, können nachfolgende Schritte im selben Job beliebige Terraform-Befehle mithilfe der run
von GitHub Actions ausführen. Dadurch können die meisten Terraform-Befehle genauso funktionieren wie auf Ihrer lokalen Befehlszeile.
Diese Aktion kann auf den GitHub Actions-Runnern ubuntu-latest
, windows-latest
und macos-latest
ausgeführt werden. Bei der Ausführung unter windows-latest
sollte die Shell auf Bash eingestellt sein. Bei der Ausführung auf selbstgehosteten GitHub Actions-Runnern muss NodeJS zuvor mit der in action.yml
angegebenen Version installiert werden.
Die Standardkonfiguration installiert die neueste Version der Terraform-CLI und installiert das Wrapper-Skript, um nachfolgende Aufrufe der terraform
Binärdatei zu umschließen:
steps :
- uses : hashicorp/setup-terraform@v3
Eine bestimmte Version von Terraform CLI kann installiert werden:
steps :
- uses : hashicorp/setup-terraform@v3
with :
terraform_version : " 1.1.7 "
Anmeldeinformationen für HCP Terraform (app.terraform.io) können konfiguriert werden:
steps :
- uses : hashicorp/setup-terraform@v3
with :
cli_config_credentials_token : ${{ secrets.TF_API_TOKEN }}
Anmeldeinformationen für Terraform Enterprise (TFE) können konfiguriert werden:
steps :
- uses : hashicorp/setup-terraform@v3
with :
cli_config_credentials_hostname : ' terraform.example.com '
cli_config_credentials_token : ${{ secrets.TF_API_TOKEN }}
Die Installation des Wrapper-Skripts kann übersprungen werden, indem die Variable terraform_wrapper
auf false
gesetzt wird:
steps :
- uses : hashicorp/setup-terraform@v3
with :
terraform_wrapper : false
Nachfolgende Schritte können auf Ausgaben zugreifen, wenn das Wrapper-Skript installiert ist:
steps :
- uses : hashicorp/setup-terraform@v3
- run : terraform init
- id : plan
run : terraform plan -no-color
- run : echo ${{ steps.plan.outputs.stdout }}
- run : echo ${{ steps.plan.outputs.stderr }}
- run : echo ${{ steps.plan.outputs.exitcode }}
Ausgaben können in nachfolgenden Schritten verwendet werden, um den Pull-Request zu kommentieren:
Hinweis: Die Anzahl der Zeichen in einem GitHub-Kommentar ist begrenzt (65535).
Aufgrund dieser Einschränkung kann es vorkommen, dass die Workflow-Ausführung fehlschlägt, auch wenn der Plan erfolgreich war.
Ein anderer Ansatz besteht darin, Ihren Plan an die Umgebungsvariable $GITHUB_STEP_SUMMARY anzuhängen, die Markdown unterstützt.
defaults :
run :
working-directory : ${{ env.tf_actions_working_dir }}
permissions :
pull-requests : write
steps :
- uses : actions/checkout@v4
- uses : hashicorp/setup-terraform@v3
- name : Terraform fmt
id : fmt
run : terraform fmt -check
continue-on-error : true
- name : Terraform Init
id : init
run : terraform init
- name : Terraform Validate
id : validate
run : terraform validate -no-color
- name : Terraform Plan
id : plan
run : terraform plan -no-color
continue-on-error : true
- uses : actions/github-script@v7
if : github.event_name == 'pull_request'
env :
PLAN : " terraform n ${{ steps.plan.outputs.stdout }} "
with :
github-token : ${{ secrets.GITHUB_TOKEN }}
script : |
const output = `#### Terraform Format and Style ?`${{ steps.fmt.outcome }}`
#### Terraform Initialization `${{ steps.init.outcome }}`
#### Terraform Validation ?`${{ steps.validate.outcome }}`
<details><summary>Validation Output</summary>
```n
${{ steps.validate.outputs.stdout }}
```
</details>
#### Terraform Plan `${{ steps.plan.outcome }}`
<details><summary>Show Plan</summary>
```n
${process.env.PLAN}
```
</details>
*Pusher: @${{ github.actor }}, Action: `${{ github.event_name }}`, Working Directory: `${{ env.tf_actions_working_dir }}`, Workflow: `${{ github.workflow }}`*`;
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: output
})
Anstatt jedes Mal einen neuen Kommentar zu erstellen, können Sie auch einen bestehenden aktualisieren:
defaults :
run :
working-directory : ${{ env.tf_actions_working_dir }}
permissions :
pull-requests : write
steps :
- uses : actions/checkout@v4
- uses : hashicorp/setup-terraform@v3
- name : Terraform fmt
id : fmt
run : terraform fmt -check
continue-on-error : true
- name : Terraform Init
id : init
run : terraform init
- name : Terraform Validate
id : validate
run : terraform validate -no-color
- name : Terraform Plan
id : plan
run : terraform plan -no-color
continue-on-error : true
- uses : actions/github-script@v7
if : github.event_name == 'pull_request'
env :
PLAN : " terraform n ${{ steps.plan.outputs.stdout }} "
with :
github-token : ${{ secrets.GITHUB_TOKEN }}
script : |
// 1. Retrieve existing bot comments for the PR
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
})
const botComment = comments.find(comment => {
return comment.user.type === 'Bot' && comment.body.includes('Terraform Format and Style')
})
// 2. Prepare format of the comment
const output = `#### Terraform Format and Style ?`${{ steps.fmt.outcome }}`
#### Terraform Initialization `${{ steps.init.outcome }}`
#### Terraform Validation ?`${{ steps.validate.outcome }}`
<details><summary>Validation Output</summary>
```n
${{ steps.validate.outputs.stdout }}
```
</details>
#### Terraform Plan `${{ steps.plan.outcome }}`
<details><summary>Show Plan</summary>
```n
${process.env.PLAN}
```
</details>
*Pusher: @${{ github.actor }}, Action: `${{ github.event_name }}`, Working Directory: `${{ env.tf_actions_working_dir }}`, Workflow: `${{ github.workflow }}`*`;
// 3. If we have a comment, update it, otherwise create a new one
if (botComment) {
github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: botComment.id,
body: output
})
} else {
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: output
})
}
Die Aktion unterstützt die folgenden Eingaben:
cli_config_credentials_hostname
– (optional) Der Hostname einer HCP Terraform/Terraform Enterprise-Instanz, die im Anmeldeinformationsblock der Terraform-CLI-Konfigurationsdatei platziert werden soll. Standardmäßig ist app.terraform.io
.cli_config_credentials_token
– (optional) Das API-Token für eine HCP Terraform/Terraform Enterprise-Instanz, das im Anmeldeinformationsblock der Terraform-CLI-Konfigurationsdatei platziert werden soll.terraform_version
– (optional) Die zu installierende Version der Terraform-CLI. Anstelle einer Vollversionszeichenfolge können Sie auch eine Einschränkungszeichenfolge angeben (siehe Semver-Bereiche für verfügbare Bereichsspezifikationen). Beispiele sind: "<1.2.0"
, "~1.1.0"
, "1.1.7"
(alle drei installieren die neueste verfügbare Version 1.1
). Vorabversionen können angegeben werden und ein Bereich bleibt innerhalb des angegebenen Tags, z. B. beta
oder rc
. Wenn keine Version angegeben ist, wird standardmäßig die latest
verwendet.terraform_wrapper
– (optional) Ob ein Wrapper installiert werden soll, um nachfolgende Aufrufe der terraform
Binärdatei zu umschließen und ihren STDOUT-, STDERR- und Exit-Code als Ausgaben mit den Namen stdout
, stderr
bzw. exitcode
verfügbar zu machen. Der Standardwert ist true
. Durch diese Aktion werden keine Ausgänge direkt konfiguriert. Wenn Sie jedoch die Eingabe terraform_wrapper
auf true
setzen, sind die folgenden Ausgaben für nachfolgende Schritte verfügbar, die die terraform
Binärdatei aufrufen:
stdout
– Der STDOUT-Stream des Aufrufs der terraform
Binärdatei.stderr
– Der STDERR-Stream des Aufrufs der terraform
Binärdatei.exitcode
– Der Exitcode des Aufrufs der terraform
Binärdatei. Mozilla Public License v2.0
Verhaltenskodex
Durch die Nutzung der Software in diesem Repository (die „Software“) erkennen Sie Folgendes an: (1) Die Software befindet sich noch in der Entwicklung, kann sich ändern, wurde von HashiCorp nicht als kommerzielles Produkt veröffentlicht und wird derzeit in keiner Weise unterstützt von HashiCorp; (2) die Software wird im Ist-Zustand bereitgestellt und kann Fehler, Fehler oder andere Probleme enthalten; (3) Die Software ist NICHT FÜR DEN PRODUKTIONSZWECK GEDACHT, die Verwendung der Software kann zu unerwarteten Ergebnissen, Datenverlust oder anderen unerwarteten Ergebnissen führen und HashiCorp lehnt jegliche Haftung ab, die sich aus der Verwendung der Software ergibt; und (4) HashiCorp behält sich alle Rechte vor, jederzeit und ohne jegliche Verpflichtung oder Haftung sämtliche Entscheidungen über die Features, die Funktionalität und die kommerzielle Veröffentlichung (oder Nichtveröffentlichung) der Software zu treffen.
Alle Quellcodedateien (ausgenommen automatisch generierte Dateien wie package.json
, prose und in .copywrite.hcl ausgeschlossene Dateien) müssen oben einen Lizenzheader haben.
Dies kann automatisch generiert werden, indem das HashiCorp- copywrite
Tool installiert und copywrite headers
im Stammverzeichnis des Repositorys ausgeführt werden.