jenkins - 使用 Jenkins 只构建必要的
问题描述
像这样的回购:
repo
- service1
- service2
- service3
现在我已经把 jenkinsfile 放在主目录上来构建并做一些事情,但是如果我在子文件夹 service1 中更改相同的内容,我只想重建服务 1,我该怎么办?现在管道是这样的,但我想让它变得更好,因为现在我重建了一切:
pipeline{
agent any
stages {
stage('Build') {
steps {
script{
sh '''
cd security_manager;
STAGING=true;
sbt " -DSTAGING=$STAGING; reload; clean; compile; docker:publish";
'''
sh '''
cd storage_manager;
STAGING=true;
sbt " -DSTAGING=$STAGING; reload; clean; compile; docker:publish";
'''
sh '''
cd ;
STAGING=true;
sbt " -DSTAGING=$STAGING; reload; clean; compile; docker:publish";
'''
}
}
}
我想在 sh 脚本之间放置相同的 if/else 但不知道我必须做什么,因为我想使用 $GIT_COMMIT 和最后一次提交之间的 git diff 来检查文件,但是在 if语句条件我不能放 shell 脚本
解决方案
您只需要找到上次和当前提交之间的区别:
def diff = sh(returnStdout: true, script: 'git diff @~..@')
然后由你决定如何处理它。最简单的方法是从 diff 的每一行中仅提取更改的目录
推荐阅读
- javascript - 如何有条件地使用 rxjs 进行缓冲?
- r - R Markdown:如何使内联代码不执行?
- javascript - 需要 javascript DOM 帮助
- javascript - 弹出窗口立即消失
- r - 在 gt_table 中的 groupname 行中插入换行符
- mongodb - 其他集合的MongoDB聚合计数
- c# - 2 个控件的相同动画
- react-native - 在 navigation.reset 之后 React Native Deep 链接正在循环
- python-3.x - 您如何从 BeautifulSoup 结果中仅获取产品链接
- php - 如何从 PHP Docker 入口点中的脚本导出环境变量