我们使用工件来提取库并存储工件。我们将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)
答案 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