热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

GitlabCI中缓存/工件的正确用法是什么?

如何解决《GitlabCI中缓存/工件的正确用法是什么?》经验,为你挑选了1个好方法。

当项目构建中不使用缓存文件时,我面临一个问题。就我而言,我想在构建阶段下载composer依赖项,然后在所有其他阶段都成功之后将它们添加到最终项目文件夹中。我认为,如果将cache属性设置到.gitlab-ci.yml文件中,它也会在其他阶段共享和使用。但这有时有效,有时却无效。

Gitlab版本是9.5.4

这是我的.gitlab-ci.yml文件:

image: ponk/debian:jessie-ssh

variables:
    WEBSERVER: "user@example.com"
    WEBSERVER_DEPLOY_DIR: "/domains/example.com/web-presentation/deploy/"
    WEBSERVER_CDN_DIR: "/domains/example.com/web-presentation/cdn/"
    TEST_VENDOR: '[ "$(ls -A ${WEBSERVER_DEPLOY_DIR}${CI_COMMIT_REF_NAME}/${CI_COMMIT_SHA}/vendor)" ]'

cache:
  key: $CI_PIPELINE_ID
  untracked: true
  paths:
    - vendor/

before_script:


stages:
    - build
    - tests
    - deploy
    - post-deploy

Build sources:
    image: ponk/php5.6
    stage: build
    script:
        # Install composer dependencies
        - composer -n install --no-progress
    only:
        - tags
        - staging


Deploy to Webserver:
    stage: deploy
    script:
        - echo "DEPLOYING TO ... ${WEBSERVER_DEPLOY_DIR}${CI_COMMIT_REF_NAME}/${CI_COMMIT_SHA}"
        - ssh $WEBSERVER mkdir -p ${WEBSERVER_DEPLOY_DIR}${CI_COMMIT_REF_NAME}/${CI_COMMIT_SHA}
        - rsync -rzha app bin vendor www .htaccess ${WEBSERVER}:${WEBSERVER_DEPLOY_DIR}${CI_COMMIT_REF_NAME}/${CI_COMMIT_SHA}
        - ssh $WEBSERVER '${TEST_VENDOR} && echo "vendor is not empty, build seems ok" || exit 1'
        - ssh $WEBSERVER [ -f ${WEBSERVER_DEPLOY_DIR}${CI_COMMIT_REF_NAME}/${CI_COMMIT_SHA}/vendor/autoload.php ] && echo "vendor/autoload.php exists, build seems ok" || exit 1
        - echo "DEPLOYED"
    only:
        - tags
        - staging

Post Deploy Link PRODUCTION to Webserver:
    stage: post-deploy
    script:
        - echo "BINDING PRODUCTION"
        - ssh $WEBSERVER unlink ${WEBSERVER_DEPLOY_DIR}production-latest || true
        - ssh $WEBSERVER ln -s ${WEBSERVER_DEPLOY_DIR}${CI_COMMIT_REF_NAME}/${CI_COMMIT_SHA} ${WEBSERVER_DEPLOY_DIR}production-latest
        - echo "BOUNDED  $CI_COMMIT_SHA -> production-latest"
        - ssh $WEBSERVER sudo service php5.6-fpm reload
    environment:
        name: production
        url: http://www.example.com
    only:
        - tags

Post Deploy Link STAGING to Webserver:
    stage: post-deploy
    script:
        - echo "BINDING STAGING"
        - ssh $WEBSERVER unlink ${WEBSERVER_DEPLOY_DIR}staging-latest || true
        - ssh $WEBSERVER ln -s ${WEBSERVER_DEPLOY_DIR}${CI_COMMIT_REF_NAME}/${CI_COMMIT_SHA} ${WEBSERVER_DEPLOY_DIR}staging-latest
        - echo "BOUNDED  ${CI_COMMIT_SHA} -> staging-latest"
        - ssh $WEBSERVER sudo service php5.6-fpm reload
    environment:
        name: staging
        url: http://staging.example.com
    only:
        - staging

在Gitlab文档中说:cache is used to specify a list of files and directories which should be cached between jobs.

据我了解,我已经正确设置了缓存-我将untracked设置为true,路径包括供应商文件夹,并且密钥设置为Pipeline ID,在其他阶段也应该相同。

我已经看到了一些包含的设置Artifacts,但是除非将它与一起使用,否则Dependencies它不会产生任何效果。

我不知道我在做什么错。我需要首先下载composer依赖项,因此我可以rsync在下一阶段通过复制它们。您有什么想法/解决方案吗?谢谢



1> Clive Makama..:

应该使用工件来永久提供管道末端可能需要的任何文件,例如生成的二进制文件,管道下一阶段所需的文件,覆盖率报告甚至磁盘映像。但是应使用缓存来加快构建过程,例如,如果您编译C / C ++二进制文件,则通常第一次构建花费很长时间,但是后续构建通常更快,因为它不是从头开始的,因此,如果您将使用缓存存储由编译器生成的临时文件,这将加快跨不同管道的编译速度。

因此,要回答您的问题,您应该使用工件,因为您似乎需要在每个管道上运行composer,但希望将文件传递给下一个作业。您无需在gitlab-ci.yml中显式定义依赖项,因为如果未定义,则每个作业都会拉回所有先前作业中的所有工件。缓存应该可以工作,但是它并不可靠,并且对于配置更好,但不是必须的,它可以更好地进行配置。


推荐阅读
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 初探PLC 的ST 语言转换成C++ 的方法
    自动控制软件绕不开ST(StructureText)语言。它是IEC61131-3标准中唯一的一个高级语言。目前,大多数PLC产品支持ST ... [详细]
  • Server Installation for Jitsi Meet
    2019独角兽企业重金招聘Python工程师标准ServerInstallationforJitsiMeetThisdescribesconfiguringaserverji ... [详细]
  • 一、安装软件包dig和nslookup需要安装相关软件包。Centos:yuminstallbind-utilsDebian:apt-getupdate ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 微信民众号商城/小顺序商城开源项目介绍及使用教程
    本文介绍了一个基于WeiPHP5.0开发的微信民众号商城/小顺序商城的开源项目,包括前端和后端的目录结构,以及所使用的技术栈。同时提供了项目的运行和打包方法,并分享了一些调试和开发经验。最后还附上了在线预览和GitHub商城源码的链接,以及加入前端交流QQ群的方式。 ... [详细]
  • python3.7 安装pip3_python3的pip3安装
    ---恢复内容开始---pip3的安装需要对应一整套python的编译工具库,所以安装好的pip3是这个样子:inearAi:~$pip3-Vpi ... [详细]
  • syncd是一款开源的代码部署工具,它具有简单、高效、易用等特点,可以提高团队的工作效率. ... [详细]
  • php composer 安装,phpstudy  composer 使用安装
    本人是windows系统phpstudy是最新2018版本以安装laravel框架为例子一如图一,点击phpComposer出现系统指令框,根据指令框路 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • Inno Setup区段之Components篇相关知识详解
    本文详细介绍了Inno Setup区段之Components篇相关的知识,包括Components和Types的使用方式以及各个参数的说明,希望对读者有一定的参考价值。内容涵盖了ComponentsName、Description、Types、ExtraDiskSpaceRequired、ExtraDiskSpaceRequiredFlags等多个关键词,帮助读者更好地理解和应用Inno Setup区段之Components篇的知识。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
author-avatar
海木木
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有