我们可以调整 the solution for running ng with ssl 使其适用于本地和基于 CI 的运行。一步一步:
添加ssl/certificate.cnf:
[req]
default_bits = 2048
prompt = no
default_md = sha256
x509_extensions = v3_req
distinguished_name = dn
[dn]
C = NL
O = My Organisation
emailAddress = dummy@example.org
CN = localhost
[v3_req]
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
生成.cert 文件:
openssl req -new -x509 -newkey rsa:2048 -sha256 -nodes -keyout ssl/localhost.key -days 3560 -out ssl/localhost.crt -config ssl/certificate.cn
将angular.json 中的serve 更新为:
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"ssl": true,
"sslKey": "ssl/localhost.key",
"sslCert": "ssl/localhost.crt",
"browserTarget": "sample-auth-guards:build"
},
"configurations": {
"production": {
"browserTarget": "sample-auth-guards:build:production"
}
}
},
然后将acceptInsecureCerts 添加到您的protractor.conf.js 文件的capabilities 部分,该部分将如下所示:
capabilities: {
acceptInsecureCerts: true, // <<<<< Add this!
browserName: 'chrome'
},
然后运行ng e2e。它应该使用 SSL 运行你的应用程序,e2e 测试也应该使用这个服务器。 protractor conf 将允许您跳过 Chrome 通常给您的“不安全证书”警告。
作为参考,我使用protractor-ci.conf.js 文件来运行 GitHub Actions,这会稍微调整一下。它看起来像这样:
const config = require('./protractor.conf').config;
config.capabilities = {
acceptInsecureCerts: true,
browserName: 'chrome',
chromeOptions: {
args: [
'--headless',
'--no-sandbox',
'--disable-gpu',
],
},
};
exports.config = config;
这也使得浏览器headless除了接受不安全的证书。
见this in action in my full repository。