在人工制品中存储angular dist文件夹

时间:2019-06-29 20:15:43

标签: angular artifactory gitlab-ci

我们使用工件来提取库并存储工件。我们将npm注册表设置为此工件URL,以下拉库。我们使用gitlab作为CI。我写了一份工作,用ng build --prod构建angular应用程序。我的问题是将dist /文件夹推送到工件的最佳实践是什么?在下一步中,我将使用cf push检索dist /文件夹并将其部署到Cloud Foundry。我调查了npm install,但它说它需要package.json。我可以在dist文件夹中创建一个吗?如果是这样,我该放在哪里?另一个选项似乎是tar dist /,但这似乎也需要package.json。    任何想法都很感激。

我尝试使用工件的REST API推送文件夹,并使用--data-binary进行卷曲,但这仅支持单个文件(如预期)

curl -u $ARTIFACTORY_USER:$ARTIFACTORY_APIKEY --data-binary @$RELEASE_PACKAGE -X PUT $ARTIFACTORY_URL/artifactory/

我期望能够推送整个dist文件夹,以便我可以撤回并部署它。但是,我不知道最佳做法是什么(如果它有权按文件夹,或者我应该按tar.gz)

2 个答案:

答案 0 :(得分:1)

<块引用>

我能够将 dist 目录压缩为 tar.gz 并使用其余 api 将其推送到 artifactory 中,然后使用 curl 将其拉下来,解压缩并delpoy。

所以唯一的问题是关于角度应用的最佳实践。人们是遵循我上面列出的方法还是有更好的方法?

似乎没有官方的最佳实践,只有这样一个过程的轶事证据。

<块引用>

但是我们可以抓取所有生成的文件并将它们放入 zip 文件中吗?因此,我们必须构建应用程序,找到项目 dist 文件夹并将其内容压缩为 zip 文件。

stage: deployscript:
# Installing zip / unzip in order to zip the artifact before uploading it.
    - apk add curl zip
# Create artifactName and remove version-file as it is supposed to only be used during the build
    - artifactName=${ARTIFACT_NAME_TEMPLATE/<VERSION>/$(cat $CI_PROJECT_DIR/$SUB_PATH/version)}
    - rm $CI_PROJECT_DIR/$SUB_PATH/version
# Zip artifact (note: we are using relative paths; otherwise the ZIP will include all parent folders)
    - cd $CI_PROJECT_DIR/$SUB_PATH
    - zip -9 -r ${artifactName} ./dist
# Upload to Sonatype Nexus
    - curl -v -u $SONAR_CI_USER:$SONAR_CI_PASSWORD --upload-file $CI_PROJECT_DIR/$SUB_PATH/${artifactName} $NEXUS_URL/

交付(在本例中为 Docker)是:

build_image:
  script:
# Install curl and unzip in order to download and unzip artifact
    - apk add curl unzip

# Download artifact
    - curl $ARTIFACT_ON_NEXUS --output $CI_PROJECT_DIR/$OUTPUT_FILE

# Unzip artifact
    - unzip $CI_PROJECT_DIR/$OUTPUT_FILE -d $CI_PROJECT_DIR/frontend/
    - docker build -t particles-front-frontend-nginx:$VERSION_TO_PUBLISH .

  artifacts:
    expire_in: 1 hour
    paths:
      - $CI_PROJECT_DIR

所以总体思路仍然是:将 dist 存储为 zip,将其卷回部署环境。

答案 1 :(得分:0)

如下所示,您可以在构建阶段(例如我的实例中的dist)将工件路径设置为packing文件夹。在下一阶段(示例中为deploying),您可以添加上一阶段广告的依赖项。这样您在dist文件夹中的文件将在此阶段可用。

packaging:
  stage: packaging
  artifacts:
     paths:
       - /dist

deploying:
  stage: deploying
  dependencies:
    - packaging