本页介绍了如何安装和配置必要组件,以在 Looker 中实现 CI/CD 工作流。
这些说明使用包含开发、质量检查和生产的三层系统。不过,这些原则同样适用于双层或四层系统。
这些说明还假设您使用 GitHub 作为 Git 提供方。您可以使用其他 Git 提供商创建 CI/CD 工作流;不过,您必须具备相关专业知识,才能根据您的提供商修改这些说明。
请按照与您相关的部分中的说明操作:
前提条件
Linux 环境
此流程使用名为 Gazer 和 Spectacles 的工具,这些工具旨在与类 Unix 操作系统搭配使用。每位 LookML 开发者都必须有权访问 Linux 环境或 macOS 中的命令行,您计划在其中运行 CI/CD 工作流。
如果您使用的是 Windows,则可以在 Microsoft 的 Windows Subsystem For Linux (WSL) 中使用 Gazer 和 Spectacles。借助 WSL,您可以运行各种不同的 Linux 版本。如果您没有首选的 Linux 操作系统,那么最新版本的 Ubuntu Linux 是一个不错的选择,因为它具有广泛的支持。
这些说明提供了 Linux 系统的示例,如果您使用的是 macOS 或 WSL,可能需要进行修改。
每个层级一个 Looker 实例
如需启用此配置,您需要为系统的每个层级提供一个 Looker 实例。例如,如果系统包含开发阶段、质量检查阶段和生产阶段,则需要三个单独的实例。实例可以由 Google 托管,也可以由客户自行托管。
相同的连接名称
数据库连接在每个 Looker 实例中应具有相同的名称,无论它们代表哪个层级。例如,sales 连接在所有实例中都应具有该名称,而不是 sales_dev 或 sales_qa。
这些连接可以指向同一数据库,也可以指向不同的数据库。不过,如果它们指向同一数据库,则应定义不同的临时架构,以免开发或 QA 实例中的持久性派生表干扰生产环境。
例如,如果所有三个实例都使用同一数据库,则可以按如下方式进行配置:
| 生产 | QA | 开发 | |
| 连接名称 | sales |
sales |
sales |
| 数据库 | sales_db |
sales_db |
sales_db |
| 临时架构 | prod_sales_scratch |
qa_sales_scratch |
dev_sales_scratch |
或者,如果所有三个实例都使用唯一的数据库,则可以按如下方式进行配置:
| 生产 | QA | 开发 | |
| 连接名称 | sales |
sales |
sales |
| 数据库 | sales_db_prod |
sales_db_qa |
sales_db_dev |
| 临时架构 | sales_scratch |
sales_scratch |
sales_scratch |
Git 代码库
所有三个层级的每个项目都将使用一个 Git 代码库。开发实例将跟踪 main 分支,而 QA 和生产实例通常会指向 Git 标记(稍后会详细介绍)。
仅需首次设置的步骤
本部分中的步骤只需由拥有 Looker 管理员权限以及 Git 提供商管理员权限的用户完成一次。
Git 凭据
每位开发者的 Linux 环境都需要连接到您用于管理 LookML 的同一代码库。这很可能是在 GitHub 等服务中托管的外部代码库。您需要一个具有相应服务的账号,该账号具有配置代码库的相应凭据。使用该账号,您可以设置 SSH 密钥,以便 Linux 环境自动连接到该服务。
对于 GitHub,请按照向 GitHub 账号添加新的 SSH 密钥中的说明进行操作。
创建和配置 Git 服务器代码库
为了使 CI/CD 工作流正常运行,LookML 必须存储在 Git 代码库中,并与 Looker 项目相关联。在项目设置中,Git Production Branch Name 必须设置为 main,并且必须启用 Enable Advanced Deploy Mode。
如果尚未执行以下步骤,请按照以下 GitHub 说明操作:
创建新代码库
- 在 GitHub 界面中,按右上角的 + 按钮,然后选择新建代码库。
- 选择所有者(很可能是您的组织),然后输入 REPOSITORY_NAME。
- 选择将代码库设为公开还是私有(私有代码库需要付费的 GitHub 订阅),然后勾选相应复选框以使用 README 文件初始化代码库。
- 按创建代码库按钮。
- 按标有 <> Code 的绿色按钮,然后复制 SSH 网址。它看起来类似于:
git@github.com:org_name/REPOSITORY_NAME.git。 - 在 Looker 中,创建新项目。
- 进入开发模式,从左侧边栏中选择项目设置项,然后配置 Git。
- 粘贴代码库网址(在本例中为
git@github.com:org_name/REPOSITORY_NAME.git),然后选择继续。 - 复制部署密钥,然后返回到此代码库的 GitHub 界面。
- 依次选择设置和操作 - 常规。
- 在工作流权限下,验证允许 GitHub Actions 创建和批准拉取请求是否已选中,然后点击保存。
- 切换到 GitHub 设置的部署密钥页面。
- 点击添加部署密钥按钮,然后将部署密钥粘贴到密钥字段中。
- 添加标题(例如
Looker-REPOSITORY_NAME),勾选允许写入权限复选框,然后按添加密钥按钮。 - 返回 Looker,然后选择测试并最终确定设置。
- 再次从左侧边栏中选择项目设置。将 Git 正式版分支名称更改为
main。 - 选择启用高级部署模式,然后选择保存项目配置。
在左侧的项目设置图标下方,您应该会看到 Deployment Manager 的部署图标。
使用现有代码库
- 前往存储 LookML 的 GitHub 代码库。
- 依次选择设置和操作 - 常规。
- 在工作流权限下,验证允许 GitHub Actions 创建和批准拉取请求是否已选中,然后点击保存。
- 前往 GitHub 代码库的 <> 代码部分。
- 按标有 <> Code 的绿色按钮,然后复制 SSH 网址。它看起来类似于:
git@github.com:org_name/REPOSITORY_NAME.git。 - 在 Looker 中,创建新项目。
- 进入开发模式,然后从左侧边栏中选择项目设置项,接着配置 Git。
- 粘贴代码库网址(在本例中为
git@github.com:org_name/REPOSITORY_NAME.git),然后选择继续。 - 复制部署密钥,然后返回到此代码库的 GitHub 界面。
- 选择设置,然后选择部署密钥。
- 点击添加部署密钥按钮,然后将部署密钥粘贴到密钥字段中。
- 添加标题(例如
Looker-REPOSITORY_NAME),勾选允许写入权限复选框,然后按添加密钥按钮。 - 返回 Looker,然后选择测试并最终确定设置。
- 再次从左侧边栏中选择项目设置。将 Git 正式版分支名称更改为
main。 - 选择启用高级部署模式,然后选择保存项目配置。
在左侧的项目设置图标下方,您应该会看到 Deployment Manager 的部署图标。
创建 GitHub 操作
创建多个 GitHub 操作非常有用,这样每次 LookML 发生更改时,系统都会自动执行各种检查。添加这些操作需要您能够在 Linux 环境中更改 Git 代码库。如果该功能尚未提供,请按照配置 Git 说明操作。
如需添加 GitHub 操作,请前往 Linux 环境中代码库的目录,然后添加子目录 .github/workflows。设置完成后,您可以在 GitHub 界面的 Actions(操作)页面中手动运行这些操作。
Look-At-Me-Sideways (LAMS)
LAMS 是一款开源的 LookML 代码检查工具,用于检查 LookML 中是否存在错误和不良做法。将名为 lams.yml 的文件添加到 .github/workflows 目录中,其中包含以下内容:
name: LAMS
on:
pull_request:
branches: [ main ]
push:
workflow_dispatch:
jobs:
lams_job:
runs-on: ubuntu-latest
name: LAMS LookML Linter Job
steps:
- name: Checkout your LookML
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0
- name: Setup Node
uses: actions/setup-node@v1
with:
node-version: '16.x'
- name: Install LAMS
run: npm install -g @looker/look-at-me-sideways@3
- name: Run LAMS
run: lams --reporting=no
每次将提交推送到 GitHub 或打开拉取请求以将代码与 main 分支合并时,LAMS 都会运行。
请发布
Release Please 是一款开源工具,可自动使用正确的版本号标记版本。
将名为 release-please.yml 的文件添加到 .github/workflows 目录中,其中包含以下内容:
name: release-please
on:
push:
branches:
- main
workflow_dispatch:
permissions:
contents: write
pull-requests: write
jobs:
release-please:
runs-on: ubuntu-latest
steps:
- uses: google-github-actions/release-please-action@v3
with:
release-type: simple
常规提交
此 GitHub 操作将验证拉取请求是否以符合常规提交标准的标题打开。
将名为 lint_pr_title.yml 的文件添加到 .github/workflows 目录中,其中包含以下内容:
name: "Lint Pull Request Title"
on:
pull_request_target:
types:
- opened
- edited
- synchronize
jobs:
main:
name: Validate PR title
runs-on: ubuntu-latest
steps:
- uses: amannn/action-semantic-pull-request@v5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
permissions:
pull-requests:
read statuses: write
将更改推送到 GitHub
最后,使用以下命令提交这些 GitHub 操作更改并将其推送到 GitHub:
git add .github/workflows/
git commit -m "chore: Added github actions"
git push
保护 main 分支
在 GitHub 界面中,您应为 main 分支启用分支保护,以便普通开发者无法直接将更改推送到该分支。而是先在其他分支中进行更改,然后打开拉取请求。拉取请求可由其他开发者审核,然后才能获得批准并与 main 合并。
如需配置分支保护,请前往相应代码库的 GitHub 界面,依次选择 Settings 和 Branches,然后按 Add branch protection rule 按钮:

输入 main 作为分支名称模式,然后选中以下选项:
- 在合并之前要求提交 pull request
- 需要审批
- 在推送新提交时,关闭过时的拉取请求审批

最后,按页面底部的创建按钮。
创建拉取请求后,系统会运行之前在这些说明中配置的 GitHub 操作。首次运行后,也可以在此界面中选择它们,以便在将拉取请求合并到 main 之前,它们必须成功运行。
配置拉取请求
在 Looker 中,您可以要求使用拉取请求,并让 Looker 代表开发者打开 PR。此设置应仅针对开发实例进行配置。QA 和生产实例将使用高级部署模式来获取更新。
如需启用此功能,请前往每个项目的项目配置页面,然后在 GitHub 集成标题下选择需要拉取请求。

按相应按钮设置 webhook secret,复制生成的随机字符串,然后按保存项目配置按钮。
返回到代码库的 GitHub 界面,依次选择设置和 Webhooks。按右上角的添加 webhook 按钮:
- 在标有载荷网址的字段中,输入
https://LOOKER_HOST_NAME/webhooks/projects/PROJECT_NAME/deploy - 在标记为 Secret 的字段中,粘贴您从 Looker 保存的密钥
- 对于“您希望通过哪些事件触发此 Webhook?”这一问题,请选择让我选择单个事件

验证是否已选择拉取请求和推送:

最后,按页面底部的 Add webhook(添加 webhook)按钮。
每位 Looker 开发者的设置步骤
以下所有安装步骤都应在 Linux 环境中执行。
安装 Ruby
需要安装 Ruby 编程语言才能运行 Gazer。2.7.7 之后的任何 Ruby 版本都可与 Gazer 搭配使用,但最好使用 Ruby 3.x.x。如需在 Ubuntu Linux 上安装 Ruby,请运行以下命令:
sudo apt update
sudo apt install ruby
运行 ruby -v 以确认 Ruby 已正确安装。这应该会返回类似如下所示的响应:
ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [x86_64-linux]
这些命令也适用于 Debian Linux、Linux Mint 和其他一些使用 Aptitude 软件包管理器的 Linux 版本。您可能需要搜索适用于其他 Linux 版本的命令,或在 macOS 上安装命令。如需了解详情,请参阅安装 Ruby。
安装 Gazer
Gazer 是 Google 员工创建的一个开源项目,旨在通过命令行工具浏览和管理聊天室、Look 和信息中心。
安装 Ruby 后,可以使用 Ruby 的 Gem 工具安装 Gazer:
gem install gazer
使用命令 gzr version 确认 Gazer 是否已安装。这应该会返回类似如下所示的响应:
v0.3.12
安装 Spectacles
Spectacles 是一种用于测试 LookML 的开源工具(其付费版本已不再提供)。如需了解安装详情,请参阅其“使用入门”页面。
安装 Git
您可以使用以下命令在 Ubuntu Linux 上安装 Git 版本控制软件:
sudo apt update
sudo apt install git
使用命令 git --version 确认安装成功。这应该会返回类似如下所示的响应:
git version 2.42.0.609.gbb76f46606
这些命令也适用于 Debian Linux、Linux Mint 和其他一些使用 Aptitude 软件包管理器的 Linux 版本。您可能需要搜索适用于其他 Linux 类型的命令。例如,如需查看 Fedora 和 macOS 的相关说明,请参阅使用入门 - 安装 Git。
配置 Git
您需要配置 Linux 环境中的 Git,以便与存储 LookML 的 Git 代码库进行交互。这些说明是针对存储在 GitHub 中的 LookML Git 代码库编写的。
姓名和电子邮件地址
GitHub(以及大多数其他 Git 实现)需要知道您的姓名和电子邮件地址,以便记录活动。运行以下命令,在 Git 中配置您的姓名和电子邮件地址:
git config --global user.name "FIRST_NAME LAST_NAME"
git config --global user.email "EMAIL_ADDRESS"
Git 凭据
在初始 CI/CD 设置中,创建了 Git 凭据。生成的 SSH 私钥应在 $HOME/.ssh/config 文件中进行配置。如需创建该文件,请使用以下命令:
touch $HOME/.ssh/config
chmod 600 $HOME/.ssh/config
将以下文本插入到 $HOME/.ssh/config 文件中:
Host github.com
User git
IdentityFile ~/.ssh/KEY_NAME
ControlMaster auto
ControlPath ~/.ssh/ctrl-%r@%h:%p
ControlPersist yes
将 KEY_NAME 替换为按照向 GitHub 账号添加新的 SSH 密钥说明生成的私钥文件的名称。私钥文件与公钥文件的名称相同,但没有 .pub 扩展名。例如,如果您使用的是文件 id_ed25519.pub 中的公钥,则私钥的名称将为 id_ed25519。
设置本地 Git 代码库
配置 LookML 代码库后,您需要在 Linux 环境中复制该代码库。为此,请运行以下命令:
git clone GIT_URL
例如,该命令可能如下所示:
git clone git@github.com:my_org_name/sales_project.git
这会将 LookML 代码库复制到子目录(例如 sales_project)。使用命令 cd SUB_DIRECTORY 进入代码库。在此示例中,命令将为 cd sales_project。
进入代码库目录后,您可以使用以下命令:
| 命令 | 用途 |
|---|---|
git checkout BRANCH_NAME |
用于切换分支。在大多数情况下,主分支称为 main;不过,在旧版系统中,它可能称为 master。 |
git fetch |
用于从服务器检索最新更改。 |
git pull |
用于将更改应用到已签出的本地文件。git pull 隐式执行 git fetch。 |
git tag |
用于为特定修订版本创建有意义的标记。 |
git push |
用于将本地更改推送到服务器。 |
配置 Gazer
如需使用 Gazer,您需要为开发、QA 和生产实例分别提供 API 凭据。如需有关创建 API 凭据的说明,请参阅管理员设置 - 用户页面。API 凭据可能已由最初设置 CI/CD 工作流的人员创建。在这种情况下,您可以使用现有凭据,无需为每个人生成新凭据。
将 API 凭据存储在主目录中具有最低权限的 .netrc 文件中。您可以使用以下命令创建具有正确权限的空文件:
touch $HOME/.netrc
chmod 600 $HOME/.netrc
向该文件添加如下条目,但请使用您自己的 Looker 服务器主机名作为 machine,使用 API client_id 作为登录名,使用 API client_secret 作为密码。例如:
machine dev.example.looker.com
login 80ka7nl6lj87ftmn
password u7kw3mj5h2trfz0
machine qa.example.looker.com
login fi3qtv5at5crvd1q
password bdxtaeghnzyz0wm
machine example.looker.com
login k7lr6yv57wvzy9p2
password wcvr5qjd2isbs2s
运行针对每个服务器的 Gazer 命令(例如以下命令),测试此功能是否正常运行:
gzr user me --host dev.example.looker.com
这应该会产生类似如下所示的结果:
+----+---------------+---------+----------+------------------+--------------+
| id|email |last_name|first_name|personal_folder_id|home_folder_id|
+----+---------------+---------+----------+------------------+--------------+
|2345|jsm@example.com|Smith |John | 2161| 708|
+----+---------------+---------+----------+------------------+--------------+
如果上一个命令不起作用,您可能需要在 gzr 命令末尾添加 --port 443,如下所示:
gzr user me --host dev.example.looker.com --port 443
配置 Spectacles
Spectacles 使用与 Gazer 相同的 API client_id 和 client_secret。在 Spectacles 目录中,为每个层级创建一个名为 config-TIER.yaml 的文件,例如 config-dev.yaml。根据相应层级的 Looker 实例,将以下内容添加到相应文件中,例如:
config-dev.yaml
base_url: https://dev.example.looker.com/
client_id: 80ka7nl6lj87ftmn
client_secret: u7kw3mj5h2trfz0
config-qa.yaml
base_url: https://qa.example.looker.com/
client_id: fi3qtv5at5crvd1q
client_secret: bdxtaeghnzyz0wm
config-prod.yaml
base_url: https://example.looker.com/
client_id: k7lr6yv57wvzy9p2
client_secret: wcvr5qjd2isbs2s
您可以运行以下命令并替换每个文件名,以测试每个文件:
$ spectacles connect --config-file config-dev.yaml
您应该会看到如下所示的响应:
Connected to Looker version 23.18.60 using Looker API 4.0