gitlab-ci-git-push icon indicating copy to clipboard operation
gitlab-ci-git-push copied to clipboard

Gitlab CI runner image that pushes to a remote Git repo (Dokku, Heroku, Deis, etc.)

GitLab CI runner that pushes to git

This GitLab CI runner image allows to deploy a GitLab project to a remote Git repo (useful for Dokku, Heroku, Deis, etc.)

How to use

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 [email protected]: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

Pushing to a branch other than master

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 [email protected]:repo branch

Pushing to Git running on a non-standard port

git-push ssh://[email protected]:8022/myapp

Not doing force push

By default, git push will be forced. You can disable force push by setting environment variable DISABLE_FORCE_PUSH to any value.