exoplatform/ci

By exoplatform

Updated 4 days ago

Some containers used in eXo CI environment

Image
Integration & Delivery
1

500K+

eXo Docker Images for CI

Docker Stars - Docker Pulls

The aim of this repository is to give the configuration to build all eXo Platform components in Docker containers for Development and Continous Integration purpose.

It contains Dockerfiles, Tests and configuration for the following CI Images:

ImageJDKPythonGCCBuild toolTests
exoplatform/ci:basen/a2.7 & 34.8n/agoss.yaml
exoplatform/ci:base-alpinen/a2.7 & 34.8n/agoss.yaml
exoplatform/ci:jdk61.6.0_452.7 & 34.8n/agoss.yaml
exoplatform/ci:jdk71.7.0_802.7 & 34.8n/agoss.yaml
exoplatform/ci:jdk81.8.0_1812.7 & 34.8n/agoss.yaml
exoplatform/ci:jdk1111.0.192.7 & 34.8n/agoss.yaml
exoplatform/ci:jdk1717.0.72.7 & 34.8n/agoss.yaml
exoplatform/ci:jdk17-alpine17.0.72.7 & 34.8n/agoss.yaml
exoplatform/ci:jdk8-gradle21.8.0_1812.7 & 34.8Gradle 2.14goss.yaml
exoplatform/ci:jdk8-gradle2-android1.8.0_1812.7 & 34.8Gradle 2.14 / Android 23/24goss.yaml
exoplatform/ci:jdk8-gradle41.8.0_1812.7 & 34.8Gradle 4.1goss.yaml
exoplatform/ci:jdk8-gradle4-android1.8.0_1812.7 & 34.8Gradle 4.1 / Android 23/24/25/26/27goss.yaml
exoplatform/ci:jdk8-gradle61.8.0_1812.7 & 34.8Gradle 6.1goss.yaml
exoplatform/ci:jdk8-gradle6-android1.8.0_1812.7 & 34.8Gradle 6.1 / Android 23/24/25/26/27goss.yaml
exoplatform/ci:jdk6-maven301.6.0_452.7 & 34.8Maven 3.0.5goss.yaml
exoplatform/ci:jdk6-maven321.6.0_452.7 & 34.8Maven 3.2.5goss.yaml
exoplatform/ci:jdk7-maven301.7.0_802.7 & 34.8Maven 3.0.5goss.yaml
exoplatform/ci:jdk7-maven321.7.0_802.7 & 34.8Maven 3.2.5goss.yaml
exoplatform/ci:jdk8-maven301.8.0_1812.7 & 34.8Maven 3.0.5goss.yaml
exoplatform/ci:jdk8-maven321.8.0_1812.7 & 34.8Maven 3.2.5goss.yaml
exoplatform/ci:jdk8-maven331.8.0_1812.7 & 34.8Maven 3.3.9goss.yaml
exoplatform/ci:jdk8-maven351.8.0_1812.7 & 34.8Maven 3.5.4goss.yaml
exoplatform/ci:jdk11-maven3211.0.192.7 & 34.8Maven 3.2.5goss.yaml
exoplatform/ci:jdk11-maven3311.0.192.7 & 34.8Maven 3.3.9goss.yaml
exoplatform/ci:jdk11-maven3511.0.192.7 & 34.8Maven 3.5.4goss.yaml
exoplatform/ci:jdk11-maven3611.0.192.7 & 34.8Maven 3.6.3goss.yaml
exoplatform/ci:jdk11-maven3811.0.192.7 & 34.8Maven 3.8.8goss.yaml
exoplatform/ci:jdk11-mavend0811.0.192.7 & 34.8Mavend 0.8.2goss.yaml
exoplatform/ci:jdk17-maven3617.0.72.7 & 34.8Maven 3.6.3goss.yaml
exoplatform/ci:jdk17-maven3817.0.72.7 & 34.8Maven 3.8.8goss.yaml
exoplatform/ci:jdk17-mavend0817.0.72.7 & 34.8Mavend 0.8.2goss.yaml
exoplatform/ci:jdk17-mavend0917.0.72.7 & 34.8Mavend 0.9.0goss.yaml
exoplatform/ci:jdk17-maven3917.0.72.7 & 34.8Maven 3.9.2goss.yaml
exoplatform/ci:jdk17-maven39-alpine17.0.72.7 & 34.8Maven 3.9.2goss.yaml

Overview

This diagram show an overview of the inheritance in eXo CI Docker images:

Image of Yaktocat

How to execute tests

To run tests, you have to install dgoss

You can build and test all images by running the script:

$ ./test_all_images.sh

If you want to execute test on a specific Docker image:

$ cd maven/jdk7-maven32/tests
$ ./test_image.sh

INFO: Starting docker container
INFO: Container ID: 59897f6f
INFO: Sleeping for 0.2
INFO: Running Tests
Title: Validating the presence of eXo GLOBAL settings file
File: /usr/share/maven/conf/settings.xml: exists: matches expectation: [true]
Title: Validating the presence Maven repository folder
File: /home/ciagent/.m2/repository: exists: matches expectation: [true]
Title: Validating the absence of eXo USER settings file
File: /home/ciagent/.m2/settings.xml: exists: matches expectation: [false]
Title: Check that git is installed
Package: git: installed: matches expectation: [true]
Command: mvn --version: exit-status: matches expectation: [0]
Command: mvn --version: stdout: matches expectation: [3.2.5 1.7.0 Default locale: en_US, platform encoding: UTF-8]


Total Duration: 0.650s
Count: 6, Failed: 0, Skipped: 0
INFO: Deleting container

real    0m2.929s
user    0m0.064s
sys     0m0.288s

How to use a eXo CI Docker Image

Basic Example with JDK7 - Maven 3.0
$ cd my-project
$ docker run --name=my-project-build -it -v $(pwd):/srv/ciagent/workspace \
     -v ~/.m2/repository:/home/ciagent/.m2/repository \
     -v ~/.m2/settings.xml:/home/ciagent/.m2/settings.xml \
     exoplatform/ci:jdk7-maven30 clean package
Advanced example with JDK8 - Maven 3.2 and Release Profile
$ cd my-project
$ docker run --name=my-project-build -it -v $(pwd):/srv/ciagent/workspace \
     -v ~/.m2/repository:/home/ciagent/.m2/repository \
     -v ~/.m2/settings.xml:/home/ciagent/.m2/settings.xml \
     -v ~/.gnupg/pubring.gpg:/home/ciagent/.gnupg/pubring.gpg:ro \
     -v ~/.gnupg/secring.gpg:/home/ciagent/.gnupg/secring.gpg:ro \
     -v ~/.gnupg/gpg.conf:/home/ciagent/.gnupg/gpg.conf:ro \
     exoplatform/ci:jdk8-maven32 install -Prelease

How to use eXo Puppet Docker Image

$ cd my-project
$ docker run --name puppet-validation -it -v ${PWD}:/srv/ciagent/workspace \
      exoplatform/ci:puppet

You can specify the -u option to force the modules update via r10k Example :

$ docker run --name puppet-validation -it -v ${PWD}:/srv/ciagent/workspace \
      exoplatform/ci:puppet -u

XMLStarlet

XMLStarlet is a set of command line utilities (tools) which can be used to transform, query, validate, and edit XML documents and files using simple set of shell commands in similar way it is done for plain text files using UNIX grep, sed, awk, diff, patch, join, etc commands.

At eXo, we use it to update Maven POM XML files for FB and Translation process.

examples:

$ cd /tmp/xmlstarlet
$ wget https://raw.githubusercontent.com/exoplatform/maven-parent-pom/develop/pom.xml
$ docker run -it --rm --name=xmlstartlet  -v $(pwd):/srv/ciagent/workspace --entrypoint=/bin/bash  exoplatform/ci:jdk8-maven32

# Update POM version from X-SNAPSHOT to X-translation-SNAPSHOT
ciagent@b32b684a1d6b:/srv/ciagent/workspace$ xmlstarlet ed --inplace -N pom=http://maven.apache.org/POM/4.0.0 \
  -u '/pom:project/pom:version[contains(text(), "-SNAPSHOT")]' \
  -x "concat(substring-before(.,'-SNAPSHOT'), '-translation-SNAPSHOT')" \
  pom.xml

# Update all POMs files in a Maven reactor project
ciagent@b32b684a1d6b:/srv/ciagent/workspace$ find . -name pom.xml | xargs -t -n 1 xmlstarlet ed -P --inplace -N pom=http://maven.apache.org/POM/4.0.0 -u '/pom:project/pom:version[contains(text(), "-SNAPSHOT")]' -x "concat(substring-before(.,'-SNAPSHOT'), '-translation-SNAPSHOT')"

Developer configuration

Configure your .bash_profile

In order to quickly run build with different stack (Maven and JDK), you can configure your .bash_profile file with the following alias:

#!/bin/bash
# Run Maven commands in Containers

c-mvn(){
      mvnInContainer "exoplatform/ci:jdk8-maven33" "$@"
}
jdk8mvn32(){
      mvnInContainer "exoplatform/ci:jdk8-maven32" "$@"
}

jdk8mvn30(){
      mvnInContainer "exoplatform/ci:jdk8-maven30" "$@"
}

jdk7mvn32(){
      mvnInContainer "exoplatform/ci:jdk7-maven32" "$@"
}

jdk7mvn30(){
      mvnInContainer "exoplatform/ci:jdk7-maven30" "$@"
}

jdk6mvn30(){
      mvnInContainer "exoplatform/ci:jdk6-maven30" "$@"
}

# Run Maven commands in a container
mvnInContainer(){
      local dockerImage=$1

      docker run --rm \
        -v $(pwd):/srv/ciagent/workspace \
        -v ~/.gnupg/gpg.conf:/home/ciagent/.gnupg/gpg.conf:ro \
        -v ~/.gnupg/pubring.gpg:/home/ciagent/.gnupg/pubring.gpg:ro \
        -v ~/.gnupg/secring.gpg:/home/ciagent/.gnupg/secring.gpg:ro \
        -v ~/.gnupg/trustdb.gpg:/home/ciagent/.gnupg/trustdb.gpg:ro \
        -v ~/.gnupg:/home/ciagent/.gnupg \
        -v ~/.m2/repository:/home/ciagent/.m2/repository \
        -v ~/.m2/settings.xml:/home/ciagent/.m2/settings.xml \
        --workdir /srv/ciagent/workspace \
        ${dockerImage} "${@:2}"
}
puppet_validate(){
docker run --name puppet-validation -it -v ${PWD}:/srv/ciagent/workspace \
      exoplatform/ci:puppet $*
}
Build with the right configuration
$ source ~/.bash_profile
$ cd my-project
$ jdk8mvn32 clean package

Docker Pull Command

docker pull exoplatform/ci