搭配 Jenkins 实现自动化打包微前端多个项目
在 macOS 上搭建 Jenkins
# 使用 Homebrew 安装 Jenkins
brew install jenkins-lts
1
这里 jenkins-lts 是 Jenkins 的长期支持版本。
# 启动 Jenkins
安装完成后,你可以通过以下命令启动 Jenkins:
brew services start jenkins-lts
1
停止 Jenkins:你可以使用以下命令停止 Jenkins:
brew services stop jenkins-lts
重启 Jenkins:你可以使用以下命令重启 Jenkins:
brew services restart jenkins-lts
# 访问 Jenkins
默认情况下,Jenkins 会在本地的 8080 端口上运行。你可以通过在浏览器中访问以下地址来访问 Jenkins:
http://localhost:8080
# 初始设置
# 解锁 Jenkins
首次访问 Jenkins 时,它会要求你输入解锁密钥。你可以通过以下命令找到这个密钥:
cat /usr/local/var/lib/jenkins/secrets/initialAdminPassword
将该密钥复制到 Jenkins 页面上的相应字段中。
# 安装推荐插件
Jenkins 会建议安装一系列推荐插件,建议选择安装这些插件,因为它们涵盖了许多基本功能。
# 创建管理员用户
设置 Jenkins 的管理员用户和密码。完成设置后,你将进入 Jenkins 的主界面。
# 配置 Jenkins
# 全局设置
系统管理:
- 进入 "管理 Jenkins" -> "系统设置"。
- 在这里,你可以配置 Jenkins 的基本设置,如系统信息、JDK 和 Git 配置等。
全局工具配置:
- 在 "管理 Jenkins" -> "全球工具配置" 中,你可以配置各种工具的路径,如 JDK、Maven、Gradle、Git 等。
安全设置:
- 进入 "管理 Jenkins" -> "全局安全配置",配置访问控制、安全策略和身份验证方式。
# 插件管理
- 安装插件:
- 进入 "管理 Jenkins" -> "插件管理"。
- 在 "可用插件" 选项卡中,你可以搜索并安装所需的插件。
- 在 "已安装插件" 选项卡中,你可以查看和更新已安装的插件。
# 创建和配置作业
# 创建新作业
新建任务:
- 在 Jenkins 主界面上,点击 "新建任务"。
- 输入作业名称,选择作业类型,例如 "自由风格的软件项目" 或 "Pipeline"。
- 点击 "确定" 进入作业配置页面。
配置作业:
- 源码管理:
- 选择 "Git" 或其他版本控制系统,配置仓库 URL 和凭据。
- 构建触发器:
- 配置触发构建的条件,例如定时构建、源码变更触发等。
- 构建环境:
- 配置构建环境设置,如构建前后操作、构建工具等。
- 构建步骤:
- 添加构建步骤,例如 "执行 Shell"、"调用 Gradle" 或 "执行 Maven"。
- 构建后操作:
- 配置构建完成后的操作,例如归档构建产物、发送通知等。
- 源码管理:
以上就是 Jenkins 的基本配置,接下来我们就来实践一下
# 实践
# 创建一个 Pipeline 作业
- 进入 Jenkins 主界面,点击 "新建任务"。
- 选择 "Pipeline" 作业类型,输入任务名称,然后点击 "确定"。
# 配置 Pipeline 脚本
在 Pipeline 配置页面中,找到 "Pipeline" 部分,并在 "Pipeline Script" 中输入以下 Groovy 脚本:
pipeline {
agent any
stages {
stage('Checkout') {
steps {
// 从 Git 仓库拉取最新的代码
git url: 'https://your-repo-url.git', branch: 'main'
}
}
stage('Identify Changed Directories') {
steps {
script {
// 获取最近一次提交的哈希
def commitHash = sh(script: 'git rev-parse HEAD', returnStdout: true).trim()
// 获取前一个提交的哈希
def previousCommitHash = sh(script: 'git rev-parse HEAD~1', returnStdout: true).trim()
// 获取更改的文件
def changedFiles = sh(script: "git diff --name-only ${previousCommitHash} ${commitHash}", returnStdout: true).trim().split('\n')
// 获取所有更改的目录
def changedDirs = changedFiles.collect { file ->
file.tokenize('/')[0..-2].join('/')
}.unique()
echo "Changed directories:"
echo changedDirs.join('\n')
// 函数:检查目录及其父目录是否包含 package.json
def findPackageJsonDir = { dir ->
def currentDir = dir
while (currentDir != '') {
if (fileExists("${currentDir}/package.json")) {
return currentDir
}
def parentDir = currentDir.tokenize('/')[0..-2].join('/')
if (parentDir == '') {
break
}
currentDir = parentDir
}
return null
}
// 追踪已处理的目录
def processedDirs = []
// 在更改的文件夹中执行构建
changedDirs.each { changedDir ->
def buildDir = findPackageJsonDir(changedDir)
if (buildDir != null && !processedDirs.contains(buildDir)) {
echo "Found package.json in ${buildDir}, running npm install and build"
dir(buildDir) {
sh 'npm install'
sh 'npm run build'
}
processedDirs.add(buildDir) // 标记为已处理
} else {
echo "No package.json found in ${changedDir} or it has already been processed"
}
}
}
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# 保存并运行作业
- 配置完成后,点击 "保存"。
- 在 Jenkins 主界面上,点击 "立即构建" 来运行你的作业,观察输出以确保其正常工作。
通过以上步骤,就可以在 Jenkins 中实现自动拉取代码、获取更改的文件夹,找到 package.json 文件并执行构建命令的功能。
编辑 (opens new window)
上次更新: 9/15/2024, 11:00:05 AM