Openshift git источник с Docker файлом - PullRequest
0 голосов
/ 14 апреля 2020

Возможно ли иметь java репозиторий исходного кода в Git и иметь Dockerfile в каталоге root репозитория Git, так что после сборки артефактов maven openshift будет использовать предоставленный Docker файл для создания docker изображения?

Я добрался до постройки артефактов Maven, но после этого, кажется, обрабатывается S2I.

Обновление Я использую openshift Online, бесплатную версию.

Код - это многомодульный проект Maven.

Свойства файлов также есть в целевом файле.

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

Это абсолютно возможно, используя цепочечные сборки .

В частности, вы выполняете сборку S2I из репозитория GitHub

apiVersion: v1
kind: BuildConfig
metadata:
  name: artifact-build
spec:
  output:
    to:
      kind: ImageStreamTag
      name: artifact-image:latest
  source:
    git:
      uri: https://github.com/openshift/openshift-jee-sample.git
  strategy:
    sourceStrategy:
      from:
        kind: ImageStreamTag
        name: wildfly:10.1
        namespace: openshift

И затем создать цепочечную сборку, которая использует Docker сборку

apiVersion: v1
kind: BuildConfig
metadata:
  name: image-build
spec:
  output:
    to:
      kind: ImageStreamTag
      name: image-build:latest
  source:
    dockerfile: |-
      FROM jee-runtime:latest
      COPY ROOT.war /deployments/ROOT.war
    images:
    - from: 
        kind: ImageStreamTag
        name: artifact-image:latest
      paths: 
      - sourcePath: /wildfly/standalone/deployments/ROOT.war
        destinationDir: "."
  strategy:
    dockerStrategy:
      from: 
        kind: ImageStreamTag
        name: jee-runtime:latest
  triggers:
  - imageChange: {}
    type: ImageChange
0 голосов
/ 17 апреля 2020

Я нашел причину root, но здесь были и другие вопросы. Отметим ниже, чтобы прояснить ситуацию.

  • В многомодульном проекте целевой каталог не находится внутри каталога root, поэтому OpenShift S2I не видит файл jar, это была первоначальная проблема.

    Исправлено добавление переменной среды в конфигурацию сборки с целевой папкой enter image description here

  • Однако, если вам нужны какие-либо свойства файлы, которые находятся в целевом каталоге для копирования вместе с jar-файлом, вы должны скопировать его в самом pom-файле в каталог / deploy. Добавьте профиль openshift следующим образом и выполните копирование.

    <profiles>
    <profile>
        <!-- When built in OpenShift the 'openshift' profile will be used when 
            invoking mvn. -->
        <!-- Use this profile for any OpenShift specific customization your app 
            will need. -->
        <id>openshift</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
            <resources>
                <resource>
                    <filtering>true</filtering><!-- if it is neccessary -->
                    <directory>${project.basedir}/src/main/resources</directory><!-- from -->
                    <targetPath>/deployments</targetPath><!-- to adding ARTIFACT_DIR on openshift only finds the jar file but not the prop, so copy it manually like this-->
                    <includes><!-- what -->
                        <include>*.properties</include>
                        <include>Dockerfile</include>
                    </includes>
                </resource>
            </resources>
        </build>
    </profile>
    

  • И последний момент, который следует принять, заключается в том, что, поскольку это в бесплатном плане Openshift, стратегия Docker не допускается. Это даст следующее сообщение.

    Сборки со стратегией docker запрещены в этом кластере. Однако, если требуется способ на основе docker, все же это можно сделать с помощью инструмента командной строки o c.

Но концепция цепных сборок, упомянутая @Will Gordon, действительно важна. В моем случае нормальная сборка составляет 250 МБ, так как у нее тоже будет м2. Но с цепочечной сборкой, артефакт копирования которой создавался из начальной сборки во вторичную развертываемую сборку, я смог уменьшить размер образа до 200 МБ.

...