How to enable / setup Dependency Caches for apt-get on BitBucket Pipelines

前端 未结 3 1208
时光说笑
时光说笑 2021-01-01 15:09

I am using the following code in my bitbucket-pipelines.yml files to remotely deply code to a staging server.

image: php:7.1.1

pipelines:
  def         


        
相关标签:
3条回答
  • 2021-01-01 15:17

    Unfortunately, the parts that take the time are unsafe or pointless to cache. Remember that the pipeline caches may be deleted at any time, so you always need to run the commands anyway.

    apt-get update doesn't use a cache, so will download the latest indexes every time.

    apt-get install caches downloaded packages in /var/cache/apt so you could save that. However this probably won't actually save any time

    Fetched 907 kB in 0s (998 kB/s)

    The actual installed packages cannot be cached, because they a) are spread around multiple shared files and directories and b) may not be portable to different docker images.

    At a deeper level, satisfactory interaction between caching, apt-get update, and Docker is a complex issue.

    0 讨论(0)
  • 2021-01-01 15:19

    I am using a similar configuration, but in my case I want to cache the gettext package, came here for the same reason (to find how to cache gettext).

    if you don't have that dependency, you can use the bitbucket provided ssh pipe pipe: atlassian/ssh-run. don't have to create custom docker image.

    image: atlassian/default-image:2
    
    pipelines:
      branches:
        develop:
          - step:
              deployment: staging
              script:
                  - apt update && apt install -y gettext
                  - envsubst < scripts/deploy.sh > deploy-out.sh
                  - pipe: atlassian/ssh-run:0.2.6
                    variables:
                      SSH_USER: $STAGE_USER
                      SERVER: $STAGE_SERVER
                      COMMAND: 'deploy-out.sh'
                      MODE: 'script'
    
    0 讨论(0)
  • 2021-01-01 15:39

    This is a typical scenario where you should use your own Docker image instead of one of the ones provided by Atlassian. (Or search for a Docker image which provides exactly this.)

    In your simple case, this Dockerfile should be enough:

    FROM php:7.1.1
    
    RUN apt-get update && \
        apt-get install -y openssh-client
    

    Then, create a DockerHub account, publish the image and reference it in bitbucket-pipelines.yml.

    0 讨论(0)
提交回复
热议问题