How to enable / setup Dependency Caches for apt-get on BitBucket Pipelines
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
.
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'
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.