【发布时间】:2017-06-30 20:06:36
【问题描述】:
我们想把我们的项目分成更小的部分。我们当前的 CI 流程会经过一个简短的测试阶段,然后运行一个部署脚本。但是,如果其中一个子项目没有任何变化,我们不想为此进行构建。
没有管道的 Jenkins 支持 SCM 配置中的排除(我们使用 git),基于此,您可以配置特定的作业以运行。但是,当使用管道时,我怎么知道是否应该构建这部分?如何访问受上次推送影响的路径?
目前我们的脚本非常简单,我们希望尽可能简单。
我们正在使用scripted 和declarative 语法,但找不到好的解决方案。
声明性:
#!groovy
pipeline {
agent any
tools {
nodejs '8.1'
}
stages {
stage('Checkout') {
steps {
checkout scm
}
}
# Only continue, if something has changed
stage('Install') {
steps {
sh 'npm install'
}
}
stage('Test') {
steps {
sh 'npm run test-jenkins'
}
post {
always {
junit "artifacts/test/report.xml"
}
}
}
}
}
脚本:
#!groovy
node {
def nodejs = tool name: '8.1', type: 'jenkins.plugins.nodejs.tools.NodeJSInstallation'
env.PATH = "${nodejs}/bin:${env.PATH}"
stage('Checkout') {
checkout scm
}
# Only continue, if something has changed
stage('Install') {
sh 'npm install'
}
stage('Test') {
try {
sh 'npm run test-jenkins'
} finally {
junit "artifacts/test/report.xml"
}
}
}
【问题讨论】:
-
构建完成后,为当前提交打一个标签。在下一个构建中,比较新的提交和标签。如果它们不是相同的提交(或者如果您只关心文件内容,则为树),请继续。并且在新构建完成后,将标签从之前的提交重置为当前的提交。
-
@ElpieKay 这行得通!非常感谢。我会写下来并作为答案发布。
-
没关系。很高兴它有帮助。 =)
标签: node.js git jenkins jenkins-pipeline