Несколько развертывания в знатоке

Если у вас действительно есть проблема из-за локальных изменений в Readme.Rmd, вы можете игнорировать эти изменения с помощью:

git update-index --assume-unchanged -- Readme.Rmd

Затем проверьте еще раз, если ваша проблема сохраняется.

9
задан Mauli 11 March 2009 в 15:51
поделиться

4 ответа

Я не думаю поддержки знатока, развертывающиеся в несколько репозиториев для единственного профиля, но возможно представляет, мог изменить идентификатор и URL репозитория.

  <distributionManagement>
    <repository>
      <id>${repo-id}</id>
      <name>${repo-name}</name>
      <url>${repo-url}</url>
    </repository>
  </distributionManagement>

Развертывание знатока

Затем используйте профили для выбора который repo развернуться к:

<profiles>
  <profile>
    <id>repo1</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
      <repo-id>repo1</repo-id>
      <repo-name>Repo1 Name </repo-name>
      <repo-url>http://url.com/maven2</repo-url>
    </properties>
  </profile>
  <profile>
    <id>repo2</id>
    <properties>
      <repo-id>repo2</repo-id>
      <repo-name>Repo2 Name </repo-name>
      <repo-url>http://url2.com/maven2</repo-url>
    </properties>
  </profile>
</profiles>

Профили знатока

12
ответ дан 4 December 2019 в 13:49
поделиться

Artifactory действительно имеет автоматическую функцию экспорта. Из документации:

Можно автоматически и периодически создавать резервную копию целой системы Artifactory. Процесс резервного копирования создает каталог с меткой времени (или zip-файл) в целевом резервном dir и в основном идентичен выполнению полного системного экспорта с метаданными. [...] Каждое резервное копирование может иметь свое собственное расписание и исключило определенные репозитории [...]

Содержание резервного копирования (при извлечении) находится в стандартном формате Знатока и может быть загружено в любой внешний репозиторий Знатока [...]

Поддержки Artifactory, создающие резервную копию инкрементно к тому же целевому каталогу (названный "текущим") в целевом резервном dir. Этот вид резервного копирования только пишет дельты в выходной dir, приводя к чрезвычайно быстрым резервным копиям.

Не то, что точно, в чем Вы нуждаетесь? Для передачи файлов можно или смонтировать общий каталог к удаленному серверу и сделать резервное копирование там или сделать резервное копирование локально и затем rsync это.

0
ответ дан 4 December 2019 в 13:49
поделиться

Я думаю в Artifactory, по умолчанию, он поддерживает различные логические репозитории для загрузки снимков и неснимков. Используя полномочия, можно сделать репозиторий снимка видимым только некоторым.

Если это не достаточно, другое решение, которое работает с Artifactory 2.0, состоит в том, чтобы сделать, чтобы Artifactory использовал базу данных MySQL, которая делает асинхронную репликацию к другой базе данных MySQL, которая в свою очередь читается отдельной установкой Artifactory. Если это - слишком реальное время, у Вас может просто быть две различных установки, которые делают обновления на основе бизнес-правил.

0
ответ дан 4 December 2019 в 13:49
поделиться

Если вы хотите использовать настраиваемый подключаемый модуль, вы можете настроить Maven для развертывания в списке «зеркальных» расположений одновременно со стандартным развертыванием. Я бы рекомендовал определить это в профиле, чтобы вы могли контролировать, какие развертывания зеркалируются (это может быть нецелесообразно делать это при каждой сборке).

Чтобы определить новый плагин, вам необходимо создать новый проект Maven и указать POM имеет упаковку maven-plugin :

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>name.seller.rich</groupId>
  <artifactId>maven-mirror-plugin</artifactId>
  <packaging>maven-plugin</packaging>
  <version>0.0.1</version>
  <dependencies>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-plugin-api</artifactId>
      <version>2.2.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-deploy-plugin</artifactId>
      <version>2.4</version>
    </dependency>
  </dependencies>
</project>

В src / main / java определите Mojo. В приведенном ниже коде объявляется «зеркальная» цель, требуется список элементов mirrorRepository (содержащий repositoryId и url) для зеркалирования развертывания артефакта. Плагин использует тот же подход к развертыванию, что и maven-deploy-plugin, и принимает большинство тех же параметров.

Обратите внимание, что вам все равно нужно определить сервер в ваших настройках. xml для каждого репозитория с соответствующими разрешениями на развертывание, иначе сборка завершится неудачно!

package name.seller.rich;

import java.io.File;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.deployer.ArtifactDeployer;
import org.apache.maven.artifact.deployer.ArtifactDeploymentException;
import org.apache.maven.artifact.metadata.ArtifactMetadata;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.artifact.ProjectArtifactMetadata;

/**
 * @goal mirror
 * @phase deploy
 */
public class MirrorMojo extends AbstractMojo {
    /**
     * @parameter expression=
     *            "${component.org.apache.maven.artifact.deployer.ArtifactDeployer}"
     * @required
     * @readonly
     */
    private ArtifactDeployer deployer;

    /**
     * Map that contains the layouts
     * 
     * @component role=
     *            "org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout"
     */
    private Map repositoryLayouts;

    /**
     * Component used to create a repository
     * 
     * @component
     */
    private ArtifactRepositoryFactory repositoryFactory;

    /**
     * The type of remote repository layout to deploy to. Try <i>legacy</i> for
     * a Maven 1.x-style repository layout.
     * 
     * @parameter expression="${repositoryLayout}" default-value="default"
     * @required
     */
    private String repositoryLayout;

    /**
     * Parameter used to update the metadata to make the artifact as release.
     * 
     * @parameter expression="${updateReleaseInfo}" default-value="false"
     */
    private boolean updateReleaseInfo;

    /**
     * Whether to deploy snapshots with a unique version or not.
     * 
     * @parameter expression="${uniqueVersion}" default-value="true"
     */
    private boolean uniqueVersion;

    /**
     * @parameter expression="${mirrorRepositories}"
     * @required
     */
    private MirrorRepository[] mirrorRepositories;

    /**
     * @parameter expression="${localRepository}"
     * @required
     * @readonly
     */
    private ArtifactRepository localRepository;

    /**
     * @parameter expression="${project}"
     * @required
     * @readonly
     */
    private MavenProject project;

    /**
     * Deploy all artifacts for the project to each mirror repository.
     */
    public void execute() throws MojoExecutionException, MojoFailureException {
        ArtifactRepositoryLayout layout;

        layout = (ArtifactRepositoryLayout) repositoryLayouts
                .get(repositoryLayout);

        for (int i = 0; i < mirrorRepositories.length; i++) {
            MirrorRepository mirrorRepository = mirrorRepositories[i];

            ArtifactRepository deploymentRepository = repositoryFactory
                    .createDeploymentArtifactRepository(mirrorRepository
                            .getRepositoryId(), mirrorRepository.getUrl(),
                            layout, uniqueVersion);

            String protocol = deploymentRepository.getProtocol();

            if ("".equals(protocol) || protocol == null) {
                throw new MojoExecutionException("No transfer protocol found.");
            }

            deployToRepository(deploymentRepository);
        }

    }

    /**
     * Deploy all artifacts to the passed repository.
     */
    private void deployToRepository(ArtifactRepository repo)
            throws MojoExecutionException {
        String protocol = repo.getProtocol();

        if (protocol.equalsIgnoreCase("scp")) {
            File sshFile = new File(System.getProperty("user.home"), ".ssh");

            if (!sshFile.exists()) {
                sshFile.mkdirs();
            }
        }

        File pomFile = project.getFile();
        Artifact artifact = project.getArtifact();
        // Deploy the POM
        boolean isPomArtifact = "pom".equals(project.getPackaging());
        if (!isPomArtifact) {
            ArtifactMetadata metadata = new ProjectArtifactMetadata(artifact,
                    pomFile);
            artifact.addMetadata(metadata);
        }

        if (updateReleaseInfo) {
            artifact.setRelease(true);
        }

        try {
            List attachedArtifacts = project.getAttachedArtifacts();

            if (isPomArtifact) {
                deployer.deploy(pomFile, artifact, repo, localRepository);
            } else {
                File file = artifact.getFile();

                if (file != null && !file.isDirectory()) {
                    deployer.deploy(file, artifact, repo, localRepository);
                } else if (!attachedArtifacts.isEmpty()) {
                    getLog()
                            .info(
                                    "No primary artifact to deploy, deploy attached artifacts instead.");
                } else {
                    String message = "The packaging for this project did not assign a file to the build artifact";
                    throw new MojoExecutionException(message);
                }
            }

            for (Iterator i = attachedArtifacts.iterator(); i.hasNext();) {
                Artifact attached = (Artifact) i.next();

                deployer.deploy(attached.getFile(), attached, repo,
                        localRepository);
            }
        } catch (ArtifactDeploymentException e) {
            throw new MojoExecutionException(e.getMessage(), e);
        }
    }
}

Mojo ссылается на тип MirrorRepository для инкапсуляции repositoryId и url, это простой bean-компонент:

package name.seller.rich;

public class MirrorRepository {
    private String repositoryId;
    private String url;

    public String getRepositoryId() {
        return repositoryId;
    }

    public void setRepositoryId(String repositoryId) {
        this.repositoryId = repositoryId;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }
}

Вот пример конфигурации с использованием подключаемого модуля. Обратите внимание, что поддерживаются все форматы развертывания (http, scp, ftp):

<plugin>
  <groupId>name.seller.rich</groupId>
  <artifactId>maven-mirror-plugin</artifactId>
  <executions>
    <execution>
      <id>mirror</id>
      <phase>deploy</phase>
      <goals>
        <goal>mirror</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <mirrorRepositories>
      <mirrorRepository>
        <repositoryId>mirror</repositoryId>
        <url>http://path/to/mirror</url>
      </mirrorRepository>
    </mirrorRepositories>
    <!--any other deploy configuration needed-->
  </configuration>
</plugin>
3
ответ дан 4 December 2019 в 13:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: