对于我们的jenkins构建服务器,我使用了到目前为止仅在jenkins中使用的管道脚本。现在,我将管道脚本移到了git服务器上。
jenkins项目和您的应用程序都可以很好地构建,但是:在将管道转移到git之前,C ++应用程序的构建是“增量式”的,因此仅构建了新的更改。因此,手动触发的构建非常快。
现在有了git中的管道,jenkins / msbuild总是可以完全重建,但是我不明白为什么。完全重建大约需要30分钟。
以下是我对管道的简称代码。
有人有观察到这种行为吗?还是知道为什么msbuild意味着它必须进行完整的重建?
预先感谢, 乔纳斯(Jonas)
import grails.plugin.springsecurity.SpringSecurityService
import grails.test.mixin.TestFor
import org.springframework.security.authentication.AccountExpiredException
import org.springframework.security.authentication.CredentialsExpiredException
import org.springframework.security.authentication.DisabledException
import org.springframework.security.web.WebAttributes
import spock.lang.Specification
@TestFor(YourController)
class YourControllerSpec extends Specification {
def springSecurityService = Mock( SpringSecurityService )
void setup() {
controller.springSecurityService = springSecurityService
}
void "test authFail"() {
given:
session."${WebAttributes.AUTHENTICATION_EXCEPTION}" = new AccountExpiredException( 'This account has expired' )
when:
controller.authfail()
then:
flash.message == 'springSecurity.errors.login.expired'
when:
session."${WebAttributes.AUTHENTICATION_EXCEPTION}" = new CredentialsExpiredException( 'This credentials have expired' )
controller.authfail()
then:
flash.message == 'springSecurity.errors.login.passwordExpired'
when:
session."${WebAttributes.AUTHENTICATION_EXCEPTION}" = new DisabledException( 'The account is disabled' )
controller.authfail()
then:
flash.message == 'springSecurity.errors.login.disabled'
when:
session."${WebAttributes.AUTHENTICATION_EXCEPTION}" = new UnsupportedOperationException( 'Bad stuff' )
controller.authfail()
then:
flash.message == 'springSecurity.errors.login.fail'
when:
controller.authfail()
then:
1 * springSecurityService.isAjax( _ ) >> true
response.json == [error :'springSecurity.errors.login.fail']
}
}
答案 0 :(得分:0)
这个问题已经存在一年了,但是我想分享我们的调查结果,因为我们偶然发现了相同的问题,并在Jenkins v.235.2上观察了以下内容。
在代理上执行的第一个命令是“来自SCM的管道”,可见的阶段是管道阶段概述中的“声明性SCM签出”。因此,此命令会将包含管道指令的Jenkins文件下载到代理上相应的Jenkins工作区。通过执行此命令并下载Jenkins文件,它会在代理的作业根工作区中创建一个“ .git”文件夹(例如C:\ jenkins \ workspace \ jobA \ .git)。由于您现在获取源代码,以便将软件构建到相同的工作区位置,因此“ .git”文件夹本身将被覆盖/替换。删除“ .git”文件夹的元数据将导致新的干净获取和软件构建。同样,这也会导致Git本身发生一些奇怪的行为。
根据我们的调查,您有两种方法可以解决此问题(也许还有更多选择,但这对我们有所帮助)。
dir('src') { git clone ... }
。或可能性两种,我们现在在管道中已经实现。
skipDefaultCheckout 默认情况下,在agent指令中跳过从源代码管理中签出代码。例如:options {skipDefaultCheckout()}
此命令将阻止在代理上下载Jenkins文件,而是在Jenkins主文件本身上签出。