扩展选择参数插件很棒,我在通过UI配置的作业中使用它https://wiki.jenkins-ci.org/display/JENKINS/Extended+Choice+Parameter+plugin
但是,我正努力让它在Jenkinsfile样式管道脚本中运行.由于Jenkins管道语法生成器创建了以下代码段,因此扩展选择参数插件似乎尚未与管道脚本完全兼容:
parameters([<object of type com.cwctravel.hudson.plugins.extended_choice_parameter.ExtendedChoiceParameterDefinition>])
Run Code Online (Sandbox Code Playgroud)
如果我手动创建参数,我会得到与https://issues.jenkins-ci.org/browse/JENKINS-32188中提到的相同的行为
org.kohsuke.stapler.NoStaplerConstructorException: There's no @DataBoundConstructor on any constructor of class
Run Code Online (Sandbox Code Playgroud)
有没有人知道可以解决ExtendedChoiceParameterDefinition不使用问题的任何变通办法@DataBoundConstructor?
有没有办法动态设置代理标签而不是普通字符串?
这项工作有两个阶段:
我的(不工作)尝试看起来像这样:
pipeline {
agent { label 'master' }
stages {
stage('Stage1') {
steps {
script {
env.node_name = "my_node_label"
}
echo "node_name: ${env.node_name}"
}
}
stage('Stage2') {
agent { label "${env.node_name}" }
steps {
echo "node_name: ${env.node_name}"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
第一个回声工作正常,打印"my_node_label".第二阶段无法在标记为"my_node_label"的代理上运行,控制台将打印:
没有标签为'null'的节点
也许它可以提供帮助 - 如果我只是在标签字段中添加"$ {env}",我可以看到这是一个java类,因为它打印:
没有标有'org.jenkinsci.plugins.workflow.cps.EnvActionImpl@79c0ce06'标签的节点
是否有任何开源库可用于表示烹饪单位,例如Java中的Teaspoon和tablepoon?
我只找到了JSR-275(https://jcp.org/en/jsr/detail?id=275),这很棒,但不了解烹饪单位.
我是Guice的新手,这是一个天真的问题.我了解到我们可以通过以下方式将String绑定到特定值:
bind(String.class)
.annotatedWith(Names.named("JDBC URL"))
.toInstance("jdbc:mysql://localhost/pizza");
Run Code Online (Sandbox Code Playgroud)
但是如果我想将String绑定到任何可能的字符呢?
或者我认为可以这样描述:
如何用Guice替换"new SomeClass(String strParameter)"?
我在项目中的不同子项目上有一个长期运行的Gradle任务列表.我想使用Jenkins声明性管道并行运行它们.
我希望这样的东西可能会起作用:
projects = [":a", ":b", ":c"]
pipeline {
stage("Deploy"){
parallel {
for(project in projects){
stage(project ) {
when {
expression {
someConditionalFunction(project)
}
}
steps {
sh "./gradlew ${project}:someLongrunningGradleTask"
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
不用说,由于它是期待阶段而不是for,因此会产生编译错误.关于如何克服这个问题的任何想法?谢谢
它在本文中说:
让一个类成为最终因为它是不可变的是这样做的一个很好的理由.
我对此感到有点困惑......我理解不变性是线程安全性和简单性的POV中的好东西,但似乎这些问题与可扩展性有些正交.那么,为什么不变性成为最终上课的一个很好的理由呢?
在这里和那里寻找一个log4j在Groovy脚本中记录到文件的工作示例.
没有明确的类(它只是一个脚本).没有grails.不要控制...要归档.
只是一个带有log4j的简单groovy脚本.
log4j最适合这个(groovy)还是其他日志库更好?
有人可以指出我的例子或演示如何做到这一点?我设法让它到控制台,但没有提交.
如果log4j配置也在config.groovy文件中会很好,因为我正在使用配置文件来处理其他事情.
UPDATE
感谢neversleepz的例子,我有以下工作:
config.groovy文件:
log4j {
appender.stdout = "org.apache.log4j.ConsoleAppender"
appender."stdout.layout"="org.apache.log4j.PatternLayout"
appender.scrlog = "org.apache.log4j.FileAppender"
appender."scrlog.layout"="org.apache.log4j.PatternLayout"
appender."scrlog.layout.ConversionPattern"="%d %5p %c{1}:%L - %m%n"
appender."scrlog.file"="rootscript.log"
rootLogger = "debug,scrlog,stdout"
}
Run Code Online (Sandbox Code Playgroud)
我的剧本:
import org.apache.log4j.*
import groovy.util.logging.*
def config = new ConfigSlurper().parse(new File('config.groovy').toURL())
PropertyConfigurator.configure(config.toProperties())
Logger log = Logger.getInstance(getClass())
// Need to set log level as described here:
// http://groovy.329449.n5.nabble.com/log4j-annotation-not-working-td4368806.html
log.level = Level.INFO
// this will NOT print/write as the loglevel is info
log.debug 'Executing Script.'
// this will print
log.info 'Simple sample to …Run Code Online (Sandbox Code Playgroud) 在之前的项目中,我使用Spock测试框架对我的Java代码进行单元测试.我发现这非常有效,所以我试图将Spock测试添加到我当前的项目中,该项目使用Maven作为其构建工具(之前的项目使用了Gradle).虽然我可以让Maven编译我的Spock测试(使用groovy-eclipse-compiler),但我无法让Maven运行测试.
我做了一个简单的例子来演示我的2个文件的问题:
pom.xmlsrc/test/java/ASpec.groovy内容pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my.group</groupId>
<artifactId>my-artifact</artifactId>
<version>0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.0.8</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-core</artifactId>
<version>0.7-groovy-2.0</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<compilerId>groovy-eclipse-compiler</compilerId>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-eclipse-compiler</artifactId>
<version>2.8.0-01</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-eclipse-batch</artifactId>
<version>2.1.8-01</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
Run Code Online (Sandbox Code Playgroud)
内容ASpec.groovy:
import spock.lang.Specification
class ASpec extends Specification {
def "Test A"(){
// Always fail
expect: false …Run Code Online (Sandbox Code Playgroud) 使用案例:
我有一个可用的NFS目录,我想用它来保存多个部署和pod的数据.
我创建了一个PersistentVolume:
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
server: http://mynfs.com
path: /server/mount/point
Run Code Online (Sandbox Code Playgroud)
我希望多个部署能够使用它PersistentVolume,所以我对所需内容的理解是我需要创建多个PersistentVolumeClaims,这些都将指向此PersistentVolume.
kind: PersistentVolumeClaim
apiVersion: v1
metaData:
name: nfs-pvc-1
namespace: default
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 50Mi
Run Code Online (Sandbox Code Playgroud)
我相信这会创造一个50MB的索赔PersistentVolume.当我跑步时kubectl get pvc,我看到:
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
nfs-pvc-1 Bound nfs-pv 10Gi RWX 35s
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我看到10Gi容量,而不是50Mi.
当我然后更改PersistentVolumeClaim部署yaml以创建名为的PVC时,nfs-pvc-2我得到:
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
nfs-pvc-1 …Run Code Online (Sandbox Code Playgroud) 我面临一个问题,我在我的管道中定义了两个阶段,这两个阶段都在同一个节点上运行,需要在同一个工作区中运行.
这些阶段中的第一阶段最初在我的主节点上运行,但是在定义的步骤结束时必须将一些文件解压缩到不同的节点上.
然后第二阶段只需继续我的主人,并依赖从第一阶段安装的一些模块.
这是我的管道,以更好地解释:
#!groovy
pipeline {
agent { label 'master' }
stages {
stage('Build') { // 1. Running on master in /var/lib/jenkins/workspace/_Pipelines_IACT-Jenkinsfile-UL3RGRZZQD3LOPY2FUEKN5XCY4ZZ6AGJVM24PLTO3OPL54KTJCEQ
steps {
sh '''
npm install
bower install
gulp set-staging-node-env
gulp prepare-staging-files
gulp webpack
'''
stash includes: 'dist/**/*', name: 'builtSources'
stash includes: 'config/**/*', name: 'appConfig'
node('Protractor') { // 2. Running on vnccentos7 in /var/jenkins/workspace/_Pipelines_IACT-Jenkinsfile-UL3RGRZZQD3LOPY2FUEKN5XCY4ZZ6AGJVM24PLTO3OPL54KTJCEQ
dir('/opt/foo/deploy/') {
unstash 'builtSources'
unstash 'appConfig'
}
}
}
}
stage('Unit Tests') {
agent { label 'master' } // 3. Running on master …Run Code Online (Sandbox Code Playgroud) jenkins ×4
java ×3
groovy ×2
binding ×1
final ×1
guice ×1
jenkins-declarative-pipeline ×1
kubernetes ×1
logging ×1
maven ×1
nfs ×1
oop ×1
spock ×1
unit-testing ×1