-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgitlab-projects.html
More file actions
executable file
·227 lines (224 loc) · 18.9 KB
/
gitlab-projects.html
File metadata and controls
executable file
·227 lines (224 loc) · 18.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
<!DOCTYPE html>
<html lang="en">
<head>
<script data-blockingmode="auto" data-cbid="272e4128-6678-430d-aa67-2f4d13d1d783" id="Cookiebot" src="https://consent.cookiebot.com/uc.js" type="text/javascript"></script>
<meta charset="utf-8"/>
<meta content="IE=edge" http-equiv="X-UA-Compatible"/>
<meta content="True" name="HandheldFriendly"/>
<meta content="width=device-width, initial-scale=1.0" name="viewport"/> <meta content="" name="robots"/> <link href="https://fonts.googleapis.com/css2?family=Source+Code+Pro:ital,wght@0,400;0,700;1,400&family=Source+Sans+Pro:ital,wght@0,300;0,400;0,700;1,400&display=swap" rel="stylesheet"/> <link href="https://www.robin-beer.de/theme/stylesheet/style.min.css" rel="stylesheet" type="text/css"/> <link href="https://www.robin-beer.de/theme/pygments/vs.min.css" id="pygments-light-theme" rel="stylesheet" type="text/css"/>
<link href="https://www.robin-beer.de/theme/font-awesome/css/fontawesome.css" rel="stylesheet" type="text/css"/>
<link href="https://www.robin-beer.de/theme/font-awesome/css/brands.css" rel="stylesheet" type="text/css"/>
<link href="https://www.robin-beer.de/theme/font-awesome/css/solid.css" rel="stylesheet" type="text/css"/> <link href="https://www.robin-beer.de/feeds/all.atom.xml" rel="alternate" title="Robin Beer Atom" type="application/atom+xml"/> <link href="/images/favicon_squared.ico" rel="shortcut icon" type="image/x-icon"/>
<link href="/images/favicon_squared.ico" rel="icon" type="image/x-icon"/> <!-- Google Analytics -->
<script type="text/javascript">
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-160647513-1', 'auto');
ga('send', 'pageview');
</script>
<!-- End Google Analytics --> <meta content="Robin Beer" name="author"/>
<meta content="In this article you will learn how to use boards in GitLab to organize your issues using agile methods." name="description"/>
<meta content="GitLab, projects, agile, KanBan, productivity, automation, GitHub" name="keywords"/>
<meta content="Robin Beer" property="og:site_name">
<meta content="Use GitLab to manage your issues in an agile way" property="og:title"/>
<meta content="In this article you will learn how to use boards in GitLab to organize your issues using agile methods." property="og:description"/>
<meta content="en_US" property="og:locale"/>
<meta content="https://www.robin-beer.de/gitlab-projects.html" property="og:url"/>
<meta content="article" property="og:type"/>
<meta content="2020-05-03 00:00:00+02:00" property="article:published_time"/>
<meta content="" property="article:modified_time"/>
<meta content="https://www.robin-beer.de/author/robin-beer.html" property="article:author"/>
<meta content="Tools" property="article:section">
<meta content="GitLab" property="article:tag"/>
<meta content="projects" property="article:tag"/>
<meta content="agile" property="article:tag"/>
<meta content="KanBan" property="article:tag"/>
<meta content="productivity" property="article:tag"/>
<meta content="automation" property="article:tag"/>
<meta content="GitHub" property="article:tag"/>
<meta content="/images/BEER_2018_2896_small.jpg" property="og:image"/>
<title>Robin Beer – Use GitLab to manage your issues in an agile way</title>
</meta></meta><link href="https://www.robin-beer.de\gitlab-projects.html" rel="canonical"/><script type="application/ld+json">{"@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{"@type": "ListItem", "position": 1, "name": "Robin Beer", "item": "https://www.robin-beer.de"}, {"@type": "ListItem", "position": 2, "name": "Gitlab projects", "item": "https://www.robin-beer.de\\gitlab-projects.html"}]}</script><script type="application/ld+json">{"@context": "https://schema.org", "@type": "Article", "author": {"@type": "Person", "name": "Robin Beer"}, "publisher": {"@type": "Organization", "name": "Robin Beer"}, "headline": "Use GitLab to manage your issues in an agile way", "about": "Tools", "datePublished": "2020-05-03 00:00"}</script></head>
<body class="light-theme">
<aside>
<div>
<a href="https://www.robin-beer.de/">
<img alt="Robin Beer" src="/images/BEER_2018_2896_small.jpg" title="Robin Beer"/>
</a>
<h1>
<a href="https://www.robin-beer.de/">Robin Beer</a>
</h1>
<p>Energy Data Scientist</p> <nav>
<ul class="list">
<li>
<a href="https://www.robin-beer.de/pages/about.html#about" target="_self">
About
</a>
</li>
<li>
<a href="https://www.robin-beer.de" target="_self">Home</a>
</li>
</ul>
</nav>
<ul class="social">
<li>
<a class="sc-twitter" href="https://twitter.com/R_E_Beer" target="_blank">
<i class="fab fa-twitter"></i>
</a>
</li>
<li>
<a class="sc-linkedin" href="https://www.linkedin.com/in/robin-beer-7595b680/" target="_blank">
<i class="fab fa-linkedin"></i>
</a>
</li>
<li>
<a class="sc-github" href="https://github.com/Zaubeerer" target="_blank">
<i class="fab fa-github"></i>
</a>
</li>
<li>
<a class="sc-envelope-o" href="mailto:dev@robin-beer.de" target="_blank">
<i class="fab fa-envelope-o"></i>
</a>
</li>
</ul>
</div>
</aside>
<main>
<article class="single">
<header>
<h1 id="gitlab-projects">Use GitLab to manage your issues in an agile way</h1>
<p>
Posted on Sun 03 May 2020 in <a href="https://www.robin-beer.de/category/tools.html">Tools</a>
</p>
</header>
<div>
<p>When you start working in bigger projects, you may know the problem:
Many issues in different projects and groups can become quite confusing.</p>
<p>It would be nice to organize issues in boards, as I described in the <a href="https://www.robin-beer.de/github-projects.html#github-projects">GitHub project boards article</a>, right?</p>
<p>It's possible in GitLab, too! And GitLab has a more automatized approach, which gets you up and running quicker.</p>
<p>So let's dive in.</p>
<h2>Initialization of a GitLab group with several subgroups and projects</h2>
<p>We need a complex GitLab structure consisting of a group with several subgroups and projects.
If you already have one, you may skip the first two sections and directly go to <a href="#creation-of-boards">creation of boards</a>.</p>
<p>First, create a new group on www.gitlab.com/dashboard/groups, analogously to the <a href="https://gitlab.com/demonstration-group">demonstration group</a> that I created for this tutorial, by clicking on <code>New group</code>:</p>
<p><img alt="New group illustration" src="https://www.robin-beer.de/Tools/images/gitlab-boards/2020-05-03-17-28-16.png"/></p>
<p>Then, populate the group with subgroups and projects:</p>
<p><img alt="group structure" src="https://www.robin-beer.de/Tools/images/gitlab-boards/2020-05-03-18-09-41.png"/></p>
<p>Now, instead of manually filling the projects with issues, you might want to import them from previously exported GitLab projects.</p>
<h2>Create projects based on exported projects</h2>
<p>To export a project open it and go to <code>Settings > General > Advanced > Export project</code>. A link will be generated and send to you via email such that you can download the project export file containing all milestones, files and issues of the project. If you are not able to export projects from my <a href="https://gitlab.com/demonstration-group">demonstration group</a>, you can download the export files that I uploaded to the project <a href="https://gitlab.com/demonstration-group/project-exports">Project Exports</a>.</p>
<p>To import the exported project, simply click on <code>New project</code> and then select <code>Import project > GitLab export</code>:</p>
<p><img alt="Import GitLab export" src="https://www.robin-beer.de/Tools/images/gitlab-boards/2020-05-03-17-42-02.png"/></p>
<p>Fill in a name and <code>Choose File</code> the previously downloaded project export. That's it! You have created a project based on an export, so all issues from the export should be included.</p>
<p>When creating issues manually, you might notice, that you can't create issues in groups, but only in projects. Therefore, the groups <code>Team 1</code> and <code>Team 2</code> need projects, too.</p>
<p>If you have a simplified, complex subgroup and project structure, move on to the next section.</p>
<h2>Creation of boards</h2>
<p>No need to create anything, GitLab has you covered!</p>
<p>Open the project <a href="https://gitlab.com/demonstration-group/code/fancy-frontend">fancy frontend</a> and in the left sidebar, go to <code>Issues > Boards</code> and voilà, the boards are already available:</p>
<p><img alt="How to open the issue board" src="https://www.robin-beer.de/Tools/images/gitlab-boards/2020-05-03-18-15-46.png"/></p>
<p>Alternatively, you can open the board by clicking on this <a href="https://gitlab.com/demonstration-group/code/fancy-frontend">Fancy Frontend Board URL</a>. This is possible, because each board has its own URL which you can save as a shortcut in your browser.</p>
<p>The board should look like the following:</p>
<p><img alt="Issue board" src="https://www.robin-beer.de/Tools/images/gitlab-boards/2020-05-03-18-18-45.png"/></p>
<p>The <code>columns</code> are referred to as <code>lists</code> by GitLab. The lists <code>Open</code> and <code>Closed</code> have been automatically generated and <code>To Do</code> and <code>Doing</code> are suggested as <code>default lists</code>.</p>
<p>However, I suggest to create different lists than the default lists so just click <code>Nevermind, I'll use my own</code>.</p>
<h2>Creation of columns (lists)</h2>
<p>In GitLab, you can create lists based on labels. Therefore, you first have to create a label to then create a respective list on the GitLab boards. You can create these labels on project or group level.
I suggest creating the labels <code>TO DO</code> and <code>DOING</code> on the highest group level, such that it is available in all groups and projects. </p>
<p>Therefore, open the highest group (i.e. demonstration group in my case) and go to <code>Issues > Labels</code>. Then, click on <code>New label</code> and create the following labels:</p>
<p><img alt="Group label creation" src="https://www.robin-beer.de/Tools/images/gitlab-boards/2020-05-03-18-27-53.png"/></p>
<p>Go back to the project board, you have previously visited and <code>Add list</code> the new labels:</p>
<p><img alt="Add list" src="https://www.robin-beer.de/Tools/images/gitlab-boards/2020-05-03-18-29-19.png"/></p>
<p>Now, you can drag and drop from the open issues (i.e. the backlog) to the <code>TODO</code> and <code>DOING</code> label:</p>
<p><img alt="Updated issue board view" src="https://www.robin-beer.de/Tools/images/gitlab-boards/2020-05-03-18-31-04.png"/></p>
<p>With this, you can already reproduce the respective functionality I described in the <a href="https://www.robin-beer.de/github-projects.html#github-projects">GitHub project boards article</a>.</p>
<p>However, there are some more useful functionalities in GitLab's issue boards.</p>
<h2>Board scope</h2>
<p>The issues that have been created in the different projects are accessible via the issue boards of the groups. Therefore, just go to the highest group again and go to <code>Issues > Board</code>:</p>
<p><img alt="Group issue board" src="https://www.robin-beer.de/Tools/images/gitlab-boards/2020-05-03-18-35-42.png"/></p>
<p>Again, you have to create the lists based on your own labels. So click on <code>Nevermind, I'll use my own</code> and <code>Add list</code>:</p>
<p><img alt="Group issue board - cleaned" src="https://www.robin-beer.de/Tools/images/gitlab-boards/2020-05-03-18-36-50.png"/></p>
<p>As we used the highest group labels, the project issues are automatically moved in the respective lists. Awesome!</p>
<p>From this high-level view, you can drag and drop the issues to the different lists. Additionally, the location of the projects in which the issues are defined is indicated on the issue cards. And you can create issues simply by clicking on the <code>+</code> of the respective lists, selecting the project where to create the issue in and naming it.</p>
<h2>Further useful functionalities</h2>
<p>GitLab provides further useful functionalities, such as <a href="#quick-actions-using-the-right-sidebar">quick actions using the right sidebar</a>, <a href="#filter-issue-boards">filtering issues</a> and <a href="#create-additional-labels-%22high-priority%22-and-%22low-priority%22">creation of further labels</a>.</p>
<h3>Quick actions using the right sidebar</h3>
<p>From the issue board, you can <code>open an issue by clicking on its title</code>. Additionally, you can <code>open the right sidebar by clicking on the issue card surface</code> (not on the title). That sidebar offers many quick actions such as assigning, milestone and more:</p>
<p><img alt="quick action sidebar" src="https://www.robin-beer.de/Tools/images/gitlab-boards/2020-05-03-18-49-15.png"/></p>
<h3>Filter issue boards</h3>
<p>By clicking in the <code>Search or filter results...</code> form, you can easily filter for assignees, milestones etc. thus reducing the amount of shown issues based on your criteria:</p>
<p><img alt="filtered issue board" src="https://www.robin-beer.de/Tools/images/gitlab-boards/2020-05-03-18-51-05.png"/></p>
<p>As opposed to GitHub, you don't have to type in exactly what you search, as GitLab will automatically suggest you different options. Neat!</p>
<h3>Create additional labels "high priority" and "low priority"</h3>
<p>To visualize priority implicitly, the issues can be sorted according to their priority (high position = high priority) within their <code>lists</code>.</p>
<p>Additionally, further issue labels can be created to visualize priority explicitly. Therefore, create the <code>labels</code> named <code>high priority</code> and <code>low priority</code> as described in <a href="#creation-of-columns-lists">this previous section</a> on the highest group level.</p>
<p>Using the quick actions on the sidebar, you can add further labels to the issues, such that they now show the priority labels:</p>
<p><img alt="priority labels on issue board" src="https://www.robin-beer.de/Tools/images/gitlab-boards/2020-05-03-18-56-23.png"/></p>
<h2>Summary & Conclusion</h2>
<p>In this article, we have checked out how to use GitLabs <code>issue boards</code> to organize your issues into <code>lists</code> (columns).</p>
<p>Therefore, we have used the built-in group and project boards. Using the columns <code>Open</code>, <code>To Do</code>, <code>Doing</code>, <code>Waiting for Feedback</code> and <code>Closed</code>, we can now intuitively visualize the progress of the issues.</p>
<p>Additionally, we can visualize the priority of the issues implicitly using the position (highest = highest priority) as well as explicitly using labels <code>high priority</code> and <code>low priority</code>.</p>
<p>We have seen, that issue board creation is as easy as it can be, because GitLab just provides them out-of-the-box for different levels (project, group, highest group). Additionally, one does not need to create automation rules, because GitLab manages lists as a function of labels.</p>
<p>So, what are you waiting for? Get back control over all the open issues and manage them using <code>GitLab's issue boards</code>!</p>
<p>Whether you use the <code>project board</code> with <a href="https://www.scrum.org/resources/what-is-scrum">Scrum</a> or <a href="https://www.atlassian.com/agile/kanban">KanBan</a>, it will simplify prioritization and visualization of progress.</p>
<p>This can also be a game-changer in communicating workload and available resources with your colleagues, your mentors or your boss.</p>
<hr/>
<p>You like the idea of issue organization into boards, but are using GitHub?</p>
<p>Check out <a href="https://www.robin-beer.de/github-projects.html#github-projects">the GitHub project boards article</a>!</p>
<p>Cheers!</p>
<p>Robin</p>
</div>
<div class="tag-cloud">
<p>
<a href="https://www.robin-beer.de/tag/gitlab.html">GitLab</a>
<a href="https://www.robin-beer.de/tag/projects.html">projects</a>
<a href="https://www.robin-beer.de/tag/agile.html">agile</a>
<a href="https://www.robin-beer.de/tag/kanban.html">KanBan</a>
<a href="https://www.robin-beer.de/tag/productivity.html">productivity</a>
<a href="https://www.robin-beer.de/tag/automation.html">automation</a>
<a href="https://www.robin-beer.de/tag/github.html">GitHub</a>
</p>
</div>
<!-- Disqus -->
<div id="disqus_thread"></div>
<script type="text/javascript">
var disqus_shortname = 'robin-beer';
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<noscript>
Please enable JavaScript to view comments.
</noscript>
<!-- End Disqus -->
</article>
<footer>
<p>© </p>
<p>
Built with <a href="http://getpelican.com" target="_blank">Pelican</a> using <a href="http://bit.ly/flex-pelican" target="_blank">Flex</a> theme
</p> </footer>
</main>
<script type="application/ld+json">
{
"@context" : "http://schema.org",
"@type" : "Blog",
"name": " Robin Beer ",
"url" : "https://www.robin-beer.de",
"image": "/images/BEER_2018_2896_small.jpg",
"description": "Pythonic Energy Data Science Blog"
}
</script> <a aria-label="View source on Github" class="github-corner" href="https://github.com/Zaubeerer">
<svg aria-hidden="true" height="80" style="fill:#151513; color:#fff; position: absolute; top: 0; border: 0; right: 0;" viewbox="0 0 250 250" width="80">
<path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path>
<path class="octo-arm" d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;">
</path>
<path class="octo-body" d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor">
</path>
</svg>
</a>
<style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style> </body>
</html>