การดำเนินการ hashicorp/setup-terraform
คือการทำงานของ JavaScript ที่ตั้งค่า Terraform CLI ในเวิร์กโฟลว์ GitHub Actions ของคุณโดย:
PATH
terraform
ที่ตามมา และเปิดเผย STDOUT, STDERR และโค้ดทางออกเป็นเอาต์พุตชื่อ stdout
, stderr
และ exitcode
ตามลำดับ (สามารถเลือกข้ามได้หากขั้นตอนต่อมาในงานเดียวกันไม่จำเป็นต้องเข้าถึงผลลัพธ์ของคำสั่ง Terraform) หลังจากที่คุณใช้การดำเนินการแล้ว ขั้นตอนต่อมาในงานเดียวกันจะสามารถเรียกใช้คำสั่ง Terraform ที่กำหนดเองได้โดยใช้ไวยากรณ์ run
GitHub Actions ซึ่งช่วยให้คำสั่ง Terraform ส่วนใหญ่ทำงานเหมือนกับคำสั่งในเครื่องของคุณทุกประการ
การดำเนินการนี้สามารถเรียกใช้บนนักวิ่ง GitHub Actions รุ่น ubuntu-latest
, windows-latest
และ macos-latest
เมื่อทำงานบน windows-latest
เชลล์ควรตั้งค่าเป็น Bash เมื่อรันบนรันเนอร์ GitHub Actions ที่โฮสต์เอง จะต้องติดตั้ง NodeJS ก่อนหน้านี้ด้วยเวอร์ชันที่ระบุใน action.yml
การกำหนดค่าเริ่มต้นจะติดตั้ง Terraform CLI เวอร์ชันล่าสุด และติดตั้งสคริปต์ wrapper เพื่อตัดการเรียกไบนารี terraform
ในภายหลัง:
steps :
- uses : hashicorp/setup-terraform@v3
สามารถติดตั้ง Terraform CLI เวอร์ชันเฉพาะได้:
steps :
- uses : hashicorp/setup-terraform@v3
with :
terraform_version : " 1.1.7 "
ข้อมูลรับรองสำหรับ HCP Terraform (app.terraform.io) สามารถกำหนดค่าได้:
steps :
- uses : hashicorp/setup-terraform@v3
with :
cli_config_credentials_token : ${{ secrets.TF_API_TOKEN }}
ข้อมูลรับรองสำหรับ Terraform Enterprise (TFE) สามารถกำหนดค่าได้:
steps :
- uses : hashicorp/setup-terraform@v3
with :
cli_config_credentials_hostname : ' terraform.example.com '
cli_config_credentials_token : ${{ secrets.TF_API_TOKEN }}
การติดตั้งสคริปต์ wrapper สามารถข้ามได้โดยตั้งค่าตัวแปร terraform_wrapper
เป็น false
:
steps :
- uses : hashicorp/setup-terraform@v3
with :
terraform_wrapper : false
ขั้นตอนต่อมาจะสามารถเข้าถึงเอาต์พุตได้เมื่อมีการติดตั้งสคริปต์ตัวตัดคำ:
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 }}
ผลลัพธ์สามารถนำมาใช้ในขั้นตอนต่อไปเพื่อแสดงความคิดเห็นในคำขอดึง:
หมายเหตุ: มีการจำกัดจำนวนอักขระในความคิดเห็น GitHub (65535)
เนื่องจากข้อจำกัดดังกล่าว คุณอาจจบลงด้วยการรันเวิร์กโฟลว์ที่ล้มเหลวแม้ว่าแผนจะสำเร็จก็ตาม
อีกวิธีหนึ่งคือการผนวกแผนของคุณเข้ากับตัวแปรสภาพแวดล้อม $GITHUB_STEP_SUMMARY ซึ่งรองรับมาร์กดาวน์
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
})
แทนที่จะสร้างความคิดเห็นใหม่ทุกครั้ง คุณสามารถอัปเดตความคิดเห็นที่มีอยู่ได้:
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
})
}
การดำเนินการรองรับอินพุตต่อไปนี้:
cli_config_credentials_hostname
- (ไม่บังคับ) ชื่อโฮสต์ของอินสแตนซ์ HCP Terraform/Terraform Enterprise ที่จะวางไว้ภายในบล็อกข้อมูลประจำตัวของไฟล์การกำหนดค่า Terraform CLI ค่าเริ่มต้นคือ app.terraform.io
cli_config_credentials_token
- (ทางเลือก) โทเค็น API สำหรับอินสแตนซ์ HCP Terraform/Terraform Enterprise ที่จะวางไว้ภายในบล็อกข้อมูลประจำตัวของไฟล์การกำหนดค่า Terraform CLIterraform_version
- (เป็นทางเลือก) เวอร์ชันของ Terraform CLI ที่จะติดตั้ง แทนที่จะใช้สตริงเวอร์ชันเต็ม คุณยังสามารถระบุสตริงข้อจำกัดได้ (ดูช่วง Semver สำหรับข้อกำหนดเฉพาะของช่วงที่มีอยู่) ตัวอย่างคือ: "<1.2.0"
, "~1.1.0"
, "1.1.7"
(ทั้งสามติดตั้งเวอร์ชัน 1.1
ล่าสุดที่มีอยู่) คุณสามารถระบุเวอร์ชันก่อนเผยแพร่ได้ และช่วงจะอยู่ภายในแท็กที่กำหนด เช่น beta
หรือ rc
หากไม่มีการระบุเวอร์ชัน ระบบจะใช้ค่าเริ่มต้นเป็น latest
terraform_wrapper
- (เป็นทางเลือก) ไม่ว่าจะติดตั้ง wrapper เพื่อตัดการเรียกไบนารีของ terraform
ในภายหลัง และเปิดเผย STDOUT, STDERR และโค้ดทางออกเป็นเอาต์พุตชื่อ stdout
, stderr
และ exitcode
ตามลำดับ ค่าเริ่มต้นเป็น true
การดำเนินการนี้ไม่ได้กำหนดค่าเอาต์พุตใดๆ โดยตรง อย่างไรก็ตาม เมื่อคุณตั้งค่าอินพุต terraform_wrapper
เป็น true
เอาต์พุตต่อไปนี้จะพร้อมใช้งานสำหรับขั้นตอนต่อมาที่เรียกไบนารี terraform
:
stdout
- สตรีม STDOUT ของการเรียกไปยังไบนารี terraform
stderr
- สตรีม STDERR ของการเรียกไปยังไบนารี terraform
exitcode
- รหัสทางออกของการเรียกไปยังไบนารี terraform
Mozilla ใบอนุญาตสาธารณะ v2.0
หลักจรรยาบรรณ
ด้วยการใช้ซอฟต์แวร์ในพื้นที่เก็บข้อมูลนี้ ("ซอฟต์แวร์") คุณรับทราบว่า: (1) ซอฟต์แวร์ยังอยู่ระหว่างการพัฒนา อาจมีการเปลี่ยนแปลง และไม่ได้เผยแพร่เป็นผลิตภัณฑ์เชิงพาณิชย์โดย HashiCorp และในปัจจุบันไม่ได้รับการสนับสนุนในทางใดทางหนึ่ง โดย HashiCorp; (2) ซอฟต์แวร์จัดทำขึ้น "ตามสภาพ" และอาจรวมถึงจุดบกพร่อง ข้อผิดพลาด หรือปัญหาอื่น ๆ (3) ซอฟต์แวร์ไม่ได้มีไว้สำหรับการใช้งานจริง การใช้ซอฟต์แวร์อาจส่งผลให้เกิดผลลัพธ์ที่ไม่คาดคิด การสูญหายของข้อมูล หรือผลลัพธ์ที่ไม่คาดคิดอื่น ๆ และ HashiCorp ปฏิเสธความรับผิดชอบใด ๆ และทั้งหมดที่เกิดจากการใช้ซอฟต์แวร์ และ (4) HashiCorp ขอสงวนสิทธิ์ทั้งหมดในการตัดสินใจทั้งหมดเกี่ยวกับคุณสมบัติ ฟังก์ชันการทำงาน และการเผยแพร่เชิงพาณิชย์ (หรือการไม่เผยแพร่) ของซอฟต์แวร์ ได้ตลอดเวลา และไม่มีภาระผูกพันหรือความรับผิดใด ๆ
ไฟล์ซอร์สโค้ดทั้งหมด (ยกเว้นไฟล์ที่สร้างอัตโนมัติ เช่น package.json
ร้อยแก้ว และไฟล์ที่ไม่รวมอยู่ใน .copywrite.hcl) ต้องมีส่วนหัวของใบอนุญาตที่ด้านบน
ซึ่งสามารถสร้างอัตโนมัติได้โดยการติดตั้งเครื่องมือ copywrite
HashiCorp และเรียกใช้ copywrite headers
ในรูทของพื้นที่เก็บข้อมูล