17

I have a simple Spring Cloud Config Server which consume configuration from git server.

ConfigServer bootstrap.yml :

spring:
  application:
    name: config-service
  cloud:
    config:
      server:
        git:
          uri: ssh://git@mydomain:myport/myrepo.git
          searchPaths: "configurations/{application}/{profile}"
server:
  port: 8888

When I deploy ConfigServer on local, I can retrieve configuration from http://localhost:8888/myapp/test. But when I deploy ConfigServer on test server, it throws No such label: master when I hit http://testserverip:8888/myapp/test.

Any help would be most appreciated!

enter image description here

mstzn
  • 2,881
  • 3
  • 25
  • 37
  • What does the log say? Maybe some configuration problem or authentication or authorization from the test system to your git repo? – spencergibb Oct 13 '16 at 18:01

14 Answers14

57

I know that I'm posting this answer very very late. But, still posting it so that other folks can find this helpful. Now a days, default branch name of GitHub is "main", but Spring Cloud Config still looks for "master" as a label name. So, if you want to change the default behavior, you can always change the label name look up using below property in application.yml or application.properties:

spring.cloud.config.server.git.default-label=main

This worked very well for me. I'm using Spring Boot 2.3.6.RELEASE

Anish Panthi
  • 797
  • 8
  • 17
  • I don't know why but for me setting spring.cloud.config.server.git.default-label=master is working and before that, it was working well and good but the error was still there. – Suhail Akhtar Feb 21 '22 at 17:10
  • @SuhailAkhtar Yes, it will work if you have branch named as "master" in your repository and you have set default-label as "master" – Anish Panthi Feb 22 '22 at 18:54
7

GitHub created default branch "main" , however Spring cloud Config was looking for "master branch". I have created a "master" branch and it worked!

Rajiv Srivastava
  • 339
  • 1
  • 5
  • 12
  • 3
    This is just a band aid on the problem. A more correct answer would be to change the default label to main as given by Anish Panthi. – walsht Jun 25 '21 at 15:26
5

I faced this same annoying scenario.

I'll first state how I solved this scenario and will later emphasize my mistakes which I did in my previous approaches. In my context, I'm using application.properties

My application overview looks like below: I have a config-server which is centralized & provides the respective configuration data to the respective micro-services.

For instance, a micro-service 'limits-service', requires some configuration data, it gets it from the central configuration server('spring-cloud-config-server'). Hence to achieve this, 'limits-service' queries the central config server which in-turn fetches the requested data from a remote git branch('spring-cloud-samples').

                            ┌---------------------- <--> [currency-exchange-service]
    [git] <--> [spring-cloud-config-server] ------- <--> [limits-service] 
                            └---------------------- <--> [currency-conversion-service]

Solution:

I simply created a new Git Repository (spring-cloud-samples) for all the configuration files which would be consumed by several micro-services through a central configuration server.

In the application.properties file of central configuration server('spring-cloud-config-server'), I have provided a property as:

spring.cloud.config.server.git.uri=https://github.com/{username}/{git-reponame.git}

which might look like

spring.cloud.config.server.git.uri=https://github.com/alice123/spring-cloud-samples.git That's it!

On starting my central-config-server & observe the log which is as follows:

2020-02-17 05:25:07.867  INFO 15000 --- [nio-8888-exec-9] o.s.c.c.s.e.NativeEnvironmentRepository  : Adding property source: file:/D:/Users/{userName}/AppData/Local/Temp/config-repo-3453413414/limits-service.properties

Moreover, I also consumed the config-data through my 'limits-service' & it worked like a charm!

I tried the following things that resulted in failures and a lot of screaming & yelling. XD

I'm posting it, just so that someone who's trying this same concept might save a night's work or maybe less :p

1) Initially, I was using my Git Repositories SSH URL in my application.properties file of central-config-server like follows:

spring.cloud.config.server.git.uri=git@github.com:alice123/spring-cloud-samples.git
spring.cloud.config.server.git.username=alice123
spring.cloud.config.server.git.password=alice123Pwd

which resulted in the following error:

2020-02-17 05:22:45.091  WARN 15000 --- [nio-8888-exec-1] .c.s.e.MultipleJGitEnvironmentRepository : Error occured cloning to base directory.
org.eclipse.jgit.api.errors.TransportException: git@github.com:aniketrb-github/spring-cloud-samples.git: Auth fail

2) Later, I tried to read the config data from a native/local git directory, which was pointing to my Git remote branch(spring-cloud-samples) Then I provided the following in my application.properties file:

spring.cloud.config.server.git.uri=file://D:\aniket-workspace\github-ws\microservices\udemy-microservices\git-localconfig-repo

This crashed with:

java.lang.IllegalStateException: Failed to load property source from location 'classpath:/application.properties'

3) Later after enough googling, I changed the above property to below which worked!!:

spring.cloud.config.server.git.uri=D:\\\\alice-workspace\\\\github-ws\\\\microservices\\\\git-localconfig-repo

The 'limits-service' eventually failed while it tried to get the config-data from 'spring.cloud.config.server' with following error:

404: Not Found - "org.springframework.cloud.config.server.environment.NoSuchLabelException: No such label: master"

The solution I've stated worked for me due to all the failures I came across which I mentioned above. Please correct me if I'm wrong & improvise if necessary. I hope this helps and saves some crucial time.

References: spring-cloud-config, https-or-ssh, git-ssh-windows, git-ssh-windows-troubleshooting

Aniket
  • 303
  • 5
  • 11
  • 1
    looks like you are ranga student in Udemy lol, I am going through his course as well right now, how did that go for you? was it beneficial? – Bigyan Devkota Feb 28 '22 at 15:37
  • It's good to learn about the overview and understand the breadth of this topic. It helps in developing an understanding and allows you to touch the tip of the iceberg, But in a nutshell, its good food for beginners and anyone new to it. all the best. cheers. – Aniket Mar 06 '22 at 17:32
  • 1
    yeah i am a beginner on spring boot microservies, i am trying to finish that course slowly, to get some basic ideas and slowly move on to Java developer – Bigyan Devkota Mar 06 '22 at 22:33
4

This happens when your service cannot access to Git repository. Since you can start your application, I assume test server can reach to Git. You should set up SSH authentication to your Git server. You can check this site for SSH configuration.

bhdrkn
  • 6,244
  • 5
  • 35
  • 42
  • Thanks man !! My test server could not access to Git Server. After set up ssh authentication it worked very well – mstzn Oct 14 '16 at 21:03
  • @bhdrkn, I tried your mentioned hyper-link, but got stuck at Step.8 in "Set up SSH for Git on Windows". got an error "Permission denied (publickey)". I tried the trouble-shooting steps for my error and unfortunately it didn't get me anywhere. How do I get around this? Should I generate & add a new key in my git? PS: I'm using application.properties & not yml. Currently I'm looking into the spring-cloud documentation here: **(https://cloud.spring.io/spring-cloud-static/spring-cloud-config/1.1.3.RELEASE/)** just to see if it helps or takes me any further to resolve my core issue. – Aniket Feb 17 '20 at 00:07
4

In my case nothing of given answers worked. only thing that worked is setting default-label to master

spring.cloud.config.server.git.default-label=master
Saurabh Dhage
  • 1,478
  • 5
  • 17
  • 31
1

When you create a new repository, nowdays git makes "main" as the default branch instead of master. This issue is all about this.

Create "master" branch manually. It will solve all these issues.

Steropes
  • 4,600
  • 2
  • 22
  • 26
  • 1
    This was already suggested by another answer. It also probably isn't quite the same as the problem the OP had, since that change happened just a few months ago, while this post is 4 years old. Maybe take a look again at [answer] to see what's expected of a complete answer – camille Oct 28 '20 at 22:21
  • "nowdays" mean somthing here...@camille – DHEERAJ KUMAR GUPTA Nov 04 '20 at 10:21
1

for me this caused due to my default branch 'main'. whenever you create a new branch the default branch is 'main' not 'master' anymore. but spring server config look for master branch. the quick solution is to checkout a new branch called 'master' from 'main' branch. and try from spring config server. thats it.

to create a new branch from main branch. first point to main branch and from there

git checkout -b master git push --set-upstream origin master

restart your config server and test

somspeaks
  • 534
  • 2
  • 6
  • 11
1

This is what I found when I too had a similar issue.

Issue/Mistake#1 >> I created the properties file using notepad(I am on Windows OS). The file was created with .txt extension. Hence the cloud config was not picking up the changes. Fix: changed the extension from .txt to .properties

Issue/Mistake#2 >> The .properties file name was different from what is mentioned. The file should be named:

servicename.properties

  matching the servicename defined in the *application.properties* as below:

spring.application.name=<<servicename>>

In my example:

 spring.application.name=limits-service

Hence the file should be named **limits-service.properties**, but I created with the name limits-service-service.properties

enter code here

Fix: renamed the file to: limits-service.properties

Now I am able to see the configurations from the spring-cloud-config and it is picking the values from the configured GIT repository.

ouflak
  • 2,458
  • 10
  • 44
  • 49
Kartikeyahara
  • 109
  • 1
  • 3
0


I hope you are doing well.
I am using STS 4 and added source link folder (local git repo) for spring cloud configuration from local git repo.
I had facing same issue,
I did just change back slashes with forward slashes.
when i was using like this

spring.cloud.config.server.git.uri=file://C:\Users\coder\Desktop\spring material\in28microservies\git-localconfig-repo

I got error

2020-04-04 14:57:37.874 ERROR 6952 --- [nio-8888-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: Cannot load environment] with root cause
java.lang.IllegalStateException: Cannot convert uri to file: file://C:UserscoderDesktopspring materialin28microserviesgit-localconfig-repo

Then i just replaced all back slashes with forward slashes in config server properties file,
and it worked for me

spring.cloud.config.server.git.uri=file://C:/Users/coder/Desktop/spring material/in28microservies/git-localconfig-repo
Muhammad Hamed K
  • 279
  • 1
  • 4
  • 9
0

This will work for sure !!! :)

1 ) You have to commit your changes in following way to show up the master if you initialize the repo for first time in that particular folder

> git add -A .
> git commit -m "added prop..."

2) re-run the project and hit same url.

Njoy :)

Prashant
  • 616
  • 6
  • 10
0
spring.profiles.active=native
spring.cloud.config.server.native.searchLocations=file://<location>

Try this as mentioned by our friend below:

https://stackoverflow.com/a/33179106/1908827

Akash Yellappa
  • 2,126
  • 28
  • 21
0

To those who may have a 'delayed(>2mins) but correct response' when visiting: localhost:8888/limits-service/default, One simple way that works for me is:

  1. In limits-service.properties, change the configserver port to 8887 instead of sticking with 8888: spring.config.import=optional:configserver:http://localhost:8887 It appears that there is a timeout when Spring is trying to visit port 8888.
  2. In application.properties of spring-cloud-config-server, change spring.cloud.config.server.git.uri directly to a REAL git that is stored on Github. I am using my own public git so that you guys can copy-paste it: spring.cloud.config.server.git.uri=https://github.com/SimonSongCA/git-localconfig-repo.git

It significantly reduces the delay from X minutes to seconds, and there are no exceptions at the console anymore.

Simon S
  • 1
  • 2
0

The below solution worked for me. Add below property in properties file.

spring.cloud.config.server.git.default-label=master

Also check to see if you are pointing to right git location

spring.cloud.config.server.git.uri=file:///C://Work//my_project//app-props//repo//test
-1

The above error comes when you refer to old tutorial because GitHub switched to the default branch as "main" then your application tries to access the master branch of your config-server repository but it is not available so above error comes and when you access though browser it will display white label error page.

solution already mentioned in above comments

Manoj Madushanka
  • 371
  • 1
  • 7
  • 21