...
Code Block |
---|
#!/bin/bash
echo "$DOCKER_PASSWORD" | docker login -u $DOCKER_USERNAME --password-stdin
if [ ! -z "${TRAVIS_TAG}" ]; then
docker tag edxops/MY_REPO:latest edxops/MY_REPO:${TRAVIS_TAG}
docker push edxops/MY_REPO:${TRAVIS_TAG}
fi
docker push edxops/MY_REPO:latest |
Login to docker hub with your regular account and add your docker image repo to the automation team in the appropriate org (either edxops or openedx)
Login to docker hub ad the edxbuilder user and create a new API key for your repo and encrypt it as follows.
Add --pro to travis encrypt command if using a private repo
Code Block | ||
---|---|---|
| ||
$ travis encrypt --add env.global
Reading from stdin, press Ctrl+D when done
DOCKER_PASSWORD=PASTE_API_KEY_HERE
$ |
Set the DOCKER_USERNAME variable in .travis.yml to edxbuilder
Your .travis.yml file should look like this.
Code Block |
---|
$ cat .travis.yml
services:
- docker
sudo: required
script:
- make docker_build docker_tag
env:
matrix:
- DOCKER_USERNAME=edxbuilder
global:
- secure: tl7BX1c2BkjgObJ+VDIfdB9IshpC01gklxiw5WQ1ubG05TbSmp1OvvUrFNwQ81KWb2tkjM0Jq1wnxzNCRyqwqgptPB5fGflxT0CVGKVJYBM5ZpPH2QNcwdxkH8fqZNaY/MpO45UI2qwKRxqouEkg71tVpjYdxFf/C1SrLRfQgtUNjA9g5OEXGw7dzKmvs3vjn6j5n5wBTM3pcNgiKRM7vnW920tQRKoJ8C6sqOnBnUP8CcnCnN+Qdgr5MGPf2ucKLMbdWO8ssAGuZ1eKMAbCVxmd10utQHch1ra4xS0tQDc/yK67iVu05CIvhe27YRAaJ14NSQUDDqbQqUWpxW9zr5ucMfr8LP6jHN34Qxq5h7Y4AK1vHkDBGajNJAbx07JcXQn/9l0C4uwdTjK5N0FVE/jSkJIjhjmyZ4dk8BGunKyYZVHcnqiTBGwx9t9xJLQH3J3C0IeeGLchnHeA5ONaIeShdtg98SNMMMkfJ8pQGXK4GOkMehnIFwYDUAISf1ID9rCmTQ9w9lO6JNBLxGdVTNKqwqC6J71vgQz7oTHF5iG9RZr7ouBlIplohGdhZ0Rta0vzEfxofWEMdP3RArYomz/0ynFYP19DpI9Fzf3hirRGI8Bet2mQzvH6m7WF5YBxCX0JCkst2fvNml0ZOZTVVB3qwts2/F4FBSniK+yeRPg=
- secure: HhndVFqd0GD2Wnr+bkIFZlfARy5VgprItWpSHV+AmXxkwue57eZmrJFfS+9IXEkwsPwt9OaP3l5N1QJ7/XdXCiXmBSx1M5+ME2xKy8ZviyIAQOHynT8NDiQqn91edhhjT4H3mqm/RLNE5emrUZAIAUXdpglvm+R3IsncdZqzRv05pnXStjDOm9ILd2LDW2AkUJ0wczm6ZWap4E/C72/iO5XbT0yFfzcmh6kJIUUSnu+plehHAVPXrE6u153dZK9+jgtxlBKq6iUUkvLQXn47ag2Ah7o4GxxIFhIb8lGesRRwQ4k2jl+Xe3zgYp6Gcue1Ue4IXqGOVVlT+McWF20MjjU8r+18EWqLs1JVk5dTtfvrxdwCibAx3HvAke/PUMjfg58r78sW7GQ4lzSBpxMjnh51SVkbu08nT2+qQfCzhIusP3E7YRs96MDX6eyU25qwrzcPaVOAP5E3HT3nr5VNqyaqp3MPWCxgNfpACncy+BeeEV7KsXxejVu6CDlys2DwVn/6tgSwR/DtzJRV1w671gLDoUb3cCbbjj3T31rKBqneXEJiZ0JLBQyVkGLpUiewmP1i7XsWI0U8WPmhmwK+x1Iw/xdzP4yzdc7LpMbBxqtvW10Wx3NovvDbs6xdOZYFnx2K9TTXdsSmgjcV9xUkoepTRJTSGz9E+O74ai6hZ84=
deploy:
provider: script
script: make docker_push
on:
branch: master |
Your Makefile might look something like the following. The important bit is the docker_auth step.
Code Block |
---|
$ cat Makefile
.PHONY: docker_build docker_tag docker_auth docker_push
.DEFAULT_GOAL := docker_tag
docker_build:
docker build . -f Dockerfile -t edxops/ecr-cred-helper
docker_tag: docker_build
docker tag edxops/ecr-cred-helper edxops/ecr-cred-helper:$$TRAVIS_TAG
docker tag edxops/ecr-cred-helper edxops/ecr-cred-helper:$$TRAVIS_COMMIT
docker_auth:
echo "$$DOCKER_PASSWORD" | docker login -u "$$DOCKER_USERNAME" --password-stdin
docker_push: docker_tag docker_auth ## push to docker hub
docker push 'edxops/ecr-cred-helper:latest'
docker push "edxops/ecr-cred-helper:$$TRAVIS_COMMIT"
docker push "edxops/ecr-cred-helper:$$TRAVIS_TAG"
|
See https://github.com/edx/ecr-cred-helper/pull/1/files as an exampleIf you need help configuring it for multiple providers look at the syntax here:
https://docs.travis-ci.com/user/deployment#deploying-to-multiple-providers: How to automate Docker Hub publishing