Giter Club home page Giter Club logo

gocd / gocd Goto Github PK

View Code? Open in Web Editor NEW
7.0K 219.0 971.0 368.03 MB

Main repository for GoCD - Continuous Delivery server

Home Page: https://www.gocd.org

License: Apache License 2.0

Java 70.09% Shell 0.05% NSIS 0.08% Ruby 1.25% XSLT 0.70% HTML 0.86% JavaScript 2.59% CSS 0.01% Batchfile 0.01% FreeMarker 0.05% Groovy 7.15% TypeScript 15.22% SCSS 1.93% EJS 0.01%
ci cd gocd ci-cd continuous-integration continuous-delivery-server continuous-delivery infrastructure-as-code continuous-deployment continuous-testing

gocd's Introduction

GoCD

Google Groups GitHub Discussions GitHub License Server Docker Pulls

This is the main repository for GoCD - a continuous delivery server. GoCD helps you automate and streamline the build-test-release cycle for worry-free, continuous delivery of your product.

Security

Please see the security policy for details on GoCD's security status, and how to responsibly disclose issues.

Development

GoCD is predominantly a Java & TypeScript project utilising Spring Framework, SparkJava & MithrilJS as key frameworks, built using Gradle & Webpack and running within Eclipse Jetty.

There are a small number of older parts of GoCD rendered server-side within JRuby on Rails which utilise some legacy plain JavaScript with JQuery. GoCD itself is used to build GoCD.

Here is the guide to setup your development environment.

Contributing

We'd love it if you contributed to GoCD. For information on contributing to this project, please see our contributor's guide. A lot of useful information like links to user documentation, design documentation, mailing lists etc. can be found in the resources section.

License

GoCD is an open source project, sponsored by Thoughtworks, Inc. under the Apache License, Version 2.0.

gocd's People

Contributors

arvindsv avatar bdpiprava avatar bsharanya avatar chadlwilson avatar dependabot-preview[bot] avatar dependabot-support avatar dependabot[bot] avatar dhanasp avatar ganeshspatil avatar ibnc avatar imvirajp avatar juhijariwala avatar jyotisingh avatar ketan avatar kierarad avatar kritika-singh3 avatar maheshp avatar marques-work avatar mdaliejaz avatar naveenbhaskar avatar pravds avatar sachinsudheendra avatar snehapl avatar srinivasupadhya avatar tomzo avatar varshavaradarajan avatar vishaldevgire avatar vrushaliwaykole avatar xli avatar zabil avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gocd's Issues

Task Plugins don't pick up default values set by plugin author for UI.

Steps To Reproduce
  1. Setup up properties in the task plugin with default values.
  2. Open a new task of that type, default values are not shown/selected.
Actual Result

Default values are not be picked up by Go.

Expected Result

Default values should be picked up by Go and displayed accordingly on the screen.

Enhancement: Fix stage rerun and Job Rerun bug in VSM

Description

In case of stage rerun/ job re-run, while showing the value stream map,
we should pickup the stage details from the cruise-config while the
pipeline is running. Right now we are picking up the previous run
details and displaying them as run details for the downstream
pipelines.

This issue is pronounced only when the pipeline is running

Acceptance Criteria:

  • In case of stage re-runs, the latest stage runs need to be shown for
    that instance
  • All downstream pipelines that have not run need to show stages from
    the configuration
    Verification:
  1. Rerun an existing stage and verify if stages ofdownstream pipelines
    are being shown as blank while the stage is in progress. Also verify
    after the completion of run of all stages, proper revisions and
    stage status is being shown
  2. Rerun a job and verify if stages of downstream pipelines are being
    shown as blank while current pipeline stage is in progress. Also
    verify after the completion of run of all stages, proper revisions
    and stage status is being shown
  3. Pause couple of downstream pipelines, re-run a job or pipeline for
    the pipeline context and verify if the stages are blank since they
    can't be triggered.

it doesn't start

I'm getting this strange exception trying to start the "without installation" version of the server, is there an undocumented security related requirement? Also, I only see the current version on the download page, is there any way to get an older version to see if that works? I would look at the code but you don't have it available yet.

Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.simontuffs.onejar.Boot.run(Boot.java:306)
at com.simontuffs.onejar.Boot.main(Boot.java:159)
Caused by: java.lang.NoSuchFieldError: pkcs_9_at_friendlyName
at com.thoughtworks.cruise.security.PKCS12BagAttributeSetter.setFriendlyName(PKCS12BagAttributeSetter.java:32)
at com.thoughtworks.cruise.security.X509CertificateGenerator.storeX509Certificate(X509CertificateGenerator.java:62)
at com.thoughtworks.cruise.security.X509CertificateGenerator.createAndStoreX509Certificates(X509CertificateGenerator.java:56)
at com.thoughtworks.cruise.server.util.CruiseSslSocketConnector.storeX509Certificate(CruiseSslSocketConnector.java:81)
at com.thoughtworks.cruise.server.util.CruiseSslSocketConnector.sslConnector(CruiseSslSocketConnector.java:40)
at com.thoughtworks.cruise.server.CruiseServer.sslConnector(CruiseServer.java:126)
at com.thoughtworks.cruise.server.CruiseServer.configureServer(CruiseServer.java:87)
at com.thoughtworks.cruise.server.CruiseServer.startServer(CruiseServer.java:77)
at com.thoughtworks.cruise.server.CruiseServer.go(CruiseServer.java:70)
at com.thoughtworks.cruise.server.util.CruiseLauncher.main(CruiseLauncher.java:19)
... 6 more

Version: go-server-13.4.1-18342
OS: Fedora release 15
JAVA: Java(TM) SE Runtime Environment (build 1.7.0_17-b02)
BC jars: jdk15on-148

Cannot migrate users between local and LDAP

Given you have an existing local-user, you cannot delete that local user then add a user of the same name from LDAP.

Deleting the local user from cruise-config.xml doesn't appear to change anything.

Missing error description when creating a new task

We were creating a new pipeline. In step 3, we were prompted for "Initial Job and Task." We specified an absolute working directory (any directory starting with /). When we clicked "Finish" we see the error "! Save failed, see errors below". However, no errors were displayed and no form fields were highlighted.

We eventually found that changing the working directory to a relative one corrects the error.

Show proper error message on UI and in logs when re-run of an older version of a pipeline fails due to change in configuration

Steps to Reproduce

  1. Create a pipeline which fetches artifact from ancestor pipeline and run it once (Run 1).
  2. Now change pipeline configuration such that artifact is now fetched from different ancestor pipeline and run again (Run 2).
  3. Go to Run 1 of pipeline and re-run stage.
Stack trace:

ERROR [92@MessageListener for WorkFinder] JMSMessageListenerAdapter:54 - Exception thrown in message handling by listener com.thoughtworks.cruise.server.messaging.scheduling.WorkFinder@17924f73
java.lang.NullPointerException
    at com.thoughtworks.cruise.server.service.builders.FetchTaskBuilder.resolveTargetJob(FetchTaskBuilder.java:76)
    at com.thoughtworks.cruise.server.service.builders.FetchTaskBuilder.createBuilder(FetchTaskBuilder.java:29)
    at com.thoughtworks.cruise.server.service.builders.FetchTaskBuilder.createBuilder(FetchTaskBuilder.java:25)
    at com.thoughtworks.cruise.server.service.builders.BuilderFactory.builderFor(BuilderFactory.java:47)
    at com.thoughtworks.cruise.server.service.builders.BuilderFactory.buildersForTasks(BuilderFactory.java:41)
    at com.thoughtworks.cruise.server.service.BuildAssignmentService$2.surrounding(BuildAssignmentService.java:188)
    at com.thoughtworks.cruise.server.transaction.TransactionTemplate.transactionSurrounding(TransactionTemplate.java:55)
    at com.thoughtworks.cruise.server.service.BuildAssignmentService.createWork(BuildAssignmentService.java:175)
    at com.thoughtworks.cruise.server.service.BuildAssignmentService.assignWorkToAgent(BuildAssignmentService.java:99)
    at com.thoughtworks.cruise.server.messaging.scheduling.BuildAssignmentServiceAssigner.assignWorkToAgent(BuildAssignmentServiceAssigner.java:28)
    at com.thoughtworks.cruise.server.messaging.scheduling.WorkFinder.onMessage(WorkFinder.java:34)
    at com.thoughtworks.cruise.server.messaging.scheduling.WorkFinder.onMessage(WorkFinder.java:13)
    at com.thoughtworks.cruise.server.messaging.activemq.JMSMessageListenerAdapter.runImpl(JMSMessageListenerAdapter.java:49)
    at com.thoughtworks.cruise.server.messaging.activemq.JMSMessageListenerAdapter.run(JMSMessageListenerAdapter.java:34)
    at java.lang.Thread.run(Thread.java:662)

Actual Result

No message displayed on UI to indicate why pipeline did not trigger.

Expected Result

Proper error message should be displayed on UI and logs to indicate why pipeline did not trigger.

Cannot save values for curl task from UI in certain situations

Description

  1. Curl task has 4 properties - url, secure connection, request type and additional properties
  2. Add a curl task for a pipeline through cruise-config.xml but do not specify one property say additional options property
  3. The task saves fine through cruise-config
  4. Now open the task through UI
  5. It does not show any additional options as expected.
  6. Now add some additional options and save

Expected Result

The additional options should save fine

Actual Result

The additional options does not save anymore from UI

Also, the default value is not being set for empty string.

Go saving tmp files inside Jetty folder when agents upload artifacts to Go server

Description -

When agents upload artifacts to the Go server, Go is temporarily storing them in tmp files in /var/lib/go-server/work/Jetty_0_0_0_0_8153_cruise.war__go__.mt8b37 which should not be the case as this is the location of the actual web app itself.

Some initial investigation on this was done by @sachinsudheendra. Following are his comments:

I was a bit surprised to see Go creating temporary files under the Jetty work directory as we make sure we only use java.io.tmpdir when needed. As I was debugging this, I landed at a component that Go uses (Apache commons-fileupload). Digging into its source, it was pretty evident that this component was what was creating those files with the pattern "upload_*.tmp". You can see the source at http://commons.apache.org/proper/commons-fileupload/apidocs/src-html/org/apache/commons/fileupload/disk/DiskFileItem.html#line.556

/**
557     * Creates and returns a {@link java.io.File File} representing a uniquely
558     * named temporary file in the configured repository path. The lifetime of
559     * the file is tied to the lifetime of the <code>FileItem</code> instance;
560     * the file will be deleted when the instance is garbage collected.
561     * <p>
562     * <b>Note: Subclasses that override this method must ensure that they return the
563     * same File each time.</b>
564     *
565     * @return The {@link java.io.File File} to be used for temporary storage.
566     */
567    protected File getTempFile() {
568        if (tempFile == null) {
569            File tempDir = repository;
570            if (tempDir == null) {
571                tempDir = new File(System.getProperty("java.io.tmpdir"));
572            }
573
574            String tempFileName = format("upload_%s_%s.tmp", UID, getUniqueId());
575
576            tempFile = new File(tempDir, tempFileName);
577        }
578        return tempFile;
579    }
580

Go uses an older version of this library, so the code above is not be the exact thing running with Go. The newer version seems to use java.io.tmpdir, but the version we use has a slightly alternate flow. Also, when I printed the call stack when it landed on this method, it seems like this call is made well before Go's code is invoked. So somewhere between Jetty's request handler and Go's artifact handler, there is a call to this method. I've attached a snippet of call stack below:

java.lang.Thread.getStackTrace(Thread.java:1503)
org.apache.commons.fileupload.disk.DiskFileItem.getTempFile(DiskFileItem.java:597)
org.apache.commons.fileupload.disk.DiskFileItem.getOutputStream(DiskFileItem.java:540)
org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:354)
org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:156)
org.springframework.web.multipart.commons.CommonsMultipartResolver.resolveMultipart(CommonsMultipartResolver.java:139)
org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1020)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:883)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
...50 more lines

I guess I'm at an interesting point where I need to see why this method is called, and how it is used in this whole context.

Recursive symlinks prevent artifact generation

Steps to Reproduce

  1. Create a pipeline with an job whose artifact is generated from a directory that includes a recursive symlink (e.g. directory1/directory2/directory3/my_symlink points to ../../..).
  2. Run the pipeline such that Go will attempt to generate the artifact from really/*
  3. Look in the go-agent.log to see that the artifact has failed to generate due to a File name too long error

The following config can be used to create a pipeline that will generate this error:

<?xml version="1.0" encoding="utf-8"?>
<cruise xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="cruise-config.xsd" schemaVersion="69">
  <server artifactsdir="artifacts" commandRepositoryLocation="default" serverId="639da549-ba01-4e69-8bcd-5186f166bae7" />
  <pipelines group="Duckburg">
    <pipeline name="launchpadMcQuack">
      <materials>
        <git url="[email protected]:Duckburg/launchpad.git" autoUpdate="false" />
      </materials>
      <stage name="defaultStage">
        <jobs>
          <job name="defaultJob">
            <tasks>
              <exec command="pwd`" />
            </tasks>
            <artifacts>
              <artifact src="really/*" dest="really" />
            </artifacts>
          </job>
        </jobs>
      </stage>
    </pipeline>
  </pipelines>
  <agents>
    <agent hostname="money-bin" ipaddress="127.0.0.1" uuid="91e7e456-5810-4c0a-b986-e0e7bf307bbc">
      <resources>
        <resource>ruby-1.9.3</resource>
      </resources>
    </agent>
  </agents>
</cruise>

Expected Result

The build succeeds and gives us an artifact.

Actual Result

The build fails and gives the following stacktrace in go-agent.log:

014-03-11 16:33:45,492 [loopThread] ERROR thoughtworks.cruise.publishers.CruiseArtifactsManipulator:99 - Failed to upload /Volumes/Biggie/workspace/thoughtworks-go-cd/go_agent.app/pipelines/launchpadMcQuack/really/long
java.io.FileNotFoundException: pipelines/launchpadMcQuack/really/long/path/really_long_file_name/really/long/path/really_long_file_name/really/long/path/really_long_file_name/really/long/path/really_long_file_name/really/long/path/really_long_file_name/really/long/path/really_long_file_name/really/long/path/really_long_file_name/really/long/path/really_long_file_name/really/long/path/really_long_file_name/really/long/path/really_long_file_name/really/long/path/really_long_file_name/really/long/path/really_long_file_name/really/long/path/really_long_file_name/really/long/path/really_long_file_name/really/long/path/really_long_file_name/really/long/path/really_long_file_name/really/long/path/really_long_file_name/really/long/path/really_long_file_name/really/long/path/really_long_file_name/really/long/path/really_long_file_name/really/long/path/really_long_file_name/really/long/path/really_long_file_name/really/long/path/really_long_file_name/really/long/path/really_long_file_name/.git/objects/pack/pack-ee96781dbc3bcadfd7f8a90615a0ff8f7e1adbe3.idx (File name too long)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:120)
        at com.thoughtworks.cruise.util.ZipUtil.addToZip(ZipUtil.java:100)
        at com.thoughtworks.cruise.util.ZipUtil.addDirContents(ZipUtil.java:89)
        at com.thoughtworks.cruise.util.ZipUtil.addDirectory(ZipUtil.java:84)
        at com.thoughtworks.cruise.util.ZipUtil.addFolderToZip(ZipUtil.java:73)
        at com.thoughtworks.cruise.util.ZipUtil.addToZip(ZipUtil.java:95)
        at com.thoughtworks.cruise.util.ZipUtil.addDirContents(ZipUtil.java:89)
        at com.thoughtworks.cruise.util.ZipUtil.addDirectory(ZipUtil.java:84)
        at com.thoughtworks.cruise.util.ZipUtil.addFolderToZip(ZipUtil.java:73)
        at com.thoughtworks.cruise.util.ZipUtil.addToZip(ZipUtil.java:95)
        at com.thoughtworks.cruise.util.ZipUtil.addDirContents(ZipUtil.java:89)
        [...long recursive stack omitted for brevity]
        at com.thoughtworks.cruise.util.ZipUtil.addDirectory(ZipUtil.java:84)
        at com.thoughtworks.cruise.util.ZipUtil.addFolderToZip(ZipUtil.java:73)
        at com.thoughtworks.cruise.util.ZipUtil.addToZip(ZipUtil.java:95)
        at com.thoughtworks.cruise.util.ZipUtil.addDirContents(ZipUtil.java:89)
        at com.thoughtworks.cruise.util.ZipUtil.addDirectory(ZipUtil.java:84)
        at com.thoughtworks.cruise.util.ZipUtil.addFolderToZip(ZipUtil.java:73)
        at com.thoughtworks.cruise.util.ZipUtil.addToZip(ZipUtil.java:95)
        at com.thoughtworks.cruise.util.ZipUtil.addDirContents(ZipUtil.java:89)
        at com.thoughtworks.cruise.util.ZipUtil.addDirectory(ZipUtil.java:84)
        at com.thoughtworks.cruise.util.ZipUtil.addFolderToZip(ZipUtil.java:73)
        at com.thoughtworks.cruise.util.ZipUtil.addToZip(ZipUtil.java:95)
        at com.thoughtworks.cruise.util.ZipUtil.zipContents(ZipUtil.java:55)
        at com.thoughtworks.cruise.util.ZipUtil.zip(ZipUtil.java:33)
        at com.thoughtworks.cruise.publishers.CruiseArtifactsManipulator.publish(CruiseArtifactsManipulator.java:69)
        at com.thoughtworks.cruise.work.DefaultCruisePublisher.upload(DefaultCruisePublisher.java:57)
        at com.thoughtworks.cruise.config.ArtifactPlan.publishWithProperties(ArtifactPlan.java:110)
        at com.thoughtworks.cruise.config.ArtifactPlan.publish(ArtifactPlan.java:101)
        at com.thoughtworks.cruise.domain.DefaultJobPlan.publishArtifacts(DefaultJobPlan.java:89)
        at com.thoughtworks.cruise.remote.work.BuildWork.completeJob(BuildWork.java:175)
        at com.thoughtworks.cruise.remote.work.BuildWork.build(BuildWork.java:127)
        at com.thoughtworks.cruise.remote.work.BuildWork.doWork(BuildWork.java:75)
        at com.thoughtworks.cruise.agent.JobRunner.run(JobRunner.java:34)
        at com.thoughtworks.cruise.agent.AgentController.retrieveWork(AgentController.java:153)
        at com.thoughtworks.cruise.agent.AgentController.loop(AgentController.java:99)
        at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:273)
        at org.springframework.scheduling.support.MethodInvokingRunnable.run(MethodInvokingRunnable.java:65)
        at org.springframework.scheduling.timer.DelegatingTimerTask.run(DelegatingTimerTask.java:70)
        at java.util.TimerThread.mainLoop(Timer.java:512)
        at java.util.TimerThread.run(Timer.java:462)

Errors in logs, state change

Hey,

We're getting a lot of errors in our logs concerning State Change.

Any ideas?

Here's an example (I've replace our job details with xxxxx).


2014-03-17 17:30:20,784  WARN [1970473475@qtp-1380290369-11557] JobInstanceSqlMapDao:307 - State change for a completed Job is not allowed. Job JobIdentifier[xxxxx] is currently State=Completed, Result=Passed
java.lang.Exception
        at com.thoughtworks.cruise.server.dao.JobInstanceSqlMapDao.logIfJobIsCompleted(JobInstanceSqlMapDao.java:307)
        at com.thoughtworks.cruise.server.dao.JobInstanceSqlMapDao.access$700(JobInstanceSqlMapDao.java:42)
        at com.thoughtworks.cruise.server.dao.JobInstanceSqlMapDao$2.doInTransaction(JobInstanceSqlMapDao.java:281)
        at com.thoughtworks.cruise.server.transaction.TransactionTemplate$2.doInTransaction(TransactionTemplate.java:23)
        at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130)
        at com.thoughtworks.cruise.server.transaction.TransactionTemplate.execute(TransactionTemplate.java:19)
        at com.thoughtworks.cruise.server.dao.JobInstanceSqlMapDao.updateStateAndResult(JobInstanceSqlMapDao.java:263)
        at com.thoughtworks.cruise.server.dao.JobInstanceSqlMapDao.save(JobInstanceSqlMapDao.java:153)
        at com.thoughtworks.cruise.server.service.JobInstanceService.save(JobInstanceService.java:247)
        at com.thoughtworks.cruise.server.service.StageService.persistJobs(StageService.java:248)
        at com.thoughtworks.cruise.server.service.StageService.access$400(StageService.java:65)
        at com.thoughtworks.cruise.server.service.StageService$3.doInTransaction(StageService.java:210)
        at com.thoughtworks.cruise.server.transaction.TransactionTemplate$2.doInTransaction(TransactionTemplate.java:23)
        at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130)
        at com.thoughtworks.cruise.server.transaction.TransactionTemplate.execute(TransactionTemplate.java:19)
        at com.thoughtworks.cruise.server.service.StageService.save(StageService.java:206)
        at com.thoughtworks.cruise.server.service.ScheduleService$1.doInTransaction(ScheduleService.java:245)
        at com.thoughtworks.cruise.server.transaction.TransactionTemplate$2.doInTransaction(TransactionTemplate.java:23)
        at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130)
        at com.thoughtworks.cruise.server.transaction.TransactionTemplate.execute(TransactionTemplate.java:19)
        at com.thoughtworks.cruise.server.service.ScheduleService.scheduleStage(ScheduleService.java:226)
        at com.thoughtworks.cruise.server.service.ScheduleService.internalRerun(ScheduleService.java:222)
        at com.thoughtworks.cruise.server.service.ScheduleService.lockAndRerunStage(ScheduleService.java:291)
        at com.thoughtworks.cruise.server.service.ScheduleService.rerunJobs(ScheduleService.java:310)
        at sun.reflect.GeneratedMethodAccessor701.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.jruby.javasupport.JavaMethod.invokeDirectWithExceptionHandling(JavaMethod.java:550)
        at org.jruby.javasupport.JavaMethod.invokeDirect(JavaMethod.java:395)
        at org.jruby.java.invokers.InstanceMethodInvoker.call(InstanceMethodInvoker.java:79)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:226)
        at ruby.jit.rerun_jobs_FEEAB9C1878C563EFD004A6DCD44889CAED1DAE4.__file__(stages_controller.rb:92)
        at ruby.jit.rerun_jobs_FEEAB9C1878C563EFD004A6DCD44889CAED1DAE4.__file__(stages_controller.rb)
        at org.jruby.internal.runtime.methods.JittedMethod.call(JittedMethod.java:136)
        at org.jruby.RubyClass.finvoke(RubyClass.java:502)
        at org.jruby.RubyObject.send(RubyObject.java:1437)
        at org.jruby.RubyObject$i_method_multi$RUBYINVOKER$send.call(org/jruby/RubyObject$i_method_multi$RUBYINVOKER$send.gen:65535)
        at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodZeroOrOneOrNBlock.call(JavaMethod.java:266)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:309)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:148)
        at ruby.jit.perform_action_11ACD7A0A0C8D148621029D92ACBAFFB47E5EE8C.__file__(base.rb:1331)
        at ruby.jit.perform_action_11ACD7A0A0C8D148621029D92ACBAFFB47E5EE8C.__file__(base.rb)
        at org.jruby.internal.runtime.methods.JittedMethod.call(JittedMethod.java:119)
        at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:159)
        at org.jruby.internal.runtime.methods.AliasMethod.call(AliasMethod.java:56)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:289)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:108)
        at ruby.jit.call_filters_11D5AD4F3804478625CCADB377B1AFDEEE89CAD3.__file__(filters.rb:617)
        at ruby.jit.call_filters_11D5AD4F3804478625CCADB377B1AFDEEE89CAD3.__file__(filters.rb)
        at org.jruby.internal.runtime.methods.JittedMethod.call(JittedMethod.java:221)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:349)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:228)
        at ruby.jit.perform_action_with_filters_31B597A463890CF32711DA62EA84725B6C86BE2A.__file__(filters.rb:610)
        at ruby.jit.perform_action_with_filters_31B597A463890CF32711DA62EA84725B6C86BE2A.__file__(filters.rb)
        at org.jruby.internal.runtime.methods.JittedMethod.call(JittedMethod.java:119)
        at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:159)
        at org.jruby.internal.runtime.methods.AliasMethod.call(AliasMethod.java:56)
        at org.jruby.internal.runtime.methods.AliasMethod.call(AliasMethod.java:56)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:289)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:108)
        at ruby.jit.perform_action_with_benchmark_C8D5EAFDDF81ADD094CA0959F04EA70EF0BD3D95.block_0$RUBY$__block__(benchmarking.rb:68)
        at ruby.jit.perform_action_with_benchmark_C8D5EAFDDF81ADD094CA0959F04EA70EF0BD3D95BlockCallback$block_0$RUBY$__block__xx1.call(Unknown Source)
        at org.jruby.runtime.CompiledBlock.yield(CompiledBlock.java:115)
        at org.jruby.runtime.CompiledBlock.yield(CompiledBlock.java:98)
        at org.jruby.runtime.CompiledBlock.yieldSpecific(CompiledBlock.java:78)
        at org.jruby.runtime.Block.yieldSpecific(Block.java:99)
        at ruby.jit.ms_270EFA214D3CAE17976B05C52A5D6137FD992C2E.block_0$RUBY$__block__(benchmark.rb:17)
        at ruby.jit.ms_270EFA214D3CAE17976B05C52A5D6137FD992C2EBlockCallback$block_0$RUBY$__block__xx1.call(Unknown Source)
        at org.jruby.runtime.CompiledBlock.yield(CompiledBlock.java:115)
        at org.jruby.runtime.CompiledBlock.yield(CompiledBlock.java:98)
        at org.jruby.runtime.CompiledBlock.yieldSpecific(CompiledBlock.java:78)
        at org.jruby.runtime.Block.yieldSpecific(Block.java:99)
        at ruby.jit.realtime_D2996A15F4198E93817822837CF100C2D43D881C.__file__(benchmark.rb:308)
        at ruby.jit.realtime_D2996A15F4198E93817822837CF100C2D43D881C.__file__(benchmark.rb)
        at org.jruby.internal.runtime.methods.JittedMethod.call(JittedMethod.java:136)
        at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:167)
        at org.jruby.internal.runtime.methods.WrapperMethod.call(WrapperMethod.java:74)
        at org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:115)
        at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:132)
        at ruby.jit.ms_270EFA214D3CAE17976B05C52A5D6137FD992C2E.__file__(benchmark.rb:17)
        at ruby.jit.ms_270EFA214D3CAE17976B05C52A5D6137FD992C2E.__file__(benchmark.rb)
        at org.jruby.internal.runtime.methods.JittedMethod.call(JittedMethod.java:136)
        at org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:115)
        at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:132)
        at ruby.jit.perform_action_with_benchmark_C8D5EAFDDF81ADD094CA0959F04EA70EF0BD3D95.__file__(benchmarking.rb:68)
        at ruby.jit.perform_action_with_benchmark_C8D5EAFDDF81ADD094CA0959F04EA70EF0BD3D95.__file__(benchmarking.rb)
        at org.jruby.internal.runtime.methods.JittedMethod.call(JittedMethod.java:119)
        at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:159)
        at org.jruby.internal.runtime.methods.AliasMethod.call(AliasMethod.java:56)
        at org.jruby.internal.runtime.methods.AliasMethod.call(AliasMethod.java:56)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:289)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:108)
        at ruby.jit.perform_action_with_rescue_EB38528743C8C0E3065E0595F563C1B6BE032AC9.rescue_1$RUBY$__rescue___0(rescue.rb:160)
        at ruby.jit.perform_action_with_rescue_EB38528743C8C0E3065E0595F563C1B6BE032AC9.__file__(rescue.rb)
        at ruby.jit.perform_action_with_rescue_EB38528743C8C0E3065E0595F563C1B6BE032AC9.__file__(rescue.rb)
        at org.jruby.internal.runtime.methods.JittedMethod.call(JittedMethod.java:119)
        at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:159)
        at org.jruby.internal.runtime.methods.AliasMethod.call(AliasMethod.java:56)
        at org.jruby.internal.runtime.methods.AliasMethod.call(AliasMethod.java:56)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:289)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:108)
        at ruby.jit.perform_action_with_flash_8F4920C7402D7F0B1FD6C0B8E220EF5878BBFC17.__file__(flash.rb:146)
        at ruby.jit.perform_action_with_flash_8F4920C7402D7F0B1FD6C0B8E220EF5878BBFC17.__file__(flash.rb)
        at ruby.jit.perform_action_with_flash_8F4920C7402D7F0B1FD6C0B8E220EF5878BBFC17.__file__(flash.rb)
        at org.jruby.internal.runtime.methods.JittedMethod.call(JittedMethod.java:85)
        at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:141)
        at org.jruby.internal.runtime.methods.AliasMethod.call(AliasMethod.java:101)
        at org.jruby.RubyClass.finvoke(RubyClass.java:523)
        at org.jruby.RubyObject.send(RubyObject.java:1464)
        at org.jruby.RubyObject$i_method_multi$RUBYINVOKER$send.call(org/jruby/RubyObject$i_method_multi$RUBYINVOKER$send.gen:65535)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:160)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:279)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:68)
        at ruby.jit.process_9D04F496199EEF5E943447FBF76BCF144C1F2948.ensure_1$RUBY$__ensure___0(base.rb:532)
        at ruby.jit.process_9D04F496199EEF5E943447FBF76BCF144C1F2948.__file__(base.rb)
        at ruby.jit.process_9D04F496199EEF5E943447FBF76BCF144C1F2948.__file__(base.rb)

Accepting empty values for Email.

Configuration tested
(Issue manifesting on almost all OS and Browsers, still providing a few which I tested personally)

  • Mac OS 10.7.5 + Firefox
  • Mac OS 10.7.5 + Chrome
  • Mac OS 10.7.5 + Safari
  • Windows 7 + Firefox
  • Windows 7 + Chrome

Steps to reproduce

  1. Hit the link : http://www.go.cd/contribute/
  2. Scroll down to the bottom where you can see the Email text box.
  3. Click Submit without entering a single word.

Expected Result
Error message should be displayed. The form should not accept the blank values.

Actual Result
Form is submitted successfully without showing a single error message. Instead is is showing : Thank you! You will be notified as soon as the code is made available.

NOTE
Attaching screenshot for reference
screen shot 2014-02-27 at 2 13 44 pm

Job getting rescheduled

Scenario

Assume a pipeline P1 has job J11 and job J12 in a stage S1 and say J11 takes around 2 minute while J12 takes around 10 minutes to complete its execution while another pipeline P2 has job J21 in a stage S2. Pipeline P1 is triggered, agent A1 is assigned to J11 and agent A2 is assigned to J12. In the meanwhile (say after 3 minutes when J11 has completed) P2 is triggered such that agent A1 is assigned to J21. Now cancel stage S1.

Current behaviour

Go cancels all the jobs on the agents it has ran/running on thus cancelling A1's job J21. However, after the job is cancelled and server sees the agent ping, it considers the job abandoned and reschedules the build.

Expected behaviour

Job J12 should get cancelled (J11 has already completed) and J21 should remain unaffected.

Misc

  • Go version: 13.4.1 and earlier
  • OS: Any
  • Browser: Any

Make Go more accessible to color-blind users

Here's feedback from a user of Go, who is color-blind:

I am color blind and I find the Go UI very hard to use. It might be pretty obvious to use green and red as indicators on the Go UI, but at times I find it a little hard to differentiate between the two and this makes the Go UI extremely unusable to me. I can almost never tell if a stage has failed unless I click into the stage. If I stare hard enough, I can figure out, but it's not as obvious to me as it is to you.

The simple fix for this is to use labels instead of color for build statuses. Though I understand that color blindness is a relatively uncommon condition (not very uncommon though, around 10% of all men are red-green color blind), if you do have this condition, you can imagine the GO UI as a bunch of grey lines with no indication of where the failures are.

Needs discussion. Should this be an option? Should we change something more basic?

Improve Email Notification filters

Hey,

It would be great if the email notifications section was enhanced.

Currently you have to manually add a notification filter for every pipeline stage you are interested in.

For people who are interested in multiple stages, across multiple pipelines (we have around 300 pipelines), it is a painful process to add these in, one at a time.

Often users are interested in all stages of a given pipeline, or they are interested in all pipelines in a pipeline group.

A better selection process is needed.

content-type header for artifacts in Go always set to "text/plain"

Description:

A job generates an XML artifact, that has an XSL stylesheet. Access it via the "artifacts" tab.

Actual Result :

the XML artifact is served with a "text/plain" content-type header, resulting in plain XML being rendered in the browser.

Expected Result:

Xml files should be served with text/xml content-type header, so that the browser renders the XSL

Support label template based on environment variables and property files

Currently Go only supports label template based on $(COUNT), changelists from version controls and labels from upstream pipelines, but label template should start supporting either of the following (and
of course preferably both)

  1. Environment variables
    e.g. < pipeline name=”ABC” labeltemplate=”${env.XXX}” >
    where XXX is defined on the build machine

  2. Property from a file
    e.g.

Allow only trigger with options

Description

As a Go Administrator

  • I want to be able to disable the trigger with no option
    button(pipeline trigger button) on a pipeline
  • so that i can avoid accidental triggers

Revise how new pipelines appear under 'Personlize'

Description:

  • In /go/pipelines, the ""Personalize"" filter lets you choose the
    pipelines you want visible. When a new pipeline is added by another
    user, this new pipeline is visible on the Pipelines page even though
    it was never selected by the user. It can be frustrating for some
    users who are only interested in a subset of pipelines and screen
    space is limited, when a new pipeline appears on the Pipelines page.
  • It should be possible to sort the list in 'Personalize'
    alphabetically.
    This has been moved to issue #706
  • It should allow me to save my list of pipelines. Depending on what i
    am working on I might want to see a specific set of pipelines and
    easily switch to another set.
    This has been moved to issue #706

Better reporting under Test tab

It would be great to have a nicer report under the Tests tab for testing jobs that includes the same level of detail you get in e.g. CC.NET and TeamCity.

No proper error msg is shown when a user's operate permission is removed from pipeline group when that user has also been given stage operate permission

Steps to reproduce

  1. Give user1 and user2 operate permissions to pipeline group PG1
  2. Give user1 stage operate permission forpipeline P1 in PG1
  3. Try to remove operate permissions of user1 from PG1

Expected result

This should not be allowed and a proper error message should be given for that

Current result

It just says Save failed, see errors below but does not show any error

Improve: email notification

It would be useful to have email notifications of build status similar to what CC provided.

The emails would be sent per job when

  • the build fails
  • the build goes from failed to fixed

The email would have

  • a link to the job
  • for all platforms the build stderr
  • the test results
  • Any Go failures
  • a list of the materials that caused to the build

CC email example

SUBJECT

Subject: datasrc 259127 Build Fixed

BODY
Summary

View results here -> http://cruisecontrol/buildresults/datasrc?log=log20130
BUILD COMPLETE - 259127
Date of build: 2013-05-07T12:13:54
Time to build: 5 minutes 13 seconds
Last changed: 2013-05-07T10:23:32
Last log entry: PDSDK-294: Upgrading OpenSSL to version 0.9.8y. Jobs fixed ... PDSDK-294 on 2013/05/07

Errors/Warnings: (3)

cygwin warning:
MS-DOS style path detected: \software\cruisecontrol/test_kits
Preferred POSIX equivalent is: //software/cruisecontrol/test_kits
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
WARNING: No DataSourceSDK44Overview.pdf

Unit Tests: (44)

All Tests Passed

Modifications since last successful build: (1)

259119 andys PDSDK-294: Upgrading OpenSSL to version 0.9.8y.
Files affected by this changelist: (17)
edit //XXX/V-4_4/datasrc/RELEASENOTE.txt 65
branch //XXX/V-4_4/libs/openssl/check-version.sh 1

Thanks

MDU fails if a git repo contains an executable file with the name 'git'

[Originally reported by @wendorf ]
CommandLine looks for an executable in current directory and uses that for executing a command. If there is an executable file/folder by the name of one of the supported materials, for instance 'git' then MDU fails. This is not isolated to Go server, this would fail on the agent end as well (if at all MDU does through).

UknownHostException when node hostname is not 'localhost'

Steps to reproduce

  1. Install go-agent on node: dpkg -i go-agent-13.4.1-18342.deb
  2. Edit /etc/default/go-agent to point it to go-server instance.
  3. Change node hostname to anything other than "localhost": hostname go-agent
  4. Restart go-agent: /etc/init.d/go-agent restart

Expected result

Go agent process starts and registers itself on go-server.

Actual result

Go agent is not registered on go-server.

cat /var/log/go-agent-stderr.log gives the following output.

    Exception in thread "main" java.lang.reflect.InvocationTargetException
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:622)
            at com.simontuffs.onejar.Boot.run(Boot.java:306)
            at com.simontuffs.onejar.Boot.main(Boot.java:159)
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'agentController' defined in class path resource [applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.thoughtworks.cruise.agent.AgentController]: Constructor threw exception; nested exception is java.lang.RuntimeException: java.net.UnknownHostException: goAgent: goAgent
            at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:288)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1035)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:939)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
            at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
            at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
            at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
            at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:605)
            at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:925)
            at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:472)
            at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
            at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
            at com.thoughtworks.cruise.agent.AgentMain.main(AgentMain.java:26)
            ... 6 more
    Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.thoughtworks.cruise.agent.AgentController]: Constructor threw exception; nested exception is java.lang.RuntimeException: java.net.UnknownHostException: goAgent: goAgent
            at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:162)
            at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:121)
            at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:280)
            ... 20 more
    Caused by: java.lang.RuntimeException: java.net.UnknownHostException: goAgent: goAgent
            at com.thoughtworks.cruise.util.SystemUtil.getLocalhostName(SystemUtil.java:43)
            at com.thoughtworks.cruise.agent.AgentController.<init>(AgentController.java:49)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:534)
            at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)
            ... 22 more
    Caused by: java.net.UnknownHostException: goAgent: goAgent
            at java.net.InetAddress.getLocalHost(InetAddress.java:1461)
            at com.thoughtworks.cruise.util.SystemUtil.getLocalhostName(SystemUtil.java:41)
            ... 28 more
    Exception in thread "main" java.lang.reflect.InvocationTargetException
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:622)
            at com.simontuffs.onejar.Boot.run(Boot.java:306)
            at com.simontuffs.onejar.Boot.main(Boot.java:159)
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'agentController' defined in class path resource [applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.thoughtworks.cruise.agent.AgentController]: Constructor threw exception; nested exception is java.lang.RuntimeException: java.net.UnknownHostException: goAgent: goAgent
            at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:288)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1035)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:939)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
            at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
            at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
            at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
            at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:605)
            at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:925)
            at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:472)
            at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
            at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
            at com.thoughtworks.cruise.agent.AgentMain.main(AgentMain.java:26)
            ... 6 more
    Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.thoughtworks.cruise.agent.AgentController]: Constructor threw exception; nested exception is java.lang.RuntimeException: java.net.UnknownHostException: goAgent: goAgent
            at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:162)
            at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:121)
            at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:280)
            ... 20 more
    Caused by: java.lang.RuntimeException: java.net.UnknownHostException: goAgent: goAgent
            at com.thoughtworks.cruise.util.SystemUtil.getLocalhostName(SystemUtil.java:43)
            at com.thoughtworks.cruise.agent.AgentController.<init>(AgentController.java:49)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:534)
            at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)
            ... 22 more
    Caused by: java.net.UnknownHostException: goAgent: goAgent
            at java.net.InetAddress.getLocalHost(InetAddress.java:1461)
            at com.thoughtworks.cruise.util.SystemUtil.getLocalhostName(SystemUtil.java:41)
            ... 28 more

Server side plugin validations do not show up when tasks created from certain screens in Go

Steps to reproduce

  1. Drop sample curl plugin onto the go server
  2. Add a new stage to an existing pipeline.
  3. While adding new stage, select 'Curl' task and do not provide any url
  4. Try to save

Expected Result

There should be a validation message saying 'URL cannot be empty'

Actual Result

No validation message appears

Note: Same issue is observed on 'Add New Job' screen and 'On Cancel' screen as well

SVN post commit hook should pass along credentials

Description

When SVN post commit hook endpoint tries to get a map of URL to UUID, it creates an empty SvnCommand. SvnPostCommitHookImplementer:65

SvnCommand getEmptySvnCommand() {
        return new SvnCommand(null, ".");
}

Current Behaviour

The svn(boolean) helper method constructs the svn command line using the fields of the SvnCommand, which in this case happens to be null (username & password). When 'svn info' is executed, no username/password is set for the command. This causes 'svn info' to fail. As a result post commit hook fails and pipeline based on svn material fails.

Expected Behaviour

'svn info' should send relavent username/password for the repo under query.

Misc

  • Functional Area : SVN Post-Commit Hook
  • Go Version : Any version
  • Browser : NA

Go is also a programming language

Since you routinely call this Go in your description, I wanted to make sure you are aware that there is a popular programming language called Go (http://golang.org) (nearly 10,000 projects on Github use the Go programming language). Since your project is not a programming language this is not necessarily an issue--after all, there is also a board game called Go--but I wanted to make sure you are aware of it. Thanks.

cctray - pipeline summary

Currently you export cctray.xml which details every single stage and job of a pipeline.
http://mygoserver/go/cctray.xml

It would be great if there were variants on cctray so that it could just display the state of the pipeline rather than each individual job.

i.e.
pipeline 1, failed.
pipeline 2, passed.
pipeline 3, passed.

That would be very useful to plug into our build monitors (e.g. https://github.com/AdamNowotny/BuildReactor) where we just see what pipelines are passed/failed, rather than drill down into each individual job/stage.

HTTPS for agent registration

It would be great if you could make the agent registration work with HTTPS so we don't have to have both e.g. 8153 and 8154 open.

Can't run Mac packages on Mavericks

Sent to the go-cd mailing list by Clinton Wivell...

When I downloaded and tried to unzip the server and agent files, I got an error message say the file "is damaged and can't be opened." I've attached a screenshot of the error message.

I'm running OS X 10.9. Am I missing something?

screen shot 2014-02-27 at 6 20 14 pm

Cannot add user with . (dot) in username from UI

Description

A user whose username has '.' in it, for example, username.with.dot cannot be added to the go-server.

Current behaviour

When trying to add the user, error message is shown in the add user pop-up saying "No users selected."

Expected behaviour

The user should get added and success message should be shown.

Workaround

Check the option in User Management section of Server Configuration in the Admin tab saying "Allow users that exist in LDAP or in the password file to log into Go, even if they haven't been explicitly added to Go." When the user logs in he/she is automatically added to the users list. The option can then be un-checked if required.

Misc

  • Go version: 13.4.1 and earlier
  • OS: any
  • Browser: any

feature request to clone git repository outside go server installation

cant checkout material from my remote repository in a custom directory which is outside the Go Server installation folder. The default folder where clone happens is ${G_Server_INstallation}/pipelines/flyweight//my-git-repo

In Windows, for some cases user's might hitthe 256 char pathname limit so git fails to checkout. If there is a feature to allow git clone on an absolute directory of user's choice it'd help resolve the issue.

THe git issue on windows that we're talking about here is this: http://stackoverflow.com/questions/14811991/git-checkout-error-unable-to-create-file

UI issue with sample curl task extension

Description:

  1. Drop curl sample plugin jar in go-server i.e in /var/lib/go-server/plugins/external and restart server.
  2. Create a pipeline with one job called defaultJob.
  3. Add another job called secondJob and select curl as the task

Expected Result:

The UI should show up fine and the default selections should stay

Actual Result:

It shows error in UI. Also the default selection of Secure Connection field is not there. See screenshot below

curl_ui_error

Also the same issue is observed when adding a new stage. See screenshot below

curl_ui_issue_add_stage

PERFORCE: Do not output peforce syncing to console

DESCRIPTION:
Our perforce projects and materials are huge, so for each job there are thousands of lines about the p4 updating phase, and it makes our Console tabs huge and hard to debug in case of any errors.

FEATURE:
As Developer I'd like to redirect that output to another tab

EXAMPLE:
URL: http://go.xxxxx.com/go/tab/build/detail/Project-0.0/95/Build/1/Build
Console tab:

[go] Start to prepare Project-0.0/285858/Build/1/Build on ci-cent5-019.xxxxx.com [/space/go-agent] at Tue Mar 04 12:16:45 GMT 2014
[go] Cleaning working directory "/space/go-agent/pipelines/Project-0.0" since stage is configured to clean working directory
[go] Start updating files at revision 285858 from perforce:1666
Client cruise-ci-cent5-019.xxxx.com-Project-0.0-LvmKLZEYMmUfkjm8kuVj2hA3gjc saved.
//Project/0.0/Lab/JavaAPI/.classpath#2 - deleted as /space/go-agent/pipelines/Project-0.0/Project/0.0/Lab/JavaAPI/.classpath
//Project/0.0/Lab/JavaAPI/.project#2 - deleted as /space/go-agent/pipelines/Project-0.0/Project/0.0/Lab/JavaAPI/.project
//Project/0.0/Lab/JavaAPI/.settings/org.eclipse.jdt.core.prefs#2 - deleted as /space/go-agent/pipelines/Project-0.0/Project/0.0/Lab/JavaAPI/.settings/org.eclipse.jdt.core.prefs
......
(another thousands lines about p4 sync output)
.....

FURTHER DETAILS:
I've already tried the suggested approach:
http://support.thoughtworks.com/entries/21577271-Is-it-possible-to-read-the-P4CLIENT-setting-that-an-agent-is-using-

But even using a p4 (p4.sh p4.cmd) wrapper, still got issues...

Custom sort order in Pipelines view

It would be great if we could set the display/sort order for the pipelines within a pipeline group so the layout roughly follows the way we have chained them together in the materials dependencies.

Create new pipeline with local url

I am new in this Continuous Delivery System/Tools
Can somebody explain step by step how to create new pipeline with local url?
Because, there's no complete step that i can follow.
And how everybody can contribute in one project in this tools?
Is it just like virtual box that u can change anything there, and another person change in same place, or anything else?
Many thanks for everyone that replay my issues and help me.

Cannot delete a build (pipeline run)

As an admin, using the web interface I should be able to delete old builds.

As an example, in the screenshot below, I should be able to delete the #52 pipeline.

image

Use a template for both "on success" and "manual"

Currently a template controls whether the pipeline using it is automatic or manual. I think it would be better if you could use the same template in both ways.

For example, I have a process for installing my software and I want that process to be exactly the same in my staging environment as it is in my production environment. To help make sure it's the same, I'd like to use a Go template to manage the process. I want to only deploy to production when I say so, but have the staging deployments happen automatically.

Need a build queue

There isn't a summary of what builds are currently waiting in a queue.

Via the agents tab you can see what agents are currently building, but you cannot see what other builds are queued up.

I've hit situations where builds would never be assigned an agent because I don't have an agent with any appropriate resources, or all agents are offline. Whatever. Having a build queue summary would give me a chance to spot these issues.

Even better would be the ability to move jobs up and down the build queue.
e.g. if I have 10 jobs queued, but one is really high priority, I should be able to bump it to the top of the queue.

Set start value for pipeline labels

It would be great if we can set the start value for a pipeline label.

This would allow us to e.g. get the revision number to continue the sequence on a release branch pipeline when we use the pipeline label for the revision number.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.