Go to file
2017-06-29 13:41:54 -07:00
gradle/wrapper IntelliJ told me this is better as it allows source code & auto-completion 2016-06-15 10:43:20 +09:00
src Cleanup smtp code 2017-06-07 09:12:21 +02:00
.gitignore Add application configuration through env variables 2017-04-24 15:29:21 +02:00
build.gradle Remove mavenCentral and Add fontawesome 2017-05-12 10:55:30 +02:00
bulk-import.sh added convenience scripts 2011-03-17 22:10:56 -07:00
circuitBreaker.txt Improved circuit breaker admin UI 2015-12-15 10:36:13 -08:00
config.properties.example Add authentication options for SMTP server 2017-06-02 15:17:53 +02:00
docker-compose.yaml Add election_logdir support 2017-05-09 17:01:48 +02:00
Dockerfile Define some default env variable 2017-05-09 17:23:03 +02:00
entrypoint.sh Add authentication options for SMTP server 2017-06-02 15:17:53 +02:00
gradlew Migrate the accountapp to Gradle and prepare for Docker-based deployment 2016-03-21 13:14:02 -07:00
gradlew.bat Migrate the accountapp to Gradle and prepare for Docker-based deployment 2016-03-21 13:14:02 -07:00
Jenkinsfile Use our configured credentials for publishing containers to DockerHub 2017-06-29 13:41:54 -07:00
Makefile Use opendjdk docker image instead of java:8 2017-05-12 10:55:08 +02:00
README.md Add authentication options for SMTP server 2017-06-02 15:17:53 +02:00
settings.gradle Force the project name to be accountapp so Gradle doesn't get clever 2016-03-21 14:38:01 -07:00

Jenkins Account Management/Sign-up App

Testing locally

First, set up a tunnel to Jenkins LDAP server. Run the following command and keep the terminal open:

ssh -4 -L 9389:localhost:389 ldap.jenkins.io

Create config.properties in the same directory as pom.xml. See the Parameters class for the details, but it should look something like the following:

server=ldap://localhost:9389/
managerDN=cn=admin,dc=jenkins-ci,dc=org
newUserBaseDN=ou=people,dc=jenkins-ci,dc=org
smtpServer=localhost
managerPassword=*****
circuitBreakerFile=./circuitBreaker.txt
url=http://localhost:8080/account/

Finally, run the application with Jetty, then access http://localhost:8080/:

./gradlew -Djira.url=https://issues.jenkins-ci.org/ -Djira.username=kohsuke -Djira.password=... -Durl=ldap://localhost:9389 -Dpassword=... jettyRun

(As you can see above, this connects your test instance to the actual LDAP server, so the data you'll be seeing is real.

The command line system properties are for JIRA LDAP sync tool. JIRA user account you are providing has to have the system admin access to JIRA. TODO: feed this data from config.properties

Docker Compose

A docker compose file can be used for testing purpose.

Require ssh tunnel to an ldap server and an WAR archive

  • Create the file .env used by docker-compose to load configuration .env example
    APP_URL=http://localhost:8080/
    ELECTION_CANDIDATES=alice,bob
    ELECTION_CLOSE=2038/01/19
    ELECTION_OPEN=1970/01/01
    JIRA_USERNAME=<insert your jira username>
    JIRA_PASSWORD=<insert your jira password>
    JIRA_URL=https://issues.jenkins-ci.org
    LDAP_URL=server=ldap://localhost:9389/
    LDAP_PASSWORD=<insert your ldap password>
    LDAP_MANAGER_DN=cn=admin,dc=jenkins-ci,dc=org
    LDAP_NEW_USER_BASE_DN=ou=people,dc=jenkins-ci,dc=org
    RECAPTCHA_PRIVATE_KEY=recaptcha_private_key
    RECAPTCHA_PUBLIC_KEY=recaptcha_public_key
    SMTP_SERVER=smtp.jenkins.io
    SMTP_USER=user@jenkins.io
    SMTP_AUTH=true
    SMTP_PASSWORD=password
  • Run docker-compose docker-compose up --build accountapp

Packaging

For deploying to production, this app gets containerized. The container expects to see /etc/accountapp mounted from outside that contains the above mentioned config.properties

To run the container locally, build it then:

docker run -ti --net=host  -v `pwd`:/etc/accountapp jenkinsciinfra/account-app:latest

Configuration

Instead of mounting the configuration file from an external volume, we may want to use environment variable.

Those two options are mutually exclusive.

* APP_URL
* CIRCUIT_BREAKER_FILE
* ELECTION_CANDIDATES   coma separated list of candidates
* ELECTION_CLOSE   date election will close. yyyy/MM/dd
* ELECTION_OPEN    date election will open. yyyy/MM/dd
* ELECTION_LOGDIR
* JIRA_PASSWORD
* JIRA_URL
* JIRA_USERNAME
* LDAP_MANAGER_DN
* LDAP_NEW_USER_BASE_DN
* LDAP_PASSWORD
* LDAP_URL
* RECAPTCHA_PUBLIC_KEY
* RECAPTCHA_PRIVATE_KEY
* SMTP_SERVER
* SMTP_USER
* SMTP_PASSWORD
* SMTP_AUTH

Makefile

make build: Build build/libs/accountapp-2.5.war and docker image make run: Run docker container make clean: Clean build environment

SMTP

The accountapp support different types of SMTP configuration to send emails.

  • Nothing is configured, the application try to connect on localhost:25
  • SMTP_AUTH is set to false, the accountapp will connect on $SMTP_SERVER:25
  • SMTP_AUTH is set to true, the accountapp will connect on $SMTP_SERVER:587 with tls authentication and will use username: $SMTP_USER with password $SMTP_PASSWORD.