Generate onap images locally on ARM architecture 82/130082/2
authorliamfallon <liam.fallon@est.tech>
Sun, 31 Jul 2022 18:12:28 +0000 (19:12 +0100)
committerliamfallon <liam.fallon@est.tech>
Mon, 22 Aug 2022 16:22:12 +0000 (17:22 +0100)
The defailt ONAP base images are generated for X86 64 architecture. On
ARM architecture, these base images cannot be used locally because they
don't run properly in Docker on ARM architecture. Docker images based on
these images are also forced to X86 64 architecure.

In order to run the Policy Framework locally on a computer with ARM
architecture such as an Apple M1 Macbook, local Docker images should be
built that use ARM archtiecture.

The changes in this commit introduce a profile in the POMs for the
POLICY Framework base images. This profile is triggered only on builds
running on ARM architecture.

This new profile builds the onap-java and onap-pthon base images on ARM
architeclture locally when the build is run on a machine with ARM
architecture.

- The onap-java base image docker file does not build on ARM
  architecture becasue its base image (an Alpine version with Java 11
  preinstalled). Therefore, for this base image, a Dockerfile is
  introduced that uses the Alpine base image and adds Java 11.
- The onap-python image docker file does build on ARM architecture so
  the repo is simply checked out and built on ARM architecture

Once these ARM based ONAP base images are available locally, the rest
of the docker images in the Policy Framework build fine on a machine
with ARM architecture, and can be used to run docker-compose
compositions such as CSITs.

Issue-ID: POLICY-4287
Change-Id: I1938e232f6457f7ad1c18a0952c65fdee04d169b
Signed-off-by: liamfallon <liam.fallon@est.tech>
policy-jdk/alpine/pom.xml
policy-jdk/alpine/src/main/docker/Dockerfile
policy-jre/alpine/pom.xml
policy-jre/alpine/src/main/docker/Dockerfile

index d5f1e3c..c8e1077 100644 (file)
@@ -20,8 +20,7 @@
   ============LICENSE_END=========================================================
 -->
 
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
     <modelVersion>4.0.0</modelVersion>
 
 
     <properties>
         <docker.jdk.imagename>onap/policy-jdk-alpine</docker.jdk.imagename>
+        <integration.python.name>onap/integration-python</integration.python.name>
+        <integration.python.version>10.1.0</integration.python.version>
     </properties>
 
+    <profiles>
+        <profile>
+            <!-- This profile is activated on Apple M1 architecture to generate the ONAP base Java image locally -->
+            <id>baseImage</id>
+            <activation>
+                <os>
+                    <arch>aarch64</arch>
+                </os>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-scm-plugin</artifactId>
+                        <version>1.13.0</version>
+                        <dependencies>
+                            <dependency>
+                                <groupId>org.codehaus.plexus</groupId>
+                                <artifactId>plexus-utils</artifactId>
+                                <version>3.4.2</version>
+                            </dependency>
+                            <dependency>
+                                <groupId>org.apache.maven.scm</groupId>
+                                <artifactId>maven-scm-provider-gitexe</artifactId>
+                                <version>1.13.0</version>
+                            </dependency>
+                        </dependencies>
+                        <configuration>
+                            <connectionType>connection</connectionType>
+                            <checkoutDirectory>src/main/resources/meta</checkoutDirectory>
+                        </configuration>
+                        <executions>
+                            <execution>
+                                <id>checkout-onap-python</id>
+                                <phase>validate</phase>
+                                <configuration>
+                                    <connectionUrl>scm:git:https://gerrit.onap.org/r/integration/docker/onap-python</connectionUrl>
+                                    <checkoutDirectory>${project.build.directory}/onap-python</checkoutDirectory>
+                                </configuration>
+                                <goals>
+                                    <goal>checkout</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
+                        <groupId>io.fabric8</groupId>
+                        <artifactId>docker-maven-plugin</artifactId>
+
+                        <executions>
+                            <execution>
+                                <id>generate-python-image</id>
+                                <phase>initialize</phase>
+                                <configuration>
+                                    <verbose>true</verbose>
+                                    <apiVersion>1.23</apiVersion>
+                                    <pullRegistry>${docker.pull.registry}</pullRegistry>
+                                    <pushRegistry>${docker.push.registry}</pushRegistry>
+                                    <images>
+                                        <image>
+                                            <name>${integration.python.name}</name>
+                                            <build>
+                                                <cleanup>try</cleanup>
+                                                <contextDir>${project.build.directory}/onap-python</contextDir>
+                                                <dockerFile>Dockerfile</dockerFile>
+                                                <tags>
+                                                    <tag>${integration.python.version}</tag>
+                                                    <tag>${integration.python.version}-${maven.build.timestamp}</tag>
+                                                    <tag>${project.docker.latest.minmax.tag.version}</tag>
+                                                </tags>
+                                            </build>
+                                        </image>
+                                    </images>
+                                </configuration>
+                                <goals>
+                                    <goal>build</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+
     <build>
         <finalName>${project.artifactId}-${project.version}</finalName>
         <plugins>
                                     <tag>${project.version}-${maven.build.timestamp}</tag>
                                     <tag>${project.docker.latest.minmax.tag.version}</tag>
                                 </tags>
+                                <args>
+                                    <INTEGRATION_PYTHON_NAME>${integration.python.name}</INTEGRATION_PYTHON_NAME>
+                                    <INTEGRATION_PYTHON_VERSION>${integration.python.version}</INTEGRATION_PYTHON_VERSION>
+                                </args>
                             </build>
                         </image>
                     </images>
                 <executions>
                     <execution>
                         <id>clean-images</id>
-                        <phase>pre-clean</phase>
+                        <phase>prepare-jdk-package</phase>
                         <goals>
                             <goal>remove</goal>
                         </goals>
                     </execution>
 
                     <execution>
-                        <id>generate-images</id>
-                        <phase>generate-sources</phase>
+                        <id>generate-jdk-images</id>
+                        <phase>package</phase>
                         <goals>
                             <goal>build</goal>
                         </goals>
                     </execution>
 
                     <execution>
-                        <id>push-images</id>
+                        <id>push-jdk-images</id>
                         <phase>deploy</phase>
                         <goals>
                             <goal>build</goal>
             </plugin>
         </plugins>
     </build>
-</project>
+</project>
\ No newline at end of file
index c6c492b..a8f84c0 100644 (file)
 # $JAVA_HOME is set to /usr/lib/jvm/java-11-openjdk
 # more details at https://hub.docker.com/_/openjdk
 
-FROM onap/integration-python:10.1.0
+ARG INTEGRATION_PYTHON_NAME=${INTEGRATION_PYTHON_NAME}
+ARG INTEGRATION_PYTHON_VERSION=${INTEGRATION_PYTHON_VERSION}
+
+FROM ${INTEGRATION_PYTHON_NAME}:${INTEGRATION_PYTHON_VERSION}
 
 LABEL maintainer="Policy Team"
 LABEL org.opencontainers.image.title="Policy JDK Alpine"
index fb24df6..197fb19 100644 (file)
@@ -20,8 +20,7 @@
   ============LICENSE_END=========================================================
 -->
 
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
     <modelVersion>4.0.0</modelVersion>
 
 
     <properties>
         <docker.jre.imagename>onap/policy-jre-alpine</docker.jre.imagename>
+        <integration.java.name>onap/integration-java11</integration.java.name>
+        <integration.java.version>9.0.0</integration.java.version>
     </properties>
 
+    <profiles>
+        <profile>
+            <!-- This profile is activated on Apple M1 architecture to generate the ONAP base images locally -->
+            <id>baseImage</id>
+            <activation>
+                <os>
+                    <arch>aarch64</arch>
+                </os>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>io.fabric8</groupId>
+                        <artifactId>docker-maven-plugin</artifactId>
+
+                        <executions>
+                            <execution>
+                                <id>generate-base-image</id>
+                                <phase>initialize</phase>
+                                <configuration>
+                                    <verbose>true</verbose>
+                                    <apiVersion>1.23</apiVersion>
+                                    <pullRegistry>${docker.pull.registry}</pullRegistry>
+                                    <pushRegistry>${docker.push.registry}</pushRegistry>
+                                    <images>
+                                        <image>
+                                            <name>${integration.java.name}</name>
+                                            <build>
+                                                <cleanup>try</cleanup>
+                                                <dockerFile>BareAlpine.Dockerfile</dockerFile>
+                                                <tags>
+                                                    <tag>${integration.java.version}</tag>
+                                                    <tag>${integration.java.version}-${maven.build.timestamp}</tag>
+                                                    <tag>${project.docker.latest.minmax.tag.version}</tag>
+                                                </tags>
+                                            </build>
+                                        </image>
+                                    </images>
+                                </configuration>
+                                <goals>
+                                    <goal>build</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+
     <build>
         <finalName>${project.artifactId}-${project.version}</finalName>
         <plugins>
                 <version>2.1.1</version>
                 <executions>
                     <execution>
-                        <phase>validate</phase>
+                        <phase>prepare-package</phase>
                         <goals>
                             <goal>execute</goal>
                         </goals>
                                     <tag>${project.version}-${maven.build.timestamp}</tag>
                                     <tag>${project.docker.latest.minmax.tag.version}</tag>
                                 </tags>
+                                <args>
+                                    <INTEGRATION_JAVA_NAME>${integration.java.name}</INTEGRATION_JAVA_NAME>
+                                    <INTEGRATION_JAVA_VERSION>${integration.java.version}</INTEGRATION_JAVA_VERSION>
+                                </args>
                             </build>
                         </image>
                     </images>
 
                 <executions>
                     <execution>
-                        <id>clean-images</id>
-                        <phase>pre-clean</phase>
+                        <id>clean-jre-image</id>
+                        <phase>prepare-package</phase>
                         <goals>
                             <goal>remove</goal>
                         </goals>
                     </execution>
 
                     <execution>
-                        <id>generate-images</id>
-                        <phase>generate-sources</phase>
+                        <id>generate-jre-image</id>
+                        <phase>package</phase>
                         <goals>
                             <goal>build</goal>
                         </goals>
                     </execution>
 
                     <execution>
-                        <id>push-images</id>
+                        <id>push-jre-image</id>
                         <phase>deploy</phase>
                         <goals>
                             <goal>build</goal>
             </plugin>
         </plugins>
     </build>
-</project>
+</project>
\ No newline at end of file
index 0d28b22..d4fed90 100644 (file)
 # $JAVA_HOME is set to /usr/lib/jvm/java-11-openjdk
 # more details at https://hub.docker.com/_/openjdk
 
-FROM onap/integration-java11:9.0.0
+ARG INTEGRATION_JAVA_NAME=${INTEGRATION_JAVA_NAME}
+ARG INTEGRATION_JAVA_VERSION=${INTEGRATION_JAVA_VERSION}
+
+FROM ${INTEGRATION_JAVA_NAME}:${INTEGRATION_JAVA_VERSION}
 
 LABEL maintainer="Policy Team"
 LABEL org.opencontainers.image.title="Policy JRE Alpine"