<?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: zhengchang907</title>
    <description>The latest articles on DEV Community by zhengchang907 (@zhengchang907).</description>
    <link>https://dev.to/zhengchang907</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%2F754224%2F8900f690-ce78-426b-b321-c6637739535b.jpeg</url>
      <title>DEV Community: zhengchang907</title>
      <link>https://dev.to/zhengchang907</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zhengchang907"/>
    <language>en</language>
    <item>
      <title>CICD experience: Source-2-image and deploy to Oracle WebLogic Server on AKS</title>
      <dc:creator>zhengchang907</dc:creator>
      <pubDate>Wed, 08 Dec 2021 01:47:50 +0000</pubDate>
      <link>https://dev.to/zhengchang907/cicd-experience-source-2-image-and-deploy-to-oracle-weblogic-server-on-aks-3ne8</link>
      <guid>https://dev.to/zhengchang907/cicd-experience-source-2-image-and-deploy-to-oracle-weblogic-server-on-aks-3ne8</guid>
      <description>&lt;h3&gt;
  
  
  My Workflow
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/Azure-Samples/cargotracker-azure/blob/main/.github/workflows/updateCargoTracker.yml"&gt;Azure-Samples/cargotracker-azure#updateCargoTracker.yml&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

&lt;p&gt;Maintainer Must-Haves&lt;/p&gt;

&lt;h3&gt;
  
  
  Yaml File or Link to Code
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Azure-Samples"&gt;
        Azure-Samples
      &lt;/a&gt; / &lt;a href="https://github.com/Azure-Samples/cargotracker-azure"&gt;
        cargotracker-azure
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Azure-specific downstream for Cargo Tracker Jakarta EE sample app. The project demonstrates how you can develop applications with Jakarta EE using widely adopted architectural best practices like Domain-Driven Design (DDD).
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Eclipse Cargo Tracker - Applied Domain-Driven Design Blueprints for Jakarta EE&lt;/h1&gt;
&lt;p&gt;The project demonstrates how you can develop applications with Jakarta EE using widely adopted architectural best practices like Domain-Driven
Design (DDD). The project is directly based on the well known
original &lt;a href="http://dddsample.sourceforge.net" rel="nofollow"&gt;Java DDD sample application&lt;/a&gt;
developed by DDD pioneer Eric Evans' company Domain Language and the Swedish
software consulting company Citerus. The cargo example actually comes from
Eric Evans' seminal book on DDD. The original application is written in Spring
Hibernate and Jetty whereas the application is built on Jakarta EE.&lt;/p&gt;
&lt;p&gt;The application is an end-to-end system for keeping track of shipping cargo. It
has several interfaces described in the following sections.&lt;/p&gt;
&lt;p&gt;For further details on the project, please visit: &lt;a href="https://eclipse-ee4j.github.io/cargotracker/" rel="nofollow"&gt;https://eclipse-ee4j.github.io/cargotracker/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A slide deck introducing the
fundamentals of the project is available on the official Eclipse
Foundation &lt;a href="https://www.slideshare.net/Jakarta_EE/applied-domaindriven-design-blueprints-for-jakarta-ee" rel="nofollow"&gt;Jakarta EE SlideShare account&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Azure-Samples/cargotracker-azurecargo_tracker_cover.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vMdyuq9G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/Azure-Samples/cargotracker-azurecargo_tracker_cover.png" alt="Cargo Tracker cover"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
Getting Started&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://eclipse-ee4j.github.io/cargotracker/" rel="nofollow"&gt;project website&lt;/a&gt; has…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Azure-Samples/cargotracker-azure"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Additional Resources / Info
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Story behind it
&lt;/h4&gt;

&lt;p&gt;Real world Java EE on Azure requires industrial strength CI/CD. My team and I started building an example illustrating the path of modernizing a traditional Java EE application(WebLogic + PostgreSQL).&lt;/p&gt;

&lt;p&gt;We implemented a GitHub Actions workflow that compiles the Eclipse Cargo Tracker application source, builds the Docker image with help from the &lt;a href="https://oracle.github.io/weblogic-kubernetes-operator/"&gt;WebLogic Kubernetes Operator&lt;/a&gt; and uploads it an &lt;a href="https://azure.microsoft.com/en-us/services/container-registry/"&gt;Azure Container Registry&lt;/a&gt;. This image is then deployed to a WebLogic on Azure Kubernetes Service (AKS) environment as part of the CI/CD experience.&lt;/p&gt;

&lt;p&gt;This workflow serves as an end-to-end test for an Azure Marketplace offer that lets you easily deploy &lt;a href="https://aka.ms/wlsaks"&gt;WebLogic Server to Azure Kubernetes Service&lt;/a&gt;. To learn more about this and other offers for Java EE on Azure, please visit &amp;lt; &lt;a href="https://aka.ms/wls-aks-contactme"&gt;https://aka.ms/wls-aks-contactme&lt;/a&gt; &amp;gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  What’s interesting in our workflow
&lt;/h4&gt;

&lt;p&gt;We leveraged many existing GitHub Actions such as &lt;a href="https://github.com/actions/checkout"&gt;actions/checkout&lt;/a&gt;, &lt;a href="https://github.com/Azure/cli"&gt;azure/CLI&lt;/a&gt; and &lt;a href="https://github.com/Azure/login"&gt;azure/login&lt;/a&gt; to build our pipeline. The &lt;a href="https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#defaultsrun"&gt;built-in support for bash scripts&lt;/a&gt; provides all the flexibilities we needed to complete it.&lt;/p&gt;

&lt;p&gt;Our pipeline contains the following critical steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build the application.&lt;/li&gt;
&lt;li&gt;Upload the built artifact to an &lt;a href="https://docs.microsoft.com/en-us/azure/storage/common/storage-account-overview"&gt;Azure Storage Account&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Build image and upload to &lt;a href="https://azure.microsoft.com/en-us/services/container-registry/"&gt;Azure Container Registry&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Use the &lt;a href="https://github.com/oracle/weblogic-azure/blob/main/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep"&gt;ARM template behind the Azure Marketplace offer&lt;/a&gt; to update the cluster with the latest image.&lt;/li&gt;
&lt;li&gt;Verify all pods are updated.&lt;/li&gt;
&lt;li&gt;Verify the application is running at the latest version using &lt;a href="https://playwright.dev/"&gt;Playwright&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This pipeline takes many inputs because it requires all the Azure resources are created &amp;amp; configured before running it. We also have another pipeline &lt;a href="https://github.com/Azure-Samples/cargotracker-azure/blob/main/.github/workflows/setupWlsAks.yml"&gt;Azure-Samples/cargotracker-azure#setupWlsAks.yml&lt;/a&gt; to setup the required environment, these two pipelines combine together to provide a more complete DevOps experience.&lt;/p&gt;

&lt;h4&gt;
  
  
  A brief introduction to our work
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://www.oracle.com/java/weblogic/"&gt;Oracle WebLogic Server&lt;/a&gt; is a scalable, enterprise-ready Java application server. We are a team from Microsoft that works on bringing the Oracle WebLogic Server experience on Azure which includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://aka.ms/wlsaks"&gt;WebLogic Server on AKS&lt;/a&gt;&lt;/strong&gt;: The WebLogic Server on AKS offer automates provisioning an AKS cluster, the WebLogic Kubernetes Operator, WLS Docker images and the Azure Container Registry (ACR). The offer also supports configuring load balancing with Azure App Gateway or the Azure Load Balancer, easing database connectivity, publishing metrics to Azure Monitor as well as mounting Azure Files as Kubernetes Persistent Volumes. For more on this offer, please visit &amp;lt; &lt;a href="https://aka.ms/wlsaks"&gt;https://aka.ms/wlsaks&lt;/a&gt; &amp;gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://aka.ms/wlscluster"&gt;WebLogic Server on Virtual Machines&lt;/a&gt;&lt;/strong&gt;: The WebLogic Server on virtual machines offers automate provisioning virtual network, storage, and Linux resources, installing WLS, setting up security with a network security group, easing database connectivity, configuring load-balancing with App Gateway or Oracle HTTP Server, connecting to Azure Active Directory, enabling centralized logging via ELK as well as integrating distributed caching with Oracle Coherence. For more on this offer, please visit &amp;lt; &lt;a href="https://aka.ms/wlscluster"&gt;https://aka.ms/wlscluster&lt;/a&gt; &amp;gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;If you want to learn more about our offers or work closely on your migration scenarios with us, just go to this &lt;a href="https://azuremarketplace.microsoft.com/en-us/marketplace/apps/oracle.oraclelinux-wls-cluster?tab=Overview"&gt;CONTACT ME&lt;/a&gt; page and hit the button! Program managers, architects and engineers will reach back out to you shortly and initiate collaboration!&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Reference
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://github.com/features/actions"&gt;GitHub Actions&lt;/a&gt; makes it easy to develop a lightweight but powerful CI/CD experience for your code from GitHub.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/marketplace?query=Azure&amp;amp;type=actions"&gt;GitHub Actions for Azure&lt;/a&gt; are developed by Microsoft and designed to be used with Azure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Azure-Samples/cargotracker-azure"&gt;Eclipse Cargo Tracker&lt;/a&gt; is a project demonstrates how you can develop applications with Jakarta EE using widely adopted architectural best practices like Domain-Driven Design (DDD).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://playwright.dev/"&gt;Playwright&lt;/a&gt; is built to enable cross-browser web automation. And it can be easily introduced into a Java project using Maven.&lt;/p&gt;

</description>
      <category>actionshackathon21</category>
      <category>azure</category>
      <category>javaee</category>
    </item>
    <item>
      <title>Using Playwright in GitHub Actions</title>
      <dc:creator>zhengchang907</dc:creator>
      <pubDate>Thu, 18 Nov 2021 03:29:15 +0000</pubDate>
      <link>https://dev.to/zhengchang907/using-playwright-in-github-actions-2cmh</link>
      <guid>https://dev.to/zhengchang907/using-playwright-in-github-actions-2cmh</guid>
      <description>&lt;h1&gt;
  
  
  Story
&lt;/h1&gt;

&lt;p&gt;A few months ago, we started working on a project which demos a path of modernizing traditional Java application(WebLogic + PostgreSQL). And we implemented a pipeline that builds and deploys the &lt;a href="https://github.com/Azure-Samples/cargotracker-azure"&gt;Eclipse Cargo Tracker&lt;/a&gt; application to a WebLogic on Azure Kubernetes Service (&lt;a href="https://azure.microsoft.com/en-us/services/kubernetes-service/#overview"&gt;AKS&lt;/a&gt;) environment as part of the CI/CD experience.&lt;/p&gt;

&lt;p&gt;For the sake of completeness, in the pipeline, a final step of validating the deployed application is the latest version is necessary.&lt;/p&gt;

&lt;h1&gt;
  
  
  Our approach
&lt;/h1&gt;

&lt;p&gt;After researching around, we decided to add an invisible stamp in the index page of the Cargo Tracker. Every time we build the app, this stamp will be updated with an unique value. And then at the end of the pipeline, we add a validation step to run a Java Playwright application, which fetches the &lt;strong&gt;version string&lt;/strong&gt; from the deployed Cargo Tracker app, and compares it with the valued we pre-stored in earlier steps(Where new version string is generated and the app is not deployed).&lt;/p&gt;

&lt;p&gt;The steps are as follow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create the Playwright application
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;package&lt;/span&gt; &lt;span class="nn"&gt;com.microsoft.azure.javaee&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;com.microsoft.playwright.*&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FetchBuildVersion&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Playwright&lt;/span&gt; &lt;span class="n"&gt;playwright&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Playwright&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;create&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="nc"&gt;BrowserType&lt;/span&gt; &lt;span class="n"&gt;webkit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;playwright&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;webkit&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
      &lt;span class="nc"&gt;Browser&lt;/span&gt; &lt;span class="n"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;webkit&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;launch&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;BrowserType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;LaunchOptions&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;setHeadless&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
      &lt;span class="nc"&gt;Page&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;newPage&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
      &lt;span class="c1"&gt;// take first parameter as Cargo Tracker url&lt;/span&gt;
      &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;navigate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;]);&lt;/span&gt;

      &lt;span class="nc"&gt;ElementHandle&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;querySelector&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"xpath=/html/body/div[1]/div/div[2]/p"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

      &lt;span class="c1"&gt;// take second parameter as pre-stored version string&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;innerText&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;]))&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;RuntimeException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Build Version is not updated!"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Add property to Cargo Track called &lt;strong&gt;version string&lt;/strong&gt;, which is a combined string of &lt;strong&gt;Maven project version&lt;/strong&gt; and &lt;strong&gt;Maven project build time&lt;/strong&gt;. And every time the app is built, a new string will be generated.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# src/main/resources/org/eclipse/cargotracker/messages.properties&lt;/span&gt;
&lt;span class="nv"&gt;versionString&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;project&lt;/span&gt;&lt;span class="p"&gt;.version&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;project&lt;/span&gt;&lt;span class="p"&gt;.build.time&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Embed the version string into the index page
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- src/main/webapp/index.xhtml --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"container text-muted"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&amp;lt;h:outputText&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"#{messages.versionString}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;In the GitHub workflow, add step to query build version and store it as an environment variable.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build the app&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
    &lt;span class="s"&gt;echo "build the Cargo Tracker web app"&lt;/span&gt;
    &lt;span class="s"&gt;mvn clean install -PweblogicOnAks --file cargotracker/pom.xml&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Query version string for deployment verification&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
    &lt;span class="s"&gt;PROPERTY_FILE="cargotracker/target/cargo-tracker/WEB-INF/classes/org/eclipse/cargotracker/messages.properties"&lt;/span&gt;
    &lt;span class="s"&gt;PROP_KEY=versionString&lt;/span&gt;
    &lt;span class="s"&gt;deployVersion=$(cat $PROPERTY_FILE | grep "$PROP_KEY" | cut -d '=' -f 2)&lt;/span&gt;
    &lt;span class="s"&gt;echo "deployVersion=${deployVersion}" &amp;gt;&amp;gt; $GITHUB_ENV&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Add the step to call the Playwright application
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Verify that the app is update&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
    &lt;span class="s"&gt;# install dependencies&lt;/span&gt;
    &lt;span class="s"&gt;sudo apt-get install libegl1\&lt;/span&gt;
                      &lt;span class="s"&gt;libopus0\&lt;/span&gt;
                      &lt;span class="s"&gt;libwoff1\&lt;/span&gt;
                      &lt;span class="s"&gt;libharfbuzz-icu0\&lt;/span&gt;
                      &lt;span class="s"&gt;libgstreamer-plugins-base1.0-0\&lt;/span&gt;
                      &lt;span class="s"&gt;libgstreamer-gl1.0-0\&lt;/span&gt;
                      &lt;span class="s"&gt;libgstreamer-plugins-bad1.0-0\&lt;/span&gt;
                      &lt;span class="s"&gt;libopenjp2-7\&lt;/span&gt;
                      &lt;span class="s"&gt;libwebpdemux2\&lt;/span&gt;
                      &lt;span class="s"&gt;libenchant1c2a\&lt;/span&gt;
                      &lt;span class="s"&gt;libhyphen0\&lt;/span&gt;
                      &lt;span class="s"&gt;libgles2\&lt;/span&gt;
                      &lt;span class="s"&gt;gstreamer1.0-libav -y&lt;/span&gt;
    &lt;span class="s"&gt;appURL=http://${{ env.appGatewayURL }}/cargo-tracker/&lt;/span&gt;
    &lt;span class="s"&gt;cd cargotracker/src/test/aks/playwright-ui-test&lt;/span&gt;
    &lt;span class="s"&gt;mvn clean install&lt;/span&gt;
    &lt;span class="s"&gt;mvn exec:java -e -Dexec.mainClass=com.microsoft.azure.javaee.FetchBuildVersion -Dexec.args="'${appURL}' '${{ env.deployVersion }}'"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  A brief introduction to our work
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://www.oracle.com/java/weblogic/"&gt;Oracle WebLogic Server&lt;/a&gt; is a scalable, enterprise-ready Java application server. We are a team from Microsoft works on bringing the Oracle WebLogic Server experience on Azure which includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;WebLogic Server on AKS&lt;/strong&gt;: The WebLogic Server on AKS offer automates provisioning an AKS cluster, the WebLogic Kubernetes Operator, WLS Docker images and the Azure Container Registry (ACR). The offer also supports configuring load balancing with Azure App Gateway or the Azure Load Balancer, easing database connectivity, publishing metrics to Azure Monitor as well as mounting Azure Files as Kubernetes Persistent Volumes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;WebLogic Server on Virtual Machines&lt;/strong&gt;: The WebLogic Server on virtual machines offers automate provisioning virtual network, storage, and Linux resources, installing WLS, setting up security with a network security group, easing database connectivity, configuring load-balancing with App Gateway or Oracle HTTP Server, connecting to Azure Active Directory, enabling centralized logging via ELK as well as integrating distributed caching with Oracle Coherence.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;If you want to learn more about our offers or work closely on your migration scenarios with us, just go to this &lt;a href="https://azuremarketplace.microsoft.com/en-us/marketplace/apps/oracle.oraclelinux-wls-cluster?tab=Overview"&gt;CONTACT ME&lt;/a&gt; page and hit the button! Program managers, architects and engineers will reach back out to you shortly and initiate collaboration!&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Reference
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://playwright.dev/"&gt;Playwright&lt;/a&gt; is built to enable cross-browser web automation. And it can be easily introduced into a Java project using Maven.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/features/actions"&gt;GitHub Actions&lt;/a&gt; makes it easy to develop a lightweight but powerful CI/CD experience for your code from GitHub.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Azure-Samples/cargotracker-azure"&gt;Eclipse Cargo Tracker&lt;/a&gt; is a project demonstrates how you can develop applications with Jakarta EE using widely adopted architectural best practices like Domain-Driven Design (DDD). &lt;strong&gt;This is the repo contains the pipeline described above&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>playwright</category>
      <category>github</category>
      <category>azure</category>
      <category>weblogic</category>
    </item>
  </channel>
</rss>
