19

我正在寻找一种简单而干净的方式将使用 GitLab CI 构建的人工制品发布到 Artifactory 上。

我能够发现https://gitlab.com/gitlab-org/omnibus/blob/af8af9552966348a15dc1bf488efb29a8ca27111/lib/omnibus/publishers/artifactory_publisher.rb但我找不到任何关于我应该如何配置它的文档这行得通。

注意:我正在寻找一种 gitlab_ci.yaml 方法,而不是在外部实现它。

4

3 回答 3

10

在基本层面上,这可以通过JFrog CLI工具来完成。除非你想在你的.gitlab-ci.yml(我不想)中嵌入配置,否则你首先需要运行(在你的跑步者上):

jfrog rt c

默认情况下,这将提示您输入 Artifactory URL 和 API 密钥。输入这些项目后,你会发现~/.jfrog/jfrog-cli.conf包含 JSON 如下:

    {
      "artifactory": {
        "url": "http://artifactory.localdomain:8081/artifactory/",
        "apiKey": "AKCp2V77EgrbwK8NB8z3LdvCkeBPq2axeF3MeVK1GFYhbeN5cfaWf8xJXLKkuqTCs5obpzxzu"
      }
    }

您可以将此文件复制到 GitLab 运行器的主目录 - 在我的情况下,/home/gitlab-runner/.jfrog/jfrog-cli.conf

完成后,运行程序将使用该配置向 Artifactory 进行身份验证。如果您不想使用 API 密钥,还有很多其他的身份验证可能性 - 检查 JFrog CLI 文档。

在继续之前,请确保“jfrog”可执行文件位于已知位置,并具有 gitlab-runner 用户的执行权限。从这里您可以在您的内部调用该实用程序- 这是一个将 Git 标记作为工件版本传递的应用程序.gitlab-ci.yml的最小示例:node.js

stages:
  - build-package
build-package:
  stage: build-package
  script:
    - npm install
    - tar -czf test-project.tar.gz *
    - /usr/local/bin/jfrog rt u --build-name="Test Project" --build-number="${CI_BUILD_TAG}" test-project.tar.gz test-repo
于 2016-11-16T14:32:53.890 回答
4

如果您正在使用 Maven 构建,这就是我设法做到的方式:

注意:您需要准备好人工凭证(用户和通行证)。

  1. 创建主密码并从中生成加密密码。可以在此处找到有关如何创建主密码的过程

  2. 在 gitlab 的管道设置中,创建 2 个秘密变量,一个用于用户名,另一个用于加密密码。

  3. 在Maven 构建的目录中更新或创建settings.xml文件。.m2settings.xml应该是这样的:

    <settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <servers>
        <server>
          <id>central</id>
          <username>${env.ARTIFACTORY_USER}</username>
          <password>${env.ENCRYPTED_PASS}</password>
        </server>
      </servers>
    </settings>
    
  4. 在您的.gitlab-ci.yml文件中,您需要settings.xml像这样使用它:

    image: maven:latest
    
    variables:
      MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
      MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
    
    cache:
      paths:
        - .m2/repository/
        - target/
    
    build:
      stage: build
      script:
        - mvn $MAVEN_CLI_OPTS compile
    

就是这样。这应该有效。您可以访问此处以了解有关如何将工件与 maven 一起使用的更多信息

于 2017-08-24T07:13:50.213 回答
1

我知道这并不能完全回答您的问题,但是我从相关搜索中得到了这个问题,所以我认为它也可能与其他人相关:

我最终使用了一个mvn deploy绑定到deploygitlab 舞台的工作。

这是相关的工作部分:

deploy:jdk8:
  stage: test
  script:
    - 'mvn $MAVEN_CLI_OPTS deploy site site:stage'
  only:
    - master
  # Archive up the built documentation site.
  artifacts:
    paths:
    - target/staging
  image: maven:3.3.9-jdk-8
于 2017-02-23T12:27:31.087 回答