This may be a very simple question but I couldn't find a solution. What I am trying to achieve is verify the file version of the files to be deployed within InstallShield. If the version does not matches with a given version number, the InstallShield project will fail to build. Btw, the file version will be supplied from external source.
You could do this as a prebuild or postbuild step. For prebuild you would reflect the ISM's File table and ISPathVariable tables to determine the files InstallShield is pickign up and then check the version on those files against your external source.
For postbuild you'd reflect the MSI's File table and compare the FileVersion column to your external source. Or, perform an admin install to extract the MSI to a directory and then reflect that structure and compare to your external source.
It's an unusual request though... in all my years I haven't needed to do this.
Related
In my build of Linux kernel 2.6.35.14 for an embedded system, I would like to use the CONFIG_LOCALVERSION_AUTO feature. The build process only includes any modified files in the local build tree (version controlled) and sources the remainder from our Vendor's source tree (not version controlled).
What specific files/folders need to be local for the feature to function?
You can check scripts/setlocalversion which is used to get the version from the SCM (it can be git, mercurial or svn).
You can probably modify that script to your needs.
I have been working with a TFS project that supports copying build output to source control. If I open the build definition, this is under "Build Defaults". There is an option to copy build output to a source control folder.
I have just installed TFS Server 2013 (with update 2) and I want to use this feature with a new Team Project. However, if I create new build in VS 2012 or VS 2013 on the new server, I am not given the option to copy build output to source control. What gives?
I am not looking for a workaround, I want to know what to change so that my server acts like the first one I described. Thanks!
Screenshots of what I'm talking about: http://imgur.com/a/mhDNQ
This was a feature that was temporarily present in TFS, but I believe has since been removed. If I recall it was put in there specifically to support the cloud-hosted elastic build servers which didn't have access to network shares to drop the builds in.
Most people recommend against putting your build outputs into TFS. The best approach is to publish them to a NuGet feed.
In any case if you want to put your build outputs into TFS (or a NuGet feed) you'll have to modify the build workflow to do that yourself.
Open a new build definition > process.
Under template select new and you should be able to choose project and folder. Find your original template and link it. Your option should appear.
In TFS 2013 this has changed to be "store drops in TFS". When you select this option the drop I'd stored in a new inversioned store that you can access.
While you can easily get the files out as indecision or zips the built in tools like release management do not support it yet. I would recommend that you use this option but publish your assets to a nugget repository.
If your TFS is available online (VSO or https) then you can use MyGet to dynamically load the nugget packages that you are publish and make them available on a feed.
http://docs.myget.org/docs/how-to/use-tfs-online-git-with-myget-build-services
Okay, I have a couple inquiries:
1 - Let's say I have a solution that references several external projects. I want to reference specific Labels (that represent stable versions) on those external projects. I know that you can do this by doing a Get Specific Version by Label on those projects. But once you've done that, is there a convenient way to do a Get on the whole solution, and have it preserve all of the specific versions?
Ultimately, I would like to do a single Get and have it get latest where that is applicable and get specific versions where that is applicable. It seems frustrating to have to do separate Gets on all the projects.
2 - Is it possible to build binaries from labels? When an external project is a stable version that isn't going to change, it makes sense to just reference the binary. When you create a label and build it, does it generate binaries in a specific location for that label that can be referenced?
On your first question: While TFS allows you to grab sources by Label, there is no way to setup a a workspace configuration that is bound to a specific Label or Changeset for a specific path. The only thing I can think of would be to create a batch file which fetches the latest version:
tf get $/Project/Sources /Version:T /recusive
tf get $/Project/ComponentA /version:LMyLabelName1 /recursive
tf get $/Project/ComponentB /version:LMyLabelName2 /recursive
The way forward to do this is to publish your external references to a NuGet repository (can be your own) and then configure NuGet to get a specific version. A CI build can publish a new version to your NuGet server. And you can setup your own server so that you don't need to publish all your binaries to a public server.
On your second question: yes you can build by label in the Queue Build screen you can setup the version to build which will be built:
You can specify a Changeset number (C######), Label (LLabelname) etc. Any version spec will do (see the commandline docs for a explanation on version specs).
By default, no easy referencable name is generated if you build by label. I suspect that some clever build customization will allow you to drop the build output in a predefined folder based on the label name, but there is no such out-of-the-box functionality.
I want to use SubWCRev to include the SVN revision number as part of the version number in my project, but we're using TeamCity and it doesn't seem to include the .svn directories when it pulls the source for a new build. Is there any way to force TeamCity to leave those directories in place for the build? We're currently using TeamCity 6, but upgrading to 7 may be possible if it's necessary.
Just use agent checkout mode:
Agent-side checkout ... provides the ability to access version
control-specific directories (.svn, CVS); that is, the build script
can perform VCS operations
As Lazy Badger noted, you can use agent-side checkout. Also, when build is run in TeamCity even for server-side checkout you can get the revision used to update the sources from "build.vcs.number." build parameters (you can get the exact name using "completion" in the webUI when defining value for a new build parameter.
We are using Maven and Jenkins for our automated Build and Deployment needs. Our Build Engineer has left and it is now up to me (Java Architect) to implement a few remaining stuff. I tried a lot of things to resolve this issue we are having. The problem statement is -
We have made a separate project in Eclipse to store properties files. The Developers check-in the properties file into SVN once they make any changes to it. Now we want that Maven, when triggered to do a deploy, to do the following -
1. Take the latest properties files from the SVN from the project used to store properties files.
2. Copy the same onto the Linux based JBoss App Server's /conf/ folder
3. Carry on with its deployment task.
We would like to have solution to point 1 and 2 above.
I dont know the exact answer. But it is quite doable. Quick google search did not show up any svn related plugin to retrieve properties. But you can always write your own maven plugin to do that task. For an example, if you want to retrieve properties file from a svn location to a local file system, just write a simple maven plugin[1] using the svn-kit [2].
we can use maven-wagon plugin[3] to transfer any artifact to a destination. Given that it supports SCP i would go with that. (just like a doing a scp to a remote Linux machine)
HTH.
[1] http://maven.apache.org/guides/plugin/guide-java-plugin-development.html
[2] http://svnkit.com/
[3] http://mojo.codehaus.org/wagon-maven-plugin/usage.html