Hi all,
I am a bit of a neophyte when it comes to ROS build server setup, so you'll have to forgive me if the answers to any of these questions are obvious.
For some background, I have provisioned machines as per the recommendations on
this page. I have also created a private "fork" of the configuration repo as
specified here.
My understanding is that after modifying the configuration settings for the master, slave, and repo servers, I will clone this configuration repository on each server and run the necessary configuration scripts, which will use the parameters I specified in those .yaml files and run whatever processes are necessary to configure and start Jenkins on each machine. Please let me know if I am mistaken.
Now, I am trying to work through the configuration settings, and have a number of questions on the instructions in the buildfarm_deployment documentation.
On all three:
jenkins::slave::ui_user and jenkins::slave::ui_pass are passed to the jenkins::slave puppet module. You may need to update them depending on your slave's security model. See:
https://github.com/jenkinsci/puppet-jenkins#slaves
https://github.com/jenkinsci/puppet-jenkins/blob/d2ceee61c1971256427dee11dd6472d30bf95228/manifests/slave.pp#L20-L21
First, I'm assuming puppet is a Jenkins module that will be installed via the setup scripts, correct? If so, where do we derive the username and password here? Are we making them up and just ensuring that they are consistent between machines?
This is the password for the slave to access the master
user::admin::password_hash
On the master this should be the hashed password from above
The easiest way to create this is to setup a jenkins instance. Change the password, then copy the string out of config file on the jenkins server.
For this, I just set up and ran a Jenkins server per their setup instructions, went through the configuration via the web front end, and then found the directory and file that contained of the username and hashed password in /var/lib/jenkins/users/<jenkins_admin_username>/config.xml. All of that was pretty straightforward, but it's not yet clear to me how this information is used when we run the setup script(s) on each machine. Is it using the same Jenkins instance I created? I'm assuming not.
autoreconfigure::branch
If you are forking into a repo and using a different branch name, update the autoreconfigure command to point to the right branch.
I'm assuming that this means that if our "fork" of the private configuration repo has a branch name that isn't 'master', we need to change it to whatever our branch is.
ssh_keys
Configure as many public ssh-keys as you want for administrators to log in. It's recommended at least one for root.
On the repo machine make sure there is at least one key for the jenkins-slave user matching the ssh private key jenkins::private_key provisioned on the master.
For the second bullet point, there is no parameter 'jenkins::private_key' specified in the server's common.yaml; I'm assuming it means 'jenkins::private_ssh_key'. In the default configuration file (server/common.yaml), there also appears to be a public key for the jenkins-slave user. Is that required?
Further down in the parameters that are specifically for master, we have:
credentials::jenkins-slave::username
The name of the credentials
credentials::jenkins-slave::id
A UUID for the credentials in the format 1e7d4696-7fd4-4bc6-8c87-ebc7b6ce16e5
credentials::jenkins-slave::passphrase
The hashed passphrase for the key. The UI puts this has in if there's no passphrase 4lRsx/NwfEndwUlcWOOnYg==
If you would like to modify these values from the default it will likely be easiest to boot an instance. Change the credentials via the UI, then grab the values out of the config file.
The description for the username isn't clear to me. Is this setting related to the
jenkins::slave::ui_user setting? Is the passphrase for the
jenkins-slave ssh key further down in the example configuration? Is using the default values acceptable?
Also, after a bit more digging, I found
this page. The directions say
First you need to either fork the ros_buildfarm_config repository or create a repository containing the same configuration files.
Then you must update the configuration files:
It then lists a number of other configuration settings that aren't in the ros_buildfarm_config files in the repo, such as notifications and status_page_repositories. There are also several references to "entry point yaml." Is that simply referring to each common.yaml file?
Anyway, I think that's about it. Apologies for the tome.
Thanks,
Tom