<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Carlos Araujo</title>
    <description>The latest articles on DEV Community by Carlos Araujo (@caraujo).</description>
    <link>https://dev.to/caraujo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F334743%2Fab88a2bc-5ffa-4357-b920-4614e2eb7a8c.JPG</url>
      <title>DEV Community: Carlos Araujo</title>
      <link>https://dev.to/caraujo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/caraujo"/>
    <language>en</language>
    <item>
      <title>Dev &amp; QA (AEM 6.5 Upgrade)</title>
      <dc:creator>Carlos Araujo</dc:creator>
      <pubDate>Fri, 28 Aug 2020 16:54:24 +0000</pubDate>
      <link>https://dev.to/caraujo/dev-qa-aem-6-5-upgrade-5d7n</link>
      <guid>https://dev.to/caraujo/dev-qa-aem-6-5-upgrade-5d7n</guid>
      <description>&lt;p&gt;This phase of the process involves code related task efforts. You will need to analyze the libraries and dependencies that you need to update, and of course, all the coding refactor needed because of the upgrade.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Something that worked for me is to upgrade my local to 6.5 and then upgrade the code. Doing this I was able to identify dependencies that I was missing from my initial assessment.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Keep in mind that (at least in my scenario) there were many changes at AEM libraries, methods were deprecated, how to access the repository through code changed to have stronger security, which means that having a good idea of what your solution does, and doing pretty good testing is a key factor that will allow you to have a better outcome of this process phase.&lt;/p&gt;

&lt;p&gt;The substeps within this process are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a dedicated code branch&lt;/li&gt;
&lt;li&gt;Cleanup content in production&lt;/li&gt;
&lt;li&gt;Backup and roll down content from production to lower environments.&lt;/li&gt;
&lt;li&gt;Update codebase&lt;/li&gt;
&lt;li&gt;Align repository structure with 6.5&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sJ4aHyol--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5knbl7szvccacllooxh5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sJ4aHyol--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5knbl7szvccacllooxh5.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Create a dedicated code branch
&lt;/h2&gt;

&lt;p&gt;While you are working on the upgrade, it is always important to not mix your code from what is working on production (master branch) with the upgrade code. Created a dedicated branch that will help you and the other engineers perform the upgrade tasks without interfering with the production code.&lt;/p&gt;

&lt;p&gt;An ideal scenario is to have a code freeze while the upgrade happens.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code freeze date
&lt;/h2&gt;

&lt;p&gt;Having a code freeze period of time when the upgrade tasks are being executed is a best practice. I understand that this might not be possible in every scenario, although I do recommend doing your best to try to achieve this freeze date for your upgrade project.&lt;/p&gt;

&lt;p&gt;Having a code freeze, while allowing the development team has peace of mind about future code merging conflicts and issues. It could be terrible for the upgrade effort to be complete but then having to merge and resolve conflicts or issues again and again.&lt;/p&gt;

&lt;p&gt;This is not only a best practice for the development team, but this is also a best practice for the client. This way the client is also confident that things are properly tested and that no new issues or bugs will be generated on the existing functionality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Clean up content in production
&lt;/h2&gt;

&lt;p&gt;This is overall is a good practice. Content repository migrations take time and have the option of cleaning up content will be a good strategy for the upgrade effort.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In my scenario I had several sites that were not being used anymore, they were only present in authoring and removed from publish instances a couple of years ago.&lt;/p&gt;

&lt;p&gt;The DAM is also a good place to clean up. Getting reports of what assets are really being used will allow the content authors to take an educated decision of deleting or keeping assets. For this effort, I used groovy scripts that helped me generate an important list of assets.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Backup content and roll it down to lower environments
&lt;/h2&gt;

&lt;p&gt;Now that we have a cleaner content, it is time to roll down content from production to lower environments before any upgrade happens.&lt;/p&gt;

&lt;p&gt;Having the latest content on each environment will allow you to capture upgrade functionality inconsistencies or issues before you are too late in the process.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;There are many approaches to backup and move content from one environment to another. I really like using &lt;a href="https://github.com/TWCable/grabbit"&gt;grabbit&lt;/a&gt; since it is very flexible, fast, and reliable. If you have any other suggestions please leave it in the comments section.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Update code base
&lt;/h2&gt;

&lt;p&gt;This section is mostly covered in two phases. The first one is before your local is upgraded to 6.5, the second phase is after your local is under 6.5. and after you have deployed the updated code to your instance.&lt;/p&gt;

&lt;h3&gt;
  
  
  First phase
&lt;/h3&gt;

&lt;p&gt;Updating dependencies on your maven solution is the place where you need to start. Identify issues while triggering a build. Keep updating other dependencies, do this as a cycle until the solution builds correctly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Second phase
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;After doing the above, I accessed OSGI and went directly to bundles. In there I was able to determine if the bundles that I was deploying were active, or installed. This helped me to determine which other dependencies I needed to update before continuing.&lt;/p&gt;

&lt;p&gt;Something that I recommend as well is to take a close look at the log files. In there you will be able to identify a few things that will call your attention that need to be addressed for the upgrade.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Align with 6.5 Repository structure
&lt;/h2&gt;

&lt;p&gt;Since 6.2 there was been many changes at repository structure. Not only at the level of how OAK works, but also on where several OOTB and Custom features are stored.&lt;/p&gt;

&lt;p&gt;Some of this list are: blueprints, rolloutconfigs, tags, workflows, designs, contexthub, segments.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The thumb rule is: AEM product code will always be placed in /libs, which must not be overwritten by custom code. Custom code should be placed in /apps, /content, and /conf. The /etc folder should be used no more.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Once I complete this post series I am planning on creating a post that talks about completely of the repository content structure changes that I had to go for AEM 6.5 upgrade.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/caraujo/upgrading-aem-to-6-5-2i58"&gt;Parent Post&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aem</category>
      <category>adobe</category>
      <category>upgrade</category>
    </item>
    <item>
      <title>Process Breakdown (AEM 6.5 Upgrade)</title>
      <dc:creator>Carlos Araujo</dc:creator>
      <pubDate>Wed, 26 Aug 2020 22:25:11 +0000</pubDate>
      <link>https://dev.to/caraujo/process-breakdown-aem-6-5-upgrade-356n</link>
      <guid>https://dev.to/caraujo/process-breakdown-aem-6-5-upgrade-356n</guid>
      <description>&lt;p&gt;A good process is a key part of the upgrade, being able to create a very good breakdown of general activities, being able to identify inner activities helped me build and determine the different steps that I needed to follow for each instance, for each environment.&lt;/p&gt;

&lt;p&gt;This process is always a living document, my recommendation would be to draft an initial breakdown and keep removing/adding details as you move forward with the upgrade.&lt;/p&gt;

&lt;p&gt;The general steps that I came up with are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Upgrade Planning&lt;/li&gt;
&lt;li&gt;Development &amp;amp; QA&lt;/li&gt;
&lt;li&gt;Pre-upgrade Maintenance&lt;/li&gt;
&lt;li&gt;Upgrade Procedure&lt;/li&gt;
&lt;li&gt;Post Upgrade Checks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AT-m3oRH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5zr0ywturnjf7qbtjxwy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AT-m3oRH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5zr0ywturnjf7qbtjxwy.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Upgrade Planning
&lt;/h2&gt;

&lt;p&gt;For me, this section covers tasks that will allow me to understand the development effort for the upgrade.&lt;br&gt;
I have listed within it current versions of everything. This allowed me to identify if versions of different platforms will work with 6.5 or if they also need to be updated.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run pattern detector.&lt;/li&gt;
&lt;li&gt;Create a test plan.&lt;/li&gt;
&lt;li&gt;Components inventory.&lt;/li&gt;
&lt;li&gt;Platforms version inventory.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Run pattern detector
&lt;/h3&gt;

&lt;p&gt;Download and install package pd-all-aem65-1.0.zip this package. After install go to &lt;code&gt;/system/console/status-pattern-detector&lt;/code&gt; and analyze the results. This will allow you to assess the level of complexity of your upgrade.&lt;/p&gt;

&lt;p&gt;You will get a list of components that might be violating certain rules, features that are not compatible with 6.5. For more information on this go &lt;a href="https://docs.adobe.com/content/help/en/experience-manager-65/deploying/upgrading/pattern-detector.html"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create a test plan
&lt;/h3&gt;

&lt;p&gt;This test plan will allow you to test core AEM functionalities after each environment upgrade and also will allow you to test site components that are critical or could be prone to fail after the upgrade.&lt;/p&gt;

&lt;p&gt;For us, it was very useful to build three sets of test plans&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Core AEM functionality tests (i.e. blueprints, rolloutconfigs, i18n, tags, contexthub, etc)&lt;/li&gt;
&lt;li&gt;Test cases from a site visitor perspective.&lt;/li&gt;
&lt;li&gt;Test cases from an authoring perspective.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Components inventory
&lt;/h3&gt;

&lt;p&gt;We generated a dictionary of components and the number of instances within the site. This helped me understand which are key components that we need to test carefully while doing the upgrade, mainly if any of those components are using third party integrations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Platforms version inventory
&lt;/h3&gt;

&lt;p&gt;This is an important step within the &lt;strong&gt;upgrade planning&lt;/strong&gt;. This allowed me to identify if there was any inconsistency between environments, and it helped me identify and assess if apache and dispatcher needed an upgrade or not.&lt;/p&gt;

&lt;p&gt;The platforms/tools that I listed in the inventory are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;AEM&lt;/li&gt;
&lt;li&gt;Dispatcher&lt;/li&gt;
&lt;li&gt;Apache&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The above was listed for every environment, in my case Local, Dev, QA, UAT, Prod.&lt;/p&gt;

&lt;p&gt;This step allowed me to identify that I needed to include a dispatcher upgrade in my process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ngPcWCNu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b0h4lcezz9wvhvou7z10.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ngPcWCNu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b0h4lcezz9wvhvou7z10.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://dev.to/caraujo/dev-qa-aem-6-5-upgrade-5d7n"&gt;Next Post&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://dev.to/caraujo/upgrading-aem-to-6-5-2i58"&gt;Parent Post&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aem</category>
      <category>adobe</category>
      <category>upgrade</category>
    </item>
    <item>
      <title>Where to Start (AEM 6.5 Upgrade)</title>
      <dc:creator>Carlos Araujo</dc:creator>
      <pubDate>Wed, 26 Aug 2020 22:24:54 +0000</pubDate>
      <link>https://dev.to/caraujo/where-to-start-aem-6-5-upgrade-dpk</link>
      <guid>https://dev.to/caraujo/where-to-start-aem-6-5-upgrade-dpk</guid>
      <description>&lt;p&gt;Now while looking back to the process I followed for the upgrade, I can say that the first thing to do is to identify the approach to follow. Plain and simple, there are two approaches. In-place upgrade, fresh instance upgrade. There are many posts that talk about the advantages and disadvantages of each approach (&lt;em&gt;I won't go into those details here&lt;/em&gt;). Please read about it and take an educated decision on which one to follow based on your project.&lt;/p&gt;

&lt;p&gt;When I was going to make my decision, an architect told me that it depends on the repository, code, integrations, time. A lot of times, doing a small POC of the approach that will be taken is the best way to identify which one is the right one for your solution.&lt;/p&gt;

&lt;p&gt;This is how I ended up making the decision to go with an &lt;strong&gt;In-Place upgrade&lt;/strong&gt;, it suited the solution needs plus it is the recommended approach by Adobe.&lt;/p&gt;

&lt;p&gt;Once I had the approach, I had the 6.5 jar file/license, I was ready to build the team to perform it.&lt;br&gt;
Upgrades take time, although it is not at all a project where you can put several engineers to make it go faster, upgrades are 1-2 men job at most.&lt;/p&gt;

&lt;p&gt;Now that we have identified the approach, that we have the files ready for us, and that we have the team that will do it, is time for the planning around it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://dev.to/caraujo/process-breakdown-aem-6-5-upgrade-356n"&gt;Next Post - Process Breakdown&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;&lt;a href="https://dev.to/caraujo/upgrading-aem-to-6-5-2i58"&gt;Parent Post&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aem</category>
      <category>adobe</category>
      <category>upgrade</category>
    </item>
    <item>
      <title>Upgrading AEM to 6.5</title>
      <dc:creator>Carlos Araujo</dc:creator>
      <pubDate>Wed, 26 Aug 2020 22:24:25 +0000</pubDate>
      <link>https://dev.to/caraujo/upgrading-aem-to-6-5-2i58</link>
      <guid>https://dev.to/caraujo/upgrading-aem-to-6-5-2i58</guid>
      <description>&lt;p&gt;Recently I was involved in a project to upgrade AEM from version 6.2 to 6.5.&lt;/p&gt;

&lt;p&gt;As you can imagine there were several things to be considered for the upgrade. AEM has updated a lot of their features and libraries since 6.2, OAK repository changes, a bunch of /etc functionality relocations (&lt;em&gt;blueprints, rolloutconfigs, contexthub, segments, tags, designs, among others&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;On this series of posts, I want to describe the steps I followed to perform the In-Place upgrade. &lt;/p&gt;

&lt;p&gt;The first thing that I would like to say is: &lt;strong&gt;this is not a recipe&lt;/strong&gt;, this is just information on the approach I took.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;First takeaway: if you are in a similar upgrade situation, these posts might help you identify the approach that you could take to perform yours. I read a bunch of documentation, posts, and information, in my case I used different ideas from different sources to accomplish the goal.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  List of related posts: (Updated on August 28, 2020)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/caraujo/where-to-start-aem-6-5-upgrade-dpk"&gt;Where to Start (AEM 6.5 Upgrade)?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/caraujo/process-breakdown-aem-6-5-upgrade-356n"&gt;Process Breakdown (AEM 6.5 Upgrade)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/caraujo/dev-qa-aem-6-5-upgrade-5d7n"&gt;Development &amp;amp; QA (AEM 6.5 Upgrade)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Pre-upgrade Maintenance (Post in progress)&lt;/li&gt;
&lt;li&gt;Upgrade Procedure (Post in progress)&lt;/li&gt;
&lt;li&gt;Post-upgrade Checks (Post in progress)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aem</category>
      <category>adobe</category>
      <category>upgrade</category>
    </item>
  </channel>
</rss>
