将 CI/CD 集成到 Snowflake CLI 中¶
Snowflake CLI 可与流行的 CI/CD(持续集成和持续交付)系统和框架集成,如 GitHub Actions (https://github.com/features/actions),从而高效地使 Snowflake 中的 SQL、Snowpark、原生应用程序或 Notebook 工作流程自动化。
备注
未来的版本将包括对 Jenkins 和 Azure DevOps 的支持。
下图展示了一个典型的 Snowflake CLI 中的 CI/CD 工作流程。

CI/CD 工作流程步骤¶
存储: 配置远程 Git 存储库以安全地管理 Snowflake 文件。
代码: 使用 IDE 或 Snowsight 开发 Snowflake 代码,可根据个人偏好进行定制。
安装: 安装 Snowflake CLI,并配置您偏好的 CI/CD 提供商,如 GitHub Actions。
部署: 将 Snowflake CLI 与您选择的 CI/CD 工具结合使用,实现自动化部署。
监控: 借助 Snowflake Trail,跟踪 Snowflake 中的代码和工作流程性能,以获得实时见解。
迭代: 对项目进行少量、频繁的更新以实现持续改进;如有必要,较小的更改可简化管理和回滚。
使用 GitHub Actions 实现 CI/CD¶
Snowflake CLI Action 是专为将 Snowflake CLI 集成到 CI/CD 管道而设计的 GitHub Action。它允许您在 GitHub 工作流程中自动执行 Snowflake CLI 命令。
使用 Snowflake CLI Actions¶
Snowflake CLI 的 Github Actions 简化了在 CI/CD 工作流程中安装和使用 Snowflake CLI 的过程。CLI 会以隔离的方式安装,确保它不会与项目的依赖项发生冲突。它会自动在 ~/.snowflake/
目录中设置输入配置文件。
输入参数¶
Snowflake CLI Action 在 Github 工作流程 YAML 文件中使用以下输入参数,例如 <repo-name>/.github/workflows/my-workflow.yaml
:
cli-version
:指定要使用的 Snowflake CLI 版本,例如3.6.0
。如果未提供,将默认使用 Snowflake CLI 的最新版本。default-config-file-path
:配置文件 (config.toml
) 在存储库中的路径。该路径必须是相对于存储库根目录的相对路径。当使用临时连接(-x
选项)时不需要配置文件。
在 CI/CD 工作流程中安全地配置该 Action¶
要使用 Github Action,必须执行以下操作:
生成私钥。有关更多信息,请参阅 密钥对身份验证和密钥对轮换。
将凭据存储到 GitHub 密钥:包括账户、私钥和加密短语等。有关更多信息,请参阅 GitHub Actions 文档 (https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-a-repository)。
定义连接¶
您可以定义一个 GitHub Action,以通过临时连接或配置文件中定义的连接来连接 Snowflake。有关管理连接的更多信息,请参阅 管理 Snowflake 连接。
使用临时连接¶
有关临时连接的更多信息,请参阅 使用临时连接。
要为临时连接设置 Snowflake 凭据,请按照以下步骤操作:
在 GitHub 工作流程中,将密钥映射为环境变量,格式为
SNOWFLAKE_<key>=<value>
,示例如下:env: SNOWFLAKE_PRIVATE_KEY_RAW: ${{ secrets.SNOWFLAKE_PRIVATE_KEY_RAW }} SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
配置 Snowflake CLI Action。
如果您使用的是最新版本的 Snowflake CLI,则无需添加
cli-version
参数。以下示例指示 Action 使用 Snowflake CLI 特定版本 3.6.0:- uses: snowflakedb/snowflake-cli-action@v1.5 with: cli-version: "3.6.0"
可选:如果您的私钥已加密,要设置加密短语,请将 PRIVATE_KEY_PASSPHRASE 环境变量设置为私钥加密短语。Snowflake 使用此加密短语来解密私钥。例如:
- name: Execute Snowflake CLI command env: PRIVATE_KEY_PASSPHRASE: ${{ secrets.PASSPHARSE }}
要使用密码而不是私钥,请取消设置
SNOWFLAKE_AUTHENTICATOR
环境变量,然后添加SNOWFLAKE_PASSWORD
变量,如下所示:- name: Execute Snowflake CLI command env: SNOWFLAKE_USER: ${{ secrets.SNOWFLAKE_USER }} SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }} SNOWFLAKE_PASSWORD: ${{ secrets.SNOWFLAKE_PASSWORD }}
备注
为提升您在使用密码和 MFA 时的体验,Snowflake 建议您 配置 MFA 缓存。
有关如何在环境变量中设置 Snowflake 凭据的详细信息,请参阅 为 Snowflake 凭据使用环境变量;关于如何在 GitHub CI/CD 工作流程中定义环境变量的详细信息,请参阅 为单个工作流程定义环境变量 (https://docs.github.com/en/actions/learn-github-actions/variables#defining-environment-variables-for-a-single-workflow)。
通过临时连接,添加要执行的
snow
命令,如下所示:run: | snow --version snow connection test --temporary-connection
以下示例显示了已完成的示例 <repo-name>/.github/workflows/my-workflow.yaml
文件:
name: deploy
on: [push]
jobs:
version:
name: "Check Snowflake CLI version"
runs-on: ubuntu-latest
steps:
# Snowflake CLI installation
- uses: snowflakedb/snowflake-cli-action@v1.5
# Use the CLI
- name: Execute Snowflake CLI command
env:
SNOWFLAKE_AUTHENTICATOR: SNOWFLAKE_JWT
SNOWFLAKE_USER: ${{ secrets.SNOWFLAKE_USER }}
SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
SNOWFLAKE_PRIVATE_KEY_RAW: ${{ secrets.SNOWFLAKE_PRIVATE_KEY_RAW }}
PRIVATE_KEY_PASSPHRASE: ${{ secrets.PASSPHARSE }} # Passphrase is only necessary if private key is encrypted.
run: |
snow --help
snow connection test -x
在验证 Action 可以成功连接到 Snowflake 之后,您可以添加更多 Snowflake CLI 命令,如 snow notebook create
或 snow git execute
。有关支持的命令的信息,请参阅 Snowflake CLI 命令参考。
使用配置文件¶
有关定义连接的更多信息,请参阅 定义连接。
要为特定连接设置 Snowflake 凭据,请执行以下步骤:
在 Git 存储库的根目录下创建一个 config.toml 文件,内容为一个空的配置连接,如下所示:
default_connection_name = "myconnection" [connections.myconnection]
此文件用作模板,不应包含实际凭据。
在 GitHub 工作流程中,将密钥映射为环境变量,格式为
SNOWFLAKE_<key>=<value>
,示例如下:env: SNOWFLAKE_CONNECTIONS_MYCONNECTION_PRIVATE_KEY_RAW: ${{ secrets.SNOWFLAKE_PRIVATE_KEY_RAW }} SNOWFLAKE_CONNECTIONS_MYCONNECTION_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
配置 Snowflake CLI Action。
如果您使用的是最新版本的 Snowflake CLI,则无需添加
cli-version
参数。以下示例指定了所需的版本和默认配置文件的名称:- uses: snowflakedb/snowflake-cli-action@v1.5 with: cli-version: "3.6.0" default-config-file-path: "config.toml"
可选:如果您的私钥已加密,要设置加密短语,请将 PRIVATE_KEY_PASSPHRASE 环境变量设置为私钥加密短语。Snowflake 使用此加密短语来解密私钥。例如:
- name: Execute Snowflake CLI command env: PRIVATE_KEY_PASSPHRASE: ${{ secrets.PASSPHARSE }}
要使用密码而不是私钥,请取消设置
SNOWFLAKE_AUTHENTICATOR
环境变量,然后添加SNOWFLAKE_PASSWORD
变量,如下所示:- name: Execute Snowflake CLI command env: SNOWFLAKE_CONNECTIONS_MYCONNECTION_USER: ${{ secrets.SNOWFLAKE_USER }} SNOWFLAKE_CONNECTIONS_MYCONNECTION_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }} SNOWFLAKE_CONNECTIONS_MYCONNECTION_PASSWORD: ${{ secrets.SNOWFLAKE_PASSWORD }}
备注
为提升您在使用密码和 MFA 时的体验,Snowflake 建议您 配置 MFA 缓存。
使用命名连接添加要执行的
snow
命令,如下所示:run: | snow --version snow connection test
以下示例显示了 Git 存储库中的示例 config.toml
文件和已完成的示例 <repo-name>/.github/workflows/my-workflow.yaml
文件:
示例
config.toml
文件:default_connection_name = "myconnection" [connections.myconnection]
示例 Git 工作流程文件:
name: deploy on: [push] jobs: version: name: "Check Snowflake CLI version" runs-on: ubuntu-latest steps: # Checkout step is necessary if you want to use a config file from your repo - name: Checkout repo uses: actions/checkout@v4 with: persist-credentials: false # Snowflake CLI installation - uses: snowflakedb/snowflake-cli-action@v1.5 with: default-config-file-path: "config.toml" # Use the CLI - name: Execute Snowflake CLI command env: SNOWFLAKE_CONNECTIONS_MYCONNECTION_AUTHENTICATOR: SNOWFLAKE_JWT SNOWFLAKE_CONNECTIONS_MYCONNECTION_USER: ${{ secrets.SNOWFLAKE_USER }} SNOWFLAKE_CONNECTIONS_MYCONNECTION_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }} SNOWFLAKE_CONNECTIONS_MYCONNECTION_PRIVATE_KEY_RAW: ${{ secrets.SNOWFLAKE_PRIVATE_KEY_RAW }} PRIVATE_KEY_PASSPHRASE: ${{ secrets.PASSPHARSE }} #Passphrase is only necessary if private key is encrypted. run: | snow --help snow connection test
在验证 Action 可以成功连接到 Snowflake 之后,您可以添加更多 Snowflake CLI 命令,如 snow notebook create
或 snow git execute
。有关支持的命令的信息,请参阅 Snowflake CLI 命令参考。