我正在努力构建基于 gitlab CI 的 gatsby。我正在使用 .env 文件来提供带有 SITE_URL 的变量。
来自我的盖茨比配置
import type { GatsbyConfig } from "gatsby";
const result = require("dotenv").config({
path: `.env.${process.env.NODE_ENV}`,
});
if (result.error) {
console.error(result.error);
}
const config: GatsbyConfig = {
siteMetadata: {
siteUrl: process.env.SITE_URL,
....
这就是我在管道编辑器中配置页面作业的方式
pages:
stage: deploy
needs:
- yarn:install
- test:gatsby
script:
- echo SITE_URL=$SITE_URL >> .env.production
- echo $SITE_URL
- cat .env.production
- ./node_modules/.bin/gatsby build --prefix-paths
artifacts:
paths:
- public
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
从日志看来.env.生产是正确的
$ echo SITE_URL=$SITE_URL >> .env.production
$ echo $SITE_URL
https://my_www.gitlab.io/my_www-3.0/
$ cat .env.production
SITE_URL=https://my_www.gitlab.io/my_www-3.0/
但是在盖茨比这边却行不通:
error The site's gatsby-config failed validation:
"siteMetadata.siteUrl" must be a valid uri
显然,process.env 不包含 SITE_URL
如何调试其根本原因?
问题出在 Gitlab 页面的配置中。需要选择:
使用独特的域名
并使用生成的 url 作为 SITE_URL,而不是子域。