I have the following structure in my TeamCity
Commons
* Commons Release Build (takes quite long because of integration tests)
Applications
* AppA Release Build
* AppB Release Build
* AppC Release Build
All three (independent) Applications depends on the Commons-Release-Build. Currently, the single Applications trigger the Commons-Release-Build before building. But in most cases the Commons-Release-Build hasn't changed, so it is unnecessary to rebuild it.
Is it somehow possible to configure Teamcity so it triggers the commons-release-build only when changes are available?
Or is it possible to tell the commons-release-build to do nothing when no changes are available?
NOTE: Gradle is used for every build.
Thanks in advance
Guenther
Answer to my own question:
It is possible to trigger the commons-build, and say "only build when changes are available", but the better solution is to configure the commons-library not to build at all but to be triggered by the depending projects when changes are detected. So do
Disable VCS-Triggers in commons
Create VCS-Triggers in the depending projects
enable the Flag "Trigger a build on changes in snapshot dependencies" on all the VCS-Triggers of the depending projects
Related
I have got about 30+ services. Each service has it's own repository, build and release on different environments.
Is it possible to deploy all releases for the latest build artifacts on the specified environment by single command?
There isn’t the built-in command can do it, but you can build a app (e.g. console application, PowerShell) to create release through Rest API: Create a release
You can create an overarching Release pipeline that use all the build artifacts. The downsides of this option are:
duplication of "code" between the single-component pipeline and the overarching one, mitigate using Task Groups
you do not have a simple display of what is deployed in an environment because you have to look in two places (single-component and overarching)
I created a plugin for sublime and I called it "sublimecastling".
The main idea is to replace 2 selected fields.
So I'll be glad to know whether it's possible to add it to your Sublime repository in order users could install the plugin via package-control.
The github link is provided below,
https://github.com/unknownuser88/sublimecastling
If you want to make a plugin available via Package Control, visit the documentation page on the Package Control website and click on Submitting a Package. There are a number of steps, which can be summarized as follows:
Search Package Control to ensure your package fulfills an unmet need, or greatly improves upon an existing package - don't create a new one (especially a very simple one) when you could work with the author of an existing one to add a particular feature.
Pick a name - there are several requirements here.
Decide how to host - Github? Bitbucket? Your own SSL server?
my own note here: Github is easiest
Pick a versioning strategy using semantic versioning. Note that all new packages must release by using versioning tags, not by branches or commits.
Prepare your repo - several things to do here.
Fork the Package Control Channel on Github and add your repo to the default channel - detailed instructions included.
Run the ChannelRepositoryTools package in Sublime to make sure everything is OK.
Note: Test your package with both ST2 and ST3 to make sure it works with both versions of Sublime. If you can only support one version due to the language differences between Python 2.6 and 3.3, pick ST3 - it is the future of Sublime, has a very large user base already, and will get you maximum exposure. If you haven't personally upgraded to ST3, now is the time to do so. If you are a registered user—which you should be :)—test with both the public beta and the latest dev build.
Finally, you can submit your pull request.
Be patient, it may take a little while for it to be reviewed, and it is not uncommon at all for changes to be requested. It is by following strict procedures that the community maintains the high quality of the packages available for users.
I observed that there are 3 plugins that are aiming to provide hudson integration in IntelliJ IDEA.
What is the better one and why?
Hudson Build Monitor seems like the only reliable option where IDEA plugins are concerned. The other available plugins seem to be buggy and perhaps a little over-engineered.
At a basic level HBM works great though I'd prefer it were more project-specific as opposed to monitoring a view or the entire list of Hudson jobs.
I'd like to see a more abstracted build monitor option. Perhaps a Maven plugin that is configured with a CI server facade and references to all the builds for a specific pom file. Then a generic integration within IDEA to poll that facade on a timer to display the status within your project view. This same abstraction could be integrated into the Maven reporting subsystem to document the build history of a specific release through the development cycle.
As usual, plenty of IDEAS and not enough TIME :-)
I'm using the Hudson promoted build plugin to try an automatic deploy if all of the maven projects are good.
My setup is similar to the following
Hudson job creates a version control tag and then triggers downstream builds of projects A and B. A triggers a downstream project Z.
I currently have the promoted builds plugin listening for success of A,B,Z. But no promotion ever happens.
I currently don't have the project triggering all 3 since there is no point in building Z before A.
Any ideas?
I think you need to configure fingerprinting so that Jenkins can keep track of which downstream build tested which upstream build.
You could try the Build Pipeline Plugin, or take some inspiration from Kohsuke's recent blog post "Doing choreography/workflow with Jenkins CLI" (login with CloudBees/Google/GitHub account required) which should give you more freedom in orchestrating your jobs.
I am currently trying to use NAnt and CruiseControl.NET to manage various aspects of my software development. Currently, NAnt handles just about everything, including replacing environment specific settings (e.g., database connection strings) based on an input target that I specify on the command line.
CruiseControl.NET is used to build the application for the default environment (dev) anytime new code is committed. I also want CruiseControl.NET to invoke a build for my additional environments test and stage, but I do not want these to be automatically invoked every time that a dev build invoked (daily) as test and stage deployments happen far less frequently. Test and stage deployments only occur when the application is ready for QA.
I can easily do this by specifying multiple projects, one for each environment. However, I already have many projects configured, one for each milestone in within my application. If I have to setup 3 projects for each milestone the CruiseControl.NET configuration can get out of hand quickly.
Here is my question:
Can I parameterize a CruiseControl.NET project configuration such that the parameters are exposed by the web interface?
Preferably (I think), I could have checkboxes for each environment (e.g., dev, test, stage) exposed in the web interface. A build would be made for each environment that is checked, whether the build was forced or automatic. It would be even better if I could default the checked state.
This feature (Dynamic Build Parameters) is currently being worked on for 1.5, and you can try it out in the nightlies. Here's a post describing the feature.
As Scott has mentioned, this isn't available, but it wouldn't take too much just to write a little template and then auto-generate the ccnet.config file given that template and a list of environments in a mail-merge type way.
Unfortunately, you can't do anything like that with CruiseControl.NET. It's a good idea, so you might want to submit it as a feature request.
This is fully supported now starting with cruisecontrol 1.5: http://cruisecontrolnet.org/projects/ccnet/wiki/Parameters