Git driven deployment strategy using git-hooks.
10K+
Git driven deployment strategy using git-hooks. Intended to bring version control to common deployment tasks such as changing environment variables, services, server provisioning, etc.
Configure environment file
cp git-deploy/sample.env git-deploy.env
vim git-deploy.env
Option legend:
| Key | Usage |
|---|---|
| DEST | Duplicity backup destination. See Duplicity Docs |
| PASSPHRASE | Used to symmetrically decrypt/encrypt backups via GPG |
| HOOK_REPO | External Git repository where hooks will be sourced from. If undefined hooks will be sourced from 'hooks' folder in each repo |
| HOOK_REPO_VERIFY | If 'true' hook_repo must be signed by key trusted in local gpg keyring |
| AWS_ACCESS_KEY_ID | Required if using AWS S3 as DEST |
| AWS_SECRET_ACCESS_KEY | ^ |
Run git-deploy Docker image on CI server.
cp git-deploy/git-deploy.service .
systemctl enable $PWD/git-deploy.service
systemctl start git-deploy
Add any desired public keys
SSH:
bash docker exec -it git-deploy sh -c "curl https://github.com/someuser.keys >> .ssh/authorized_keys"
GPG:
bash docker exec -it git-deploy bash gpg --recv-keys E90A401336C8AAA9 gpg --edit-key E90A401336C8AAA9 gpg> trust gpg> save
Setup Git-Deploy repo for each environment this deploy server can manage.
ssh [email protected] mkrepo staging.git
Clone git-deploy repo for target env
git clone [email protected]:staging.git deploy
Set app environment vars, deployment details, and services
cd deploy/apps/some-app
vim some-app.env
vim [email protected]
vim some-app-helper@@.service
vim some-app-helper.env
vim config.yml
Create shared environment vars (optional)
vim deploy/global.env
Adjust git-hooks (optional)
vim deploy/hooks/post-receive
Deploy app
git add .
git commit -m 'Added some-app'
git push staging master
Changes are reflected in target Environment via defined git-hooks.
It is possible to read SSH logs by overwriting a specific log path (e.g. /var/log/secure)
with your instance host's file. You can adjust the git-deploy.service like:
ExecStart=/usr/bin/docker run \
-p 22:2222 \
--env-file="/home/core/git-deploy.env"
-e SSH_LOG_FILE=/var/log/secure \
-v /var/log/secure:/var/log/secure \
-v /etc/hosts.deny:/etc/hosts.deny \
--name="git-deploy" \
pebble/git-deploy
This allows you to read and act on logs written to this file, for example using
DenyHosts to read the logs, and writing to hosts.deny to deny certain hosts.
If you need to manually debug/edit the hooks of a repo after creation, you can mount the running /git volume within a debug environment such as a debian container like so:
docker run -ti --volumes-from=git-deploy debian bash
vim /git/somerepo.git/.git/hooks/post-receive
To run tests you will need:
Run tests:
bats test/test.bats
Content type
Image
Digest
Size
222.1 MB
Last updated
almost 10 years ago
docker pull pebbletech/git-deploy