Further stories of a tinkerer - this time it's IBM BPM, Apache Kibana and Elasticsearch
Now I'm playing with Jenkins and Git, the latter of which is running on Docker, with the intention of automating the push of Java code to WebSphere Liberty Profile, also running in Docker.
I also intend to get to grips with Maven at the same time, what's not to like ?
Anyway, back to Git and Jenkins.
I started the Docker container hosting Git as follows: -
git=`docker run -d -p 2222:22 -v ~/git-server/keys:/git-server/keys -v ~/git-server/repos:/git-server/repos jkarlos/git-server-docker`
So I've created a Git repository on a Docker image running on one of my Macs, which is accessible via SSH, and then created a basic Jenkins workflow to pull some Java source ( HelloWorld.java, of course ) from Git, compile it, and execute it.
The next step will then be to push the compiled code to the Liberty container, and execute it. But that's the future …
So this is how I created the Git repository on the remote Mac: -
Make a directory for the myrepo.git repository - note that the path is actually a volume that's used by the Docker container ( see above ) : -
mkdir ~/git-server/repos/myrepo.git
Change to that directory
cd ~/git-server/repos/myrepo.git
Git initialise the repository
git init --shared=true
Add the contents of the current directory to the repository
git add .
Commit the first change
git commit -m "my first commit"
Copy in my source Java from ~/Desktop
cp ~/Desktop/HelloWorld.java .
Add the Java source to the repository
git add HelloWorld.java
Commit the change
git commit -m "Hello World"
Having done this, I then cloned the repository to my main Mac, in order to allow me to work on my Javacode even when remote from the remote Mac: -
Clone the remote repository
Change to the newly created clone repository
cd ~/myrepo
Create a Readme file
touch Readme
Add the Readme file to the remote repository
git add Readme
Edit the Java source
vi HelloWorld.java
Add the updated Java source to the remote repository
git add HelloWorld.java
Commit the changes
git commit -m "Adding changes"
Push the updates
git push
Enter passphrase for key '/Users/davidhay/.ssh/id_rsa':
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 368 bytes | 368.00 KiB/s, done.
Total 4 (delta 1), reused 0 (delta 0)
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error:
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To ssh://192.168.1.12:2222/git-server/repos/myrepo.git
! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'ssh://git@192.168.1.12:2222/git-server/repos/myrepo.git'
At this point, I reverted to normal, and dived into Google for answers.
Eventually, I found this: -
<snip>
This error is showing up because you didn't create the original repo as a bare repository, thus it's "protected" in a way you can't just push to it.
You can do as the error message says and set receive.denyCurrentBranch in the server side, where this repository is originally located. You can do this by navigating to the repository in the original location and running:
git config receive.denyCurrentBranch ignore
You can do as the error message says and set receive.denyCurrentBranch in the server side, where this repository is originally located. You can do this by navigating to the repository in the original location and running:
git config receive.denyCurrentBranch ignore
</snip>
Source: Unable to push to repository
So, if I understand correctly, when I created the original repository, on the remote Mac, I should've specified that it be "bare" :-)
I tried the circumvention on the remote Mac: -
cd ~/git-server/repos/myrepo.git
git config receive.denyCurrentBranch ignore
git config receive.denyCurrentBranch ignore
and then tried the git push again: -
git push
Enter passphrase for key '/Users/davidhay/.ssh/id_rsa':
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 368 bytes | 368.00 KiB/s, done.
Total 4 (delta 1), reused 0 (delta 0)
To ssh://192.168.1.12:2222/git-server/repos/myrepo.git
894abb8..ea975c5 master -> master
This time it worked … the updated files ( Readme and HelloWorld.java ) appear in the remote repository.
Even better than that, my Jenkins workflow works …
In the next post, I will talk about the Jenkins -> remote Git plumbing, a problem that I hit with SSH certificates, and the workflow …
No comments:
Post a Comment