我正在尝试在Cloudbees上使用Jenkins来自动部署我的软件.我设置我的工作流程如下.
有时候我想重新部署.(假设该阶段采用手动输入参数).我如何在工作流程中这样做?这是我的Groovy脚本.
def src = 'https://git.repo.url/proj.git'
stage 'Build'
node {
env.JAVA_HOME="${tool name: 'Pre-Installed OpenJDK 8 (Latest) on DEV@Cloud nodes', type: 'hudson.model.JDK'}"
sh 'javac -version'
git credentialsId: 'abcdef', url: src
sh 'ant -f build.xml proj.jar report'
}
stage 'Generate Release Version'
input message: 'Create Tar and Push to S3', ok: 'Generate Release'
node {
// TODO
}
stage 'QA Approved'
input message: 'Enter a Tag Name to approve this build and tag in GIT', ok: 'Approve and Tag', parameters: [[$class: 'StringParameterDefinition', …Run Code Online (Sandbox Code Playgroud) groovy continuous-deployment jenkins cloudbees jenkins-workflow
我刚刚阅读了所有CloudBees开发人员文档,并且很惊讶我没有看到任何关于为部署管道设置多个环境的信息.
我计划在本地运行我的应用程序,然后将代码提升到我的网络内的QA机器,从那里将代码更改部署到CloudBees云上的"演示"环境中会很好,客户可以在其中查看/验收测试在我设置它们之前的变化.
所以我问:如何在CloudBees上设置Demo和Production环境?
理想情况下,我希望我的Demo环境demo.myapp.example.com和生产环境一样myapp.example.com.提前致谢!
我正在尝试设置CloudBees Bitbucket分支源插件,但我无法设置凭据.我已添加用户名和密码凭据,但下拉列表仍为空.
我正在使用Jenkins版本2.9的新安装以及Bitbucket Branch源插件版本1.5.
这是我添加的凭据.我还在之前的尝试中添加了带有私钥的SSH用户名.

我使用docker安装了jenkins,然后添加了插件.这是我的docker-compose文件的jenkins部分
jenkins:
image: jenkinsci/jenkins:latest
#image: arcanneero/cd-jenkins-pipeline
ports:
- "8080:8080"
- "50000:50000"
volumes:
- ./jenkins/data:/var/jenkins_home
Run Code Online (Sandbox Code Playgroud) 我正在尝试按照此处的说明在Cloudbees的Jenkins服务上运行我的Grails构建:
http://wiki.cloudbees.com/bin/view/DEV/Build+and+Deploy+Grails+application
但是,当我尝试从"Grails安装"为我的构建作业选择Grails安装时,下拉列表为空,但"默认"选项除外:

当我运行我的构建时,我收到以下错误消息,好像没有安装Grials实例:
java.io.IOException: Cannot run program "grails" (in directory "/scratch/jenkins/workspace/liza"): java.io.IOException: error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
at hudson.Proc$LocalProc.<init>(Proc.java:244)
at hudson.Proc$LocalProc.<init>(Proc.java:216)
at hudson.Launcher$LocalLauncher.launch(Launcher.java:709)
at hudson.Launcher$ProcStarter.start(Launcher.java:338)
at hudson.Launcher$RemoteLaunchCallable.call(Launcher.java:934)
at hudson.Launcher$RemoteLaunchCallable.call(Launcher.java:901)
at hudson.remoting.UserRequest.perform(UserRequest.java:118)
at hudson.remoting.UserRequest.perform(UserRequest.java:48)
at hudson.remoting.Request$2.run(Request.java:326)
at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.<init>(UNIXProcess.java:148)
at java.lang.ProcessImpl.start(ProcessImpl.java:65)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:453)
... 15 more
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?我需要以某种方式自己安装Grails吗?
我已经尝试检查"使用Grails包装器"复选框,但我仍然遇到类似的问题:
[liza] $ /scratch/jenkins/workspace/liza/grailsw upgrade --non-interactive
FATAL: command execution …Run Code Online (Sandbox Code Playgroud) CloudBees调用特定于区域的部署与他们(以及亚马逊)调用可用区域的区别有何不同?
据我所知,CloudBees允许您部署在2个区域/区域之一:美国和欧洲.这些是我唯一的选择(针对特定区域的部署和可用区域)吗?
在美国数据中心完全失效的情况下,将备用空闲实例池部署到欧洲"区域"是一个可靠的灾难恢复计划吗?DR如何通常由CloudBees客户端处理?
我试图理解之间的区别:
例如,我如何知道何时为我的应用添加更多app-cells?或者添加更多实例?或者将它们的某个子集配置到池中?提前致谢!
我需要在Jenkins管道中解析一些JSON并在循环中调用一些常规方法,但是脚本总是在第一次函数调用后退出.这该怎么做?
import groovy.json.JsonSlurper
import com.cloudbees.groovy.cps.NonCPS
@NonCPS
def myMethod(String json) {
def jsonSlurper = new JsonSlurper()
def jsonObject = jsonSlurper(json)
jsonObject.each {
obj ->
switch(obj.name) {
case "foo":
doAThing(obj)
break
case "bar":
doAnotherThing(obj)
break
}
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,即使使用json对象,例如:
[{
"name": "foo"
}, {
"name": "bar"
}]
Run Code Online (Sandbox Code Playgroud)
...管道总是在第一次迭代后退出.这可能是由于混合同步和异步功能.有没有办法做到这一点?
我刚开始学习groovy.我想在svn copy命令中将svnSourcePath和svnDestPath传递给shell脚本.但URL未呈现.
node {
stage 'Copy Svn code'
def svnSourcePath = "${svnBaseURL}${svnAppCode}${svnEnvDev}${SVN_DEV_PACKAGE}"
def svnDestPath = "${svnBaseURL}${svnAppCode}${svnEnvTest}${SVN_DEV_PACKAGE}"
print "DEBUG: svnSourcePath = ${svnSourcePath}"
print "DEBUG: svnDestPath = ${svnDestPath}"
withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: crendentialsIdSVN, passwordVariable: 'SVN_PWD', usernameVariable: 'SVN_USER']]) {
sh '''
svn copy $svnSourcePath $svnDestPath -m 'promote dev to test' --username $SVN_USER --password $SVN_PWD '''
}
}
Run Code Online (Sandbox Code Playgroud)
产量
+ svn copy -m 'promote dev to test' --username techuser --password 'xxxyyy'
svn: E205001: Try 'svn help' for more info
svn: E205001: Not enough arguments provided
Run Code Online (Sandbox Code Playgroud) 我正在为我的 .net 项目使用 Jenkins Pipeline。我不想使用默认内部版本号,所以我尝试在 groovy 中使用以下命令设置内部版本号。
def short_hash = bat(script: 'git log --pretty=format:\'%%h\' -n 1', returnStdout: true)
currentBuild.displayName = '0.0.' + "${env.BUILD_NUMBER}" +'.' + short_hash
Run Code Online (Sandbox Code Playgroud)
我观察到的是 short_hash 具有批处理命令的值以及结果。
此处的 jenkins 文档指出“脚本执行批处理脚本。允许多行。使用 returnStdout 标志时,您可能希望用 @ 作为前缀,以免命令本身包含在输出中。”
我尝试使用@,但在执行时出错。任何指针?
我们在Ubuntu 16.04.1服务器上运行Jenkins(版本2.60.1).我们最近遇到的一个问题是我们经常得到错误" 设备上没有剩余空间 ".
我知道在使用Docker时需要进行严格的清理过程,因为文件会留下并占用不必要的空间.
我们使用CloudBees Docker Build and Publish插件来处理构建并推送到AWS ECS.我想删除所有未使用的图像.问题是如果我登录Jenkins实例(通过SSH)并尝试运行它提供的docker命令 - "无法连接到Docker守护程序.这个主机上是否运行了docker守护程序?"
我想我需要在Jenkins环境或插件的一部分中做到这一点?
有人之前处理过此事或有过一些建议吗? - 我真的很感激.