This GitLab CI runner image allows to deploy a GitLab project to a remote Git repo (useful for Dokku, Heroku, Deis, etc.)
Create .gitlab-ci.yml
:
image: ilyasemenov/gitlab-ci-git-push
variables:
# Prevent "shallow update not allowed" error.
# Set it to maximum possible count of *new* commits that you foresee being pushed to a remote.
GIT_DEPTH: 1000
stages:
- deploy
deploy to production:
stage: deploy
environment: production
only:
- master
script: git-push dokku@dokku.me:myapp
Go to GitLab > Project > Settings > CI/CD > Secret Variables, and add a variable SSH_PRIVATE_KEY
:
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
Make sure your private ssh key is not encrypted, or Gitlab won't be able to authenticate to your SSH server. You'll know if it is encrypted if you open it up and the top has something like:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
If it is, you can decrypt it by running: openssl rsa -in enc.key -out dec.key
By default, git-push
will push to branch master
of a remote repository (that's what Dokku wants). You can override this with:
git-push user@git.host:repo branch
git-push ssh://dokku@dokku.me:8022/myapp
By default, git push will be forced. You can disable force push by setting environment variable DISABLE_FORCE_PUSH
to any value.