使用 Jenkins 在 Node.js 中进行 CI/CD
使用加密的 .env.vault 文件在 Jenkins 上运行 Node.js CI/CD
初始设置
创建 Jenkinsfile
文件。
Jenkins
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'npm install'
sh 'npm run build'
}
}
}
}
如果您使用的是 Windows,请将 sh
命令替换为 powershell
。
创建一个 build.js
文件。这是一个非常简单的构建脚本,它输出 “Hello World”。
build.js
// build.js
console.log(`Hello ${process.env.HELLO}`)
创建一个 package.json
文件。
package.json
{
"scripts": {
"build": "node build.js"
}
}
将其推送到 Jenkins。
安装 dotenv
安装 dotenv
.
npm install dotenv --save # Requires dotenv >= 16.1.0
在项目的根目录中创建一个 .env
文件。
.env
# .env
HELLO="World"
在应用程序中尽早导入和配置 dotenv。
build.js
// build.js
require('dotenv').config()
console.log(process.env) // remove this after you've confirmed it is working
console.log(`Hello ${process.env.HELLO}`)
尝试在本地运行它。
node build.js
{
...
HELLO: 'World'
}
Hello World
完美。process.env
现在包含您在 .env
文件中定义的键和值。
这涵盖了 CI 的本地模拟。接下来,让我们解决真正的 CI 环境。
构建 .env.vault
推送您最新的 .env
文件更改并编辑您的 CI 密钥。了解有关同步的更多信息
npx dotenv-vault@latest push
npx dotenv-vault@latest open ci
使用 UI 为每个环境配置这些密钥。
然后构建您加密的 .env.vault
文件。
npx dotenv-vault@latest build
它的内容应类似于以下内容。
.env.vault
#/-------------------.env.vault---------------------/
#/ cloud-agnostic vaulting standard /
#/ [how it works](https://dotenv.org/env-vault) /
#/--------------------------------------------------/
# development
DOTENV_VAULT_DEVELOPMENT="/HqNgQWsf6Oh6XB9pI/CGkdgCe6d4/vWZHgP50RRoDTzkzPQk/xOaQs="
DOTENV_VAULT_DEVELOPMENT_VERSION=2
# ci
DOTENV_VAULT_CI="x26PuIKQ/xZ5eKrYomKngM+dO/9v1vxhwslE/zjHdg3l+H6q6PheB5GVDVIbZg=="
DOTENV_VAULT_CI_VERSION=2
设置 DOTENV_KEY
获取您的 CI DOTENV_KEY
。
npx dotenv-vault@latest keys ci
# outputs: dotenv://:[email protected]/vault/.env.vault?environment=ci
在 Jenkins 上设置 DOTENV_KEY
。
有多种可选方法可以在 Jenkins 中执行此操作,例如作为构建步骤的一部分、作为节点属性,或作为全局设置。选择最适合您情况的方法。
将解密密钥应用于构建步骤将使其仅在该特定步骤期间生效,在设置为节点属性时,它将在节点活动期间生效,而作为全局设置时,它将在每个操作期间生效。
您可以通过 Blue Ocean 界面或 Jenkinsfile 在构建步骤中设置它,通过 Dashboard/Manage Jenkins/Nodes/NODE_NAME 在节点属性中设置它,并通过 Dashboard/Manage Jenkins/Configure System 在全局设置中设置它。
选择首选位置后,将 DOTENV_KEY 作为键,并为值字段保存之前获得的解密密钥。
构建 CI
将这些更改安全地提交到代码并重新运行构建。
就是这样!在重新运行时,您的 .env.vault
文件将被解密,其 CI 密钥将被注入为环境变量——恰到好处。
当您在日志中看到 'Loading env from encrypted .env.vault'
时,您将知道操作成功。如果没有设置 DOTENV_KEY
(例如,在您本地机器上开发时),它将回退到标准 dotenv 功能。
您已成功使用新的 .env.vault 标准来加密和部署您的密钥。这比将您的密钥散布在多个第三方平台和工具中要安全得多。每当您需要添加或更改密钥时,只需重新构建您的 .env.vault 文件并重新部署即可。