2016-11-28 12:41:29 -05:00
# PlantUML & GitLab
2017-04-19 11:02:37 -04:00
> [Introduced][ce-8537] in GitLab 8.16.
2016-11-28 12:41:29 -05:00
When [PlantUML ](http://plantuml.com ) integration is enabled and configured in
2017-01-15 19:07:02 -05:00
GitLab we are able to create simple diagrams in AsciiDoc and Markdown documents
created in snippets, wikis, and repos.
2016-11-28 12:41:29 -05:00
## PlantUML Server
Before you can enable PlantUML in GitLab; you need to set up your own PlantUML
server that will generate the diagrams. Installing and configuring your
own PlantUML server is easy in Debian/Ubuntu distributions using Tomcat.
First you need to create a `plantuml.war` file from the source code:
```
sudo apt-get install graphviz openjdk-7-jdk git-core maven
git clone https://github.com/plantuml/plantuml-server.git
cd plantuml-server
mvn package
```
The above sequence of commands will generate a WAR file that can be deployed
using Tomcat:
```
sudo apt-get install tomcat7
sudo cp target/plantuml.war /var/lib/tomcat7/webapps/plantuml.war
sudo chown tomcat7:tomcat7 /var/lib/tomcat7/webapps/plantuml.war
2017-04-21 12:45:27 -04:00
sudo service tomcat7 restart
2016-11-28 12:41:29 -05:00
```
Once the Tomcat service restarts the PlantUML service will be ready and
listening for requests on port 8080:
```
http://localhost:8080/plantuml
```
you can change these defaults by editing the `/etc/tomcat7/server.xml` file.
## GitLab
You need to enable PlantUML integration from Settings under Admin Area. To do
that, login with an Admin account and do following:
- in GitLab go to **Admin Area** and then **Settings**
- scroll to bottom of the page until PlantUML section
- check **Enable PlantUML** checkbox
- set the PlantUML instance as **PlantUML URL**
## Creating Diagrams
With PlantUML integration enabled and configured, we can start adding diagrams to
2017-01-15 19:07:02 -05:00
our AsciiDoc snippets, wikis and repos using delimited blocks:
2016-11-28 12:41:29 -05:00
2017-11-01 06:56:06 -04:00
- **Markdown**
```plantuml
Bob -> Alice : hello
Alice -> Bob : Go Away
```
2016-11-28 12:41:29 -05:00
2017-11-01 06:56:06 -04:00
- **AsciiDoc**
2017-01-15 19:07:02 -05:00
2017-11-01 06:56:06 -04:00
```
[plantuml, format="png", id="myDiagram", width="200px"]
--
Bob->Alice : hello
2017-01-15 19:07:02 -05:00
Alice -> Bob : Go Away
2017-11-01 06:56:06 -04:00
--
2017-01-15 19:07:02 -05:00
```
2017-11-01 06:56:06 -04:00
- **reStructuredText**
2017-08-29 10:04:32 -04:00
2017-11-01 06:56:06 -04:00
```
.. plantuml::
:caption: Caption with **bold** and *italic*
2017-08-29 10:04:32 -04:00
2017-11-01 06:56:06 -04:00
Bob -> Alice: hello
Alice -> Bob: Go Away
```
You can also use the `uml::` directive for compatibility with [sphinxcontrib-plantuml ](https://pypi.python.org/pypi/sphinxcontrib-plantuml ), but please note that we currently only support the `caption` option.
2017-08-29 10:04:32 -04:00
2017-01-15 19:07:02 -05:00
The above blocks will be converted to an HTML img tag with source pointing to the
2016-11-28 12:41:29 -05:00
PlantUML instance. If the PlantUML server is correctly configured, this should
render a nice diagram instead of the block:
![PlantUML Integration ](../img/integration/plantuml-example.png )
Inside the block you can add any of the supported diagrams by PlantUML such as
[Sequence ](http://plantuml.com/sequence-diagram ), [Use Case ](http://plantuml.com/use-case-diagram ),
[Class ](http://plantuml.com/class-diagram ), [Activity ](http://plantuml.com/activity-diagram-legacy ),
[Component ](http://plantuml.com/component-diagram ), [State ](http://plantuml.com/state-diagram ),
and [Object ](http://plantuml.com/object-diagram ) diagrams. You do not need to use the PlantUML
diagram delimiters `@startuml` /`@enduml` as these are replaced by the AsciiDoc `plantuml` block.
2017-01-15 19:07:02 -05:00
Some parameters can be added to the AsciiDoc block definition:
2016-11-28 12:41:29 -05:00
- *format*: Can be either `png` or `svg` . Note that `svg` is not supported by
all browsers so use with care. The default is `png` .
- *id*: A CSS id added to the diagram HTML tag.
- *width*: Width attribute added to the img tag.
- *height*: Height attribute added to the img tag.
2017-01-15 19:07:02 -05:00
Markdown does not support any parameters and will always use PNG format.
2017-04-20 07:11:19 -04:00
2017-08-29 10:04:32 -04:00
[ce-8537]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/8537