Is it possible/ how do you take an packaged version of a jar via a repository (for example Artifactory) and deploy it to an instance of AEM?
Could this be done via Maven and Jenkins in an automated way?
Currently this is done, only by using a tagged version in a VCS to build and then deploy via the content-package-maven-plugin.
With Jenkins you have multiple options:
You could let Maven build the artifacts for you
or you could use the Repository Connector Plugin (1) to get the artifacts from Nexus / Artifactory
After that, just use the CRX Content Package Deployer Plugin (2) to upload the packages to your AEM instance.
The Jenkins build could be triggered manually, by change in the VCS,...
(1): https://wiki.jenkins-ci.org/display/JENKINS/Repository+Connector+Plugin
(2): https://wiki.jenkins-ci.org/display/JENKINS/CRX+Content+Package+Deployer+Plugin
Related
I have a Jenkins job that build and upload an .ear to Artifactory. I'm creating another Jenkins job that will deploy this application on a few servers using ansible. How can I make it find the most recent build and get the artifactory URL for the ear file that was built?
Since you are using jenkins you can use the process of upstream -> downstream or pipeline based process for the deployment of the .ear files.
Artifactory url consists of two parts one fixed and another variable.
For e.g.
fixed --> https://artifact.domain.com:8081/artifactory
variable -- repo_name
https://artifact.domain.com:8081/artifactory/$repo_name/
For getting the lastest build number you can also use the artifactory api key value RELEASED
Artifactory REST Api
You can also use jenkins plugin of artifactory for dependencies download to download the .ear file if the app is simple
I have 2 Maven projects , a library and an App ,
Both are built and stored as an Artifacts in TFS (2017)
I would like to import project A directly from the TFS Artifacts into Project B
But apparently the structure the TFS artifacts are kept and the fact they do not keep the POM.XML prevents the Project B maven file to indentify the TFS Artifactory as a Maven artifactory and import the Library .
My question is .
1) Is it even possible to use TFS Artifacts the same way Maven artifacts are used ?
2) How does it done?
Thanks in advance
make sure Project A is deployed correctly to your Maven repository (instead or in addition to the deployment to TFS - I would have kept in TFS only the sources...). Then it would be very simple for maven to find project A and add it to B as a dependency.
Hope that helps.
You can try to publish the Artifacts of Project A to a shared folder (Artifact Type: File Share), then reference it directly or add a copy task to copy the artifacts to Project B.
Besides, it sounds like the chain builds in TFS. You can try the extension: Trigger Build Task, the task that can be used to trigger a new Build so that build-chaining is possible. Supports as well conditional triggers. See below similar thread for details:
How to chain builds in TFS 2015?
Using personal library .jar in TFS Online build
Another workaround is upgrading to TFS 2018 or migrating to VSTS to install a Maven artifact is as a dependency of another artifact with the Maven CLI.
Please see Install Maven artifacts using VSTS and TFS for details.
Related documents:
Set up the Maven client in VSTS and TFS
Publish Maven artifacts using VSTS and TFS
Build your Java app with Maven
I'd like to add one project A as my dependency, but unfortunately, there's no repository host this library. I know that I can install it to local repository manually, then refer this in pom file. But I have a travis build job where there's no such artifact, is there any way that I can install this library to local repo automatically ? Thanks
I would recommend to use the clean approach and uploading this library into your own repository. If you don't have one: time to get one running.
If you're really not up to this task the maven install plugin: http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html can install a jar in the local repository. This will work both locally and on a CI server.
To upload a jar in a remote repository there is the deploy plugin: http://maven.apache.org/plugins/maven-deploy-plugin/deploy-file-mojo.html
If you bind the execution of this plugin to a very early phase in the maven life-cycle (validate) you might be able to avoid a build step required prior of your own build.
I have a Java-based GitHub project, fitnessjiffy-spring (I'm currently focused on the "bootstrap" branch). It depends on a library built from another GitHib project, fitnessjiff-etl. I am trying to configure both of these to be built by Travis CI.
Unfortunately, Travis is not as sophisticated as Jenkins or Hudson in dealing with Maven-based Java projects. Jenkins can easily handle dependencies between projects, but the same concept doesn't seem to exist with Travis. If one project depends on another, then that other project must already be built previously... and its artifact uploaded to some Maven repo where the first project can download it later.
My "fitnessjiffy-etl" library is building and deploying just fine. I'm using Bintray for Maven repository hosting, and you can clearly see my artifacts over plain HTTP at:
http://dl.bintray.com/steve-perkins/maven/
In my "fitnessjiffy-spring" project, I am adding this Maven repo location directly in the pom.xml, so that Travis will be able to find that artifact dependency. Here is the state of my POM at the time of this writing. Note the <repositories> element at the bottom of the file.
When I build this project locally, it works just fine. I can see it downloading the Maven artifact from "http://dl.bintray.com/...". However, when I try to build on Travis CI it fails every time. I can see in the console log that Travis is still trying to download the artifact from Maven Central rather than my specified repo.
Does this make sense to anyone else? Why does Maven utilize a custom repository location in a POM file when building locally, but ignores this configuration when running on a Travis CI build?
From digging into this further, I discovered that Travis uses its own proxy for Maven Central, and has configured Maven to force ALL dependency requests through their proxy. In other words, it does not seem possible at this time to use additional Maven repos specified in the POM file of a project built on Travis.
In my case, I ended up refactoring such that project would not need the outside JAR dependency. I also switched to Drone.io, so I could manage my settings on the build server rather than having to carry a YAML file in my repository (which always struck me as a bit daft).
However, even on Drone it's still a major hassle to manage dependencies between multiple projects (extremely common with Java development). For Java, I just don't think there's currently an adequate substitute for Jenkins or Hudson, maybe running on a cheap Digital Ocean droplet or some other VPS provider instance.
In your install phase add a $HOME/.m2/settings.xml define your custom repository.
cache:
directories:
- "$HOME/.m2"
install:
- curl -o $HOME/.m2/settings.xml
https://raw.githubusercontent.com/trajano/trajano/master/src/site/resources/settings.xml
- mvn dependency:go-offline
script:
- mvn clean install site
I am using Maven as a build tool. Is there a way to deploy the artifacts present in my local maven repository (which I install via a 3rd party tool), to my remote Nexus repository ?
Thanks
If you want to deploy a whole bunch of artifacts with their poms as well as multiple artifacts using classifiers, you could use the tool we created in the Apache Flex project which is part of the Mavenizer tool, that we use to deploy entire repositories or parts of them ...
https://cwiki.apache.org/confluence/display/FLEX/Apache+Flex+SDK+Mavenizer
Code available at: https://git-wip-us.apache.org/repos/asf/flex-utilities.git
The SDKDeployer uses a local maven installation and acts as a wrapper to the maven deploy:deploy-file plugin, the SDKInVMDeployer does the same but without Maven utilizing the Maven libs directly (Is quite a lot faster)