hashicorp/setup-terraform
작업은 다음을 통해 GitHub Actions 워크플로에서 Terraform CLI를 설정하는 JavaScript 작업입니다.
PATH
에 추가합니다.terraform
바이너리의 후속 호출을 래핑하고 STDOUT, STDERR 및 종료 코드를 각각 stdout
, stderr
및 exitcode
라는 출력으로 노출하는 래퍼 스크립트를 설치합니다. (동일 작업의 후속 단계에서 Terraform 명령 결과에 액세스할 필요가 없는 경우 선택적으로 건너뛸 수 있습니다.) 작업을 사용한 후 동일한 작업의 후속 단계에서는 GitHub Actions run
구문을 사용하여 임의 Terraform 명령을 실행할 수 있습니다. 이를 통해 대부분의 Terraform 명령이 로컬 명령줄에서와 똑같이 작동할 수 있습니다.
이 작업은 ubuntu-latest
, windows-latest
및 macos-latest
GitHub Actions 실행기에서 실행할 수 있습니다. windows-latest
에서 실행할 때 쉘은 Bash로 설정되어야 합니다. 자체 호스팅 GitHub Actions 실행기에서 실행할 때 NodeJS는 이전에 action.yml
에 지정된 버전으로 설치되어 있어야 합니다.
기본 구성은 최신 버전의 Terraform CLI를 설치하고 래퍼 스크립트를 설치하여 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 }}
TFE(Terraform Enterprise)에 대한 자격 증명은 다음과 같이 구성할 수 있습니다.
steps :
- uses : hashicorp/setup-terraform@v3
with :
cli_config_credentials_hostname : ' terraform.example.com '
cli_config_credentials_token : ${{ secrets.TF_API_TOKEN }}
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
- (선택 사항) Terraform CLI 구성 파일의 자격 증명 블록 내에 배치할 HCP Terraform/Terraform Enterprise 인스턴스의 호스트 이름입니다. 기본값은 app.terraform.io
입니다.cli_config_credentials_token
- (선택 사항) Terraform CLI 구성 파일의 자격 증명 블록 내에 배치할 HCP Terraform/Terraform Enterprise 인스턴스에 대한 API 토큰입니다.terraform_version
- (선택 사항) 설치할 Terraform CLI 버전입니다. 전체 버전 문자열 대신 제약 조건 문자열을 지정할 수도 있습니다(사용 가능한 범위 사양은 Semver 범위 참조). 예: "<1.2.0"
, "~1.1.0"
, "1.1.7"
(세 가지 모두 사용 가능한 최신 1.1
버전 설치) 시험판 버전을 지정할 수 있으며 범위는 beta
또는 rc
와 같은 지정된 태그 내에 유지됩니다. 버전이 지정되지 않으면 기본적으로 latest
이 사용됩니다.terraform_wrapper
- (선택 사항) terraform
바이너리의 후속 호출을 래핑하고 해당 STDOUT, STDERR 및 종료 코드를 각각 stdout
, stderr
및 exitcode
라는 출력으로 노출하기 위해 래퍼를 설치할지 여부입니다. 기본값은 true
입니다. 이 작업은 출력을 직접 구성하지 않습니다. 그러나 terraform_wrapper
입력을 true
로 설정하면 terraform
바이너리를 호출하는 후속 단계에 다음 출력을 사용할 수 있습니다.
stdout
- terraform
바이너리 호출의 STDOUT 스트림입니다.stderr
- terraform
바이너리 호출의 STDERR 스트림입니다.exitcode
- terraform
바이너리 호출의 종료 코드입니다. 모질라 공개 라이센스 v2.0
행동 강령
이 저장소의 소프트웨어("소프트웨어")를 사용함으로써 귀하는 다음 사항을 인정합니다. (1) 소프트웨어는 아직 개발 중이고 변경될 수 있으며 HashiCorp에 의해 상용 제품으로 출시되지 않았으며 현재 어떤 방식으로도 지원되지 않습니다. HashiCorp에 의해; (2) 소프트웨어는 "있는 그대로" 제공되며 버그, 오류 또는 기타 문제가 포함될 수 있습니다. (3) 소프트웨어는 생산 용도로 만들어진 것이 아니며, 소프트웨어를 사용하면 예상치 못한 결과, 데이터 손실 또는 기타 예상치 못한 결과가 발생할 수 있으며 HashiCorp는 소프트웨어 사용으로 인해 발생하는 모든 책임을 부인합니다. (4) HashiCorp는 언제든지 어떠한 의무나 책임 없이 소프트웨어의 특징, 기능 및 상업적 릴리스(또는 비 릴리스)에 대한 모든 결정을 내릴 수 있는 모든 권리를 보유합니다.
모든 소스 코드 파일( package.json
과 같은 자동 생성 파일, prose 및 .copywrite.hcl에서 제외된 파일 제외) 상단에 라이선스 헤더가 있어야 합니다.
이는 HashiCorp copywrite
도구를 설치하고 저장소 루트에서 copywrite headers
실행하여 자동 생성될 수 있습니다.