用途:帮助搭建可用的 OCI CI 流水线,完成对 OCI 的认证、安全运行 Terraform,并对依赖 OCI 的代码进行测试。OCI Terraform 提供程序存在已知缺陷,如 ResourcePrincipal 会强制使用错误区域(#1761),因此需要特定规避措施。
前提条件:具备已在 ~/.oci/config 中配置 API 签名密钥的 OCI 租户;Terraform >= 1.5 及 oracle/oci 提供程序;启用 Actions 的 GitHub 仓库;配置 GitHub Secrets:OCI_USER_OCID、OCI_FINGERPRINT、OCI_TENANCY_OCID、OCI_REGION、OCI_PRIVATE_KEY(PEM 内容,base64 编码);Python 3.8+ 并用 pip install oci 安装 SDK 以编写测试。
主要能力与用法:
- 配置 GitHub Secrets:用 base64 -w 0 ~/.oci/oci_api_key.pem 编码私钥并存入 OCI_PRIVATE_KEY,其余值来自 ~/.oci/config。
- 创建 .github/workflows/oci-terraform.yml 工作流,在 ubuntu-latest 上检出代码、写入私钥、安装 Terraform、执行 terraform init 与 terraform plan -out=tfplan。
- 配置 OCI Provider,并始终显式设置 region 以规避 ResourcePrincipal 区域缺陷。
- 在非 Terraform 的 CI 任务中安装 OCI CLI:pip install oci-cli,写入 ~/.oci/config,执行如 oci compute instance list --compartment-id 的命令。
- 使用 mocked OCI SDK 客户端编写单元测试,用 @patch 模拟 oci.core.ComputeClient 等。
适用场景:需要自动化 OCI 基础设施部署、在 CI 中运行 Terraform 计划、对 OCI 依赖代码进行测试的团队。
限制:资料仅覆盖 CI 集成配置与测试模式,未涉及收费、价格或其他平台支持;部分错误处理(如 429 限流、证书验证失败)需自行添加重试或修复逻辑。
常见错误参考:NotAuthenticated(401) 检查 API 密钥与指纹;NotAuthorizedOrNotFound(404) 检查 IAM 策略;Provider 崩溃时显式设置 region;TooManyRequests(429) 添加指数退避;CERTIFICATE_VERIFY_FAILED 安装 certifi 并设置 REQUESTS_CA_BUNDLE;init 失败时固定 provider 版本 >= 5.0.0。