<?xml version='1.0' encoding='utf-8' ?>
<feed xmlns='http://www.w3.org/2005/Atom'>
<title>GitLab</title>
<id>https://about.gitlab.com/blog/</id>
<link href='https://about.gitlab.com/blog/' />
<updated>2017-10-22T00:00:00+00:00</updated>
<author>
<name>The GitLab Team</name>
</author>
<entry>
<title>GitLab 10.1 Released with Image Discussions and Rejection of Unsigned Commits</title>
<link href='https://about.gitlab.com/2017/10/22/gitlab-10-1-released/' rel='alternate' />
<id>https://about.gitlab.com/2017/10/22/gitlab-10-1-released/</id>
<published>2017-10-22T00:00:00+00:00</published>
<updated>2017-10-22T00:00:00+00:00</updated>
<author>
<name>Achilleas Pipinellis</name>
</author>
<content type='html'>
&lt;p&gt;Καλημέρα! (Good morning!) This month we&#x27;re coming to you live from GitLab all
hands in Heraklion, Greece, to release GitLab 10.1. 🚀&lt;&#x2F;p&gt;

&lt;p&gt;Since GitLab&#x27;s inception, we envisioned a world where
&lt;a href=&quot;&#x2F;direction&#x2F;#vision&quot;&gt;everyone can contribute&lt;&#x2F;a&gt;, and with each release we&#x27;re one
step closer. With GitLab 10.1, we bring more tools for better collaboration,
enhanced security and authentication, as well as improved performance and UX.&lt;&#x2F;p&gt;



&lt;p&gt;For far too long a group of folks have been left out of the discussion and we
think it&#x27;s time that got fixed. With GitLab 10.1 we&#x27;re changing how you should
think about version control and discussion.
Commenting on lines of code works great when the discussion centers around text,
but what about images? After all, if the code being written has an app UI, web
page, or generates a printed asset then it makes sense that you&#x27;d want to be
able to talk about text and images in the same way. With
&lt;a href=&quot;#image-discussions&quot;&gt;Image Discussions&lt;&#x2F;a&gt; we&#x27;re opening up a whole new way to
collaborate. Extending on collaboration, you can now
&lt;a href=&quot;#merge-requests-across-forks&quot;&gt;create merge requests across forks&lt;&#x2F;a&gt; of a
canonical repository.&lt;&#x2F;p&gt;

&lt;p&gt;Being able to work under a secure environment is very important, and with each
release we are constantly improving the security and authentication mechanisms.
This time, we have added &lt;a href=&quot;#ldap-group-sync-filters&quot;&gt;LDAP group sync filters&lt;&#x2F;a&gt;,
as well as the ability to &lt;a href=&quot;#reject-unsigned-commits&quot;&gt;reject unsigned commits&lt;&#x2F;a&gt;.
The &lt;a href=&quot;#improved-admin-audit-log&quot;&gt;admin audit log&lt;&#x2F;a&gt; has been improved to also
include more metrics and &lt;a href=&quot;#signing-commits-with-gpg-subkeys&quot;&gt;GPG subkeys support&lt;&#x2F;a&gt; has
been added.&lt;&#x2F;p&gt;

&lt;p&gt;An open source project can attract a lot of visitors and contributors. Although
one would expect civilized discussions to take place, that&#x27;s not always
the case. With GitLab 10.1, a moderation tool is in place and you are able to
&lt;a href=&quot;#lock-discussions&quot;&gt;lock discussions on issues and merge requests&lt;&#x2F;a&gt;
to avoid unnecessary friction among your community.&lt;&#x2F;p&gt;

&lt;p&gt;Going strong with our &lt;a href=&quot;&#x2F;2017&#x2F;10&#x2F;11&#x2F;from-dev-to-devops&#x2F;&quot;&gt;DevOps vision&lt;&#x2F;a&gt;, we&#x27;ve
made it really easy to &lt;a href=&quot;#easy-creation-of-kubernetes-clusters-on-google-container-engine-(beta)&quot;&gt;create clusters on Google Container Engine from within
GitLab&lt;&#x2F;a&gt;.
The &lt;a href=&quot;#online-view-of-html-artifacts&quot;&gt;online view of HTML artifacts&lt;&#x2F;a&gt;
is also another great addition that will make it even easier to view your test
reports right from your web browser.&lt;&#x2F;p&gt;

&lt;p&gt;Dedicated to our open source stewardship, the
&lt;a href=&quot;#semi-linear-history-and-fast-forward-merge-requests-in-ce&quot;&gt;fast-forward option in merge requests&lt;&#x2F;a&gt;
previously on Enterprise Edition Starter is now brought to Community Edition.&lt;&#x2F;p&gt;

&lt;p&gt;In the UX side of things, GitLab now comes with an &lt;a href=&quot;#improved-new-project-page&quot;&gt;improved new project page&lt;&#x2F;a&gt;
so that it&#x27;s easier to decide the kind of project you want to create. Whether
you want to start from scratch, use a template or import from another provider,
you can now achieve it easier than before.&lt;&#x2F;p&gt;

&lt;p&gt;We&#x27;re dedicated to making GitLab perform better and faster under heavy load,
and GitLab 10.1 is no exception. This release comes with many
&lt;a href=&quot;#performance-improvements&quot;&gt;performance improvements&lt;&#x2F;a&gt; including faster viewing
of merge requests and general initial page load improvements.&lt;&#x2F;p&gt;
&lt;img src=&#x27;https:&#x2F;&#x2F;about.gitlab.com&#x2F;images&#x2F;10_1&#x2F;10_1-cover-image.jpg&#x27; class=&#x27;webfeedsFeaturedVisual&#x27; style=&#x27;display: none;&#x27; &#x2F;&gt;
&lt;!-- CTA --&gt;
&lt;!-- MVP --&gt;
&lt;section class=&#x27;mvp gray-section&#x27; id=&#x27;mvp&#x27;&gt;
&lt;div class=&#x27;release-post-section&#x27;&gt;
&lt;img alt=&#x27;GitLab MVP badge&#x27; src=&#x27;&#x2F;images&#x2F;mvp_badge.png&#x27; &#x2F;&gt;
&lt;h2 id=&#x27;mvp&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#mvp&#x27;&gt;&lt;&#x2F;a&gt;
This month&#x27;s Most Valuable Person (
&lt;a href=&#x27;&#x2F;mvp&#x2F;&#x27;&gt;MVP&lt;&#x2F;a&gt;
) is
&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;blackst0ne&quot;&gt;Vitaliy Klachkov&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;With an amazing &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests?scope=all&amp;amp;utf8=%E2%9C%93&amp;amp;state=merged&amp;amp;label_name[]=Community%20Contribution&amp;amp;milestone_title=10.1&amp;amp;author_username=blackst0ne&quot;&gt;23 contributions&lt;&#x2F;a&gt;
for GitLab 10.1, Vitaliy Klachkov is the MVP for this release! He’s been
contributing to GitLab for quite some time now and is a member of the
&lt;a href=&quot;&#x2F;core-team&quot;&gt;core team&lt;&#x2F;a&gt;. From API and UI additions to improving our test
suite (18 merge requests!), Vitaliy has rightfully earned a place to the
monthly MVP stand.&lt;&#x2F;p&gt;

&lt;p&gt;Thank you Vitaliy for your contributions!&lt;&#x2F;p&gt;

&lt;&#x2F;div&gt;
&lt;&#x2F;section&gt;
&lt;!-- top feature --&gt;
&lt;section class=&#x27;release-post-section&#x27; id=&#x27;top-feature&#x27;&gt;
&lt;h2 id=&#x27;image-discussions&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#image-discussions&#x27;&gt;&lt;&#x2F;a&gt;
Image Discussions
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Everyone can contribute to GitLab, and with this release, we are helping
interaction designers, visual designers, digital designers, graphic artists,
frontend developers, or just anyone who works with images collaborate better.&lt;&#x2F;p&gt;

&lt;p&gt;With discussions, you can now click a specific location
of an image (within a commit or a merge request), and start a discussion with
respect to that place in the image. You can even have multiple discussions
specifying different areas of an image.&lt;&#x2F;p&gt;

&lt;p&gt;Resolvability in the merge request
diff view works the same as before, so once a discussion is settled, simply
resolve it!&lt;&#x2F;p&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;10_1&#x2F;image_discussions.png&quot; alt=&quot;Image discussions&quot; class=&quot;shadow&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;div class=&#x27;column&#x27;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;discussions&#x2F;#image-discussions&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on
Image Discussions
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;&#x2F;section&gt;
&lt;!-- primary features --&gt;
&lt;section id=&#x27;primary-features&#x27;&gt;
&lt;hr &#x2F;&gt;
&lt;div class=&#x27;release-row&#x27;&gt;
&lt;div class=&#x27;column&#x27;&gt;
&lt;h2 id=&#x27;lock-discussions&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#lock-discussions&#x27;&gt;&lt;&#x2F;a&gt;
Lock Discussions
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;In this release, we are introducing a moderation feature to lock down
continued discussion in an issue or merge request. This is useful when
there is abuse or spam or you simply want to direct users to a different
place in GitLab (another issue, for example) for continued feedback and
collaboration. A project member with master access (or higher) has
permissions to lock and unlock them. When an issue or merge request is locked,
only project members can create new comments or edit existing ones.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;discussions&#x2F;#lock-discussions&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on locking discussions
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&#x27;column&#x27;&gt;
&lt;img alt=&#x27;Lock Discussions&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_1&#x2F;lock_discussion.png&#x27; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;hr &#x2F;&gt;
&lt;div class=&#x27;release-row image-left&#x27;&gt;
&lt;div class=&#x27;column text-column&#x27;&gt;
&lt;h2 id=&#x27;merge-requests-across-forks&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#merge-requests-across-forks&#x27;&gt;&lt;&#x2F;a&gt;
Merge Requests Across Forks
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Forks and merge requests are a great alternative to branch-based workflows as they
enable any developer to create an alternative copy of the repository rather than committing
changes directly against the primary codebase.&lt;&#x2F;p&gt;

&lt;p&gt;However, this means that it can make it harder for multiple people to work on the same
code at the same time as the forks are isolated.&lt;&#x2F;p&gt;

&lt;p&gt;With GitLab 10.1, you can now create merge requests between forks of a canonical repository.&lt;&#x2F;p&gt;

&lt;p&gt;This makes working together on forks now much simpler, allowing multiple developers to easily review and merge
across forks, bringing the code together before sending a merge request back to the canonical
repository.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;merge_requests&#x2F;&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on Merge Requests
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&#x27;column image-column&#x27;&gt;
&lt;img alt=&#x27;Merge Requests Across Forks&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_1&#x2F;create-merge-request-across-forks.png&#x27; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;hr &#x2F;&gt;
&lt;div class=&#x27;release-row&#x27;&gt;
&lt;div class=&#x27;column&#x27;&gt;
&lt;h2 id=&#x27;ldap-group-sync-filters&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#ldap-group-sync-filters&#x27;&gt;&lt;&#x2F;a&gt;
LDAP Group Sync Filters
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;As part of our growing Enterprise authentication capabilities, GitLab 10.1
supports the ability to synchronize LDAP groups to GitLab based on filters,
including &lt;em&gt;user attributes&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;For larger and more complex LDAP implementations there may be additional metadata
in LDAP to infer permissions, roles, or types of users. By leveraging group filters, GitLab makes it easier
to perform more user management capabilities directly from LDAP.&lt;&#x2F;p&gt;

&lt;p&gt;GitLab EES already allows basic synchronization of LDAP groups to GitLab groups. This is great functionality for basic
LDAP integration, but means that your LDAP structure needs to effectively mirror GitLab’s group structure.&lt;&#x2F;p&gt;

&lt;p&gt;The introduction of LDAP Group Sync Filters in GitLab EEP means that your existing LDAP structures
and attributes can be utilized in a more powerful way to manage your GitLab permissions.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;administration&#x2F;auth&#x2F;ldap-ee.html#group-sync&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on GitLab LDAP Group Sync
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&#x27;column&#x27;&gt;
&lt;img alt=&#x27;LDAP Group Sync Filters&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_1&#x2F;ldap_filters.png&#x27; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;hr &#x2F;&gt;
&lt;div class=&#x27;release-row image-left&#x27;&gt;
&lt;div class=&#x27;column text-column&#x27;&gt;
&lt;h2 id=&#x27;reject-unsigned-commits&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#reject-unsigned-commits&#x27;&gt;&lt;&#x2F;a&gt;
Reject Unsigned Commits
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Controlling and verifying identities are a key component to GitLab’s Enterprise
authentication features. GitLab 10.1 introduces two new mechanisms to enforce
user identity management whilst committing code.&lt;&#x2F;p&gt;

&lt;p&gt;Authors may be verified through &lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;repository&#x2F;gpg_signed_commits&#x2F;&quot;&gt;GPG&lt;&#x2F;a&gt; integration &lt;a href=&quot;&#x2F;2017&#x2F;08&#x2F;22&#x2F;gitlab-9-5-released&#x2F;&quot;&gt;introduced in GitLab 9.5&lt;&#x2F;a&gt;.
With GitLab Enterprise Edition Premium it is now possible to enforce verification and reject
any commits that are unsigned using push rules.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;push_rules&#x2F;push_rules.html#enabling-push-rules&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on GitLab Push Rules
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&#x27;column image-column&#x27;&gt;
&lt;img alt=&#x27;Reject Unsigned Commits&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_1&#x2F;reject_unsigned_commits.png&#x27; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;hr &#x2F;&gt;
&lt;div class=&#x27;release-row&#x27;&gt;
&lt;div class=&#x27;column&#x27;&gt;
&lt;h2 id=&#x27;easily-create-kubernetes-clusters-on-gke-(beta)&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#easily-create-kubernetes-clusters-on-gke-(beta)&#x27;&gt;&lt;&#x2F;a&gt;
Easily Create Kubernetes Clusters on GKE (Beta)
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Every application needs a home and in case of web apps or microservices, it can be a
&lt;a href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;&quot;&gt;Kubernetes cluster&lt;&#x2F;a&gt; that can also deploy
&lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;ci&#x2F;review_apps&#x2F;&quot;&gt;Review Apps&lt;&#x2F;a&gt; during the development cycle.
But setting up a cluster properly is not an easy task, and developers should focus on
writing the code, rather than setting up the infrastructure.&lt;&#x2F;p&gt;

&lt;p&gt;That’s why, in GitLab 10.1, we add the ability to connect your Google Account to your projects and to
create a brand new Kubernetes cluster on &lt;a href=&quot;https:&#x2F;&#x2F;cloud.google.com&#x2F;container-engine&#x2F;&quot;&gt;Google Container Engine (GKE)&lt;&#x2F;a&gt;
just by enabling the services for your account and specifying a few parameters.
The cluster is immediately ready to use and can be leveraged, among others, by
&lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;topics&#x2F;autodevops&#x2F;&quot;&gt;Auto DevOps&lt;&#x2F;a&gt; to have your apps live.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;clusters&#x2F;index.html&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on GKE clusters
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&#x27;column&#x27;&gt;
&lt;img alt=&#x27;Easily Create Kubernetes Clusters on GKE (Beta)&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_1&#x2F;kubernetes_cluster_creation.png&#x27; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;hr &#x2F;&gt;
&lt;div class=&#x27;release-row image-left&#x27;&gt;
&lt;div class=&#x27;column text-column&#x27;&gt;
&lt;h2 id=&#x27;online-view-of-html-artifacts&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#online-view-of-html-artifacts&#x27;&gt;&lt;&#x2F;a&gt;
Online View of HTML Artifacts
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;As many projects rely on GitLab for automated testing, developers also need to access the test results
in order to fully benefit of the feedback. This is just an example of how important it is to render HTML reports
and make them accessible in an easy way.&lt;&#x2F;p&gt;

&lt;p&gt;With GitLab 10.1, we introduce the online visualization of HTML files created by pipelines for public projects,
just one click away from the artifacts browser view.
Your test reports, code quality and coverage information are now very simple
to access directly from your browser, with no need to download them locally.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;pipelines&#x2F;job_artifacts.html#browsing-job-artifacts&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on browsing HTML artifacts
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&#x27;column image-column&#x27;&gt;
&lt;img alt=&#x27;Online View of HTML Artifacts&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_1&#x2F;html_artifacts_browser.png&#x27; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;section&gt;
&lt;!-- secondary features --&gt;
&lt;section id=&#x27;secodary-features&#x27;&gt;
&lt;div class=&#x27;release-post-section text-center zero-bottom-margin&#x27;&gt;
&lt;h2 id=&#x27;other-improvements-in-gitlab&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#other-improvements-in-gitlab&#x27;&gt;&lt;&#x2F;a&gt;
Other Improvements in GitLab 10.1
&lt;&#x2F;h2&gt;
&lt;&#x2F;div&gt;
&lt;div class=&#x27;release-row align-top divider&#x27;&gt;
&lt;div class=&#x27;column&#x27;&gt;
&lt;h3 id=&#x27;signing-commits-with-gpg-subkeys&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#signing-commits-with-gpg-subkeys&#x27;&gt;&lt;&#x2F;a&gt;
Signing Commits with GPG Subkeys
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;GPG integration was &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;2017&#x2F;08&#x2F;22&#x2F;gitlab-9-5-released&#x2F;#gpg-commit-verification&quot;&gt;introduced in GitLab 9.5&lt;&#x2F;a&gt;.
allowing you to sign commits to verify your identity. Many people use verified subkeys to sign
commits, and this is now supported and displayed as verified in GitLab 10.1.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;repository&#x2F;gpg_signed_commits&#x2F;index.html&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on
Signing Commits with GPG Subkeys
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;manage-milestones-with-developer-permissions&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#manage-milestones-with-developer-permissions&#x27;&gt;&lt;&#x2F;a&gt;
Manage Milestones with Developer Permissions
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;The developer role can now create, edit, and delete both project milestones
and group milestones. Managing milestones is a software delivery team activity,
so we wanted to extend that flexibility and responsibility to the users with Developer
access in GitLab.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;permissions.html&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on GitLab Permissions
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;improved-admin-audit-log&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#improved-admin-audit-log&#x27;&gt;&lt;&#x2F;a&gt;
Improved Admin Audit Log
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Knowing what happens inside your GitLab instance is an important aspect of many auditing
requirements.&lt;&#x2F;p&gt;

&lt;p&gt;GitLab EES (Enterprise Edition Starter) has basic Audit Event capability where each group or repository has
a simple log of events that have taken place.&lt;&#x2F;p&gt;

&lt;p&gt;The Admin Audit Log was &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;2017&#x2F;06&#x2F;22&#x2F;gitlab-9-3-released&#x2F;#centralized-audit-log&quot;&gt;introduced in GitLab 9.3&lt;&#x2F;a&gt;,
allowing administrators to access a centralized log of events from
Groups, Projects, and user actions. New user actions have been added to
the central audit log in GitLab 10.1:&lt;&#x2F;p&gt;

&lt;ul&gt;
  &lt;li&gt;Add or remove email addresses&lt;&#x2F;li&gt;
  &lt;li&gt;Password change and forgotten password&lt;&#x2F;li&gt;
  &lt;li&gt;Login failure&lt;&#x2F;li&gt;
  &lt;li&gt;Adding SSH keys and granting oAuth access&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;administration&#x2F;audit_events.html#audit-log-admin-only&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on Admin Audit Logs
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;name-of-gitlab-users-in-slack-notifications&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#name-of-gitlab-users-in-slack-notifications&#x27;&gt;&lt;&#x2F;a&gt;
Name of GitLab Users in Slack Notifications
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Prior to GitLab 10.1, Slack notifications included only the GitLab username.
In this release, the full name is displayed as well. The new format is
&lt;code&gt;First Last (username)&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;integrations&#x2F;slack.html&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on GitLab-Slack integration
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;secondary-email-confirmation&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#secondary-email-confirmation&#x27;&gt;&lt;&#x2F;a&gt;
Secondary Email Confirmation
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;For improved security, GitLab is able to enforce email confirmation on sign up.&lt;&#x2F;p&gt;

&lt;p&gt;This functionality is now extended to additional emails that are added to the user
account, ensuring that all email addresses added to user profiles are confirmed.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;security&#x2F;user_email_confirmation.html&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on
Secondary Email Confirmation
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;gitlab-geo-improvements&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#gitlab-geo-improvements&#x27;&gt;&lt;&#x2F;a&gt;
GitLab Geo Improvements
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Notable changes shipped with GitLab 10.1:&lt;&#x2F;p&gt;

&lt;ul&gt;
  &lt;li&gt;Improved repository sync performance supports larger GitLab instances (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;issues&#x2F;3453&quot;&gt;#3453&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;Improved handling of repository sync failures to prevent the queue
from becoming clogged with permanently failing tasks (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;issues&#x2F;3259&quot;&gt;#3259&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;Added migration path to hash-based storage format introduced in GitLab 10.0 (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;issues&#x2F;3118&quot;&gt;#3118&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;Attachments on personal snippets are now synced (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;issues&#x2F;3644&quot;&gt;#3644&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;After upgrading to 10.1, &lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;gitlab-geo&#x2F;updating_the_geo_nodes.html#upgrading-to-gitlab-10-0&quot;&gt;attachments will be re-synced&lt;&#x2F;a&gt; due to a bug&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;p&gt;See the &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests?scope=all&amp;amp;utf8=%E2%9C%93&amp;amp;state=merged&amp;amp;label_name[]=Geo&amp;amp;milestone_title=10.1&quot;&gt;full list of changes&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;gitlab-geo&#x2F;&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on GitLab Geo
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;gitlab-runner-10.1&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#gitlab-runner-10.1&#x27;&gt;&lt;&#x2F;a&gt;
GitLab Runner 10.1
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;We’re also releasing GitLab Runner 10.1 today! GitLab Runner is the open source project
that is used to run your CI&#x2F;CD jobs and send the results back to GitLab.&lt;&#x2F;p&gt;

&lt;h4 id=&quot;most-interesting-changes&quot;&gt;Most interesting changes:&lt;&#x2F;h4&gt;

&lt;ul&gt;
  &lt;li&gt;EmptyDir support for kubernetes volumes (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-runner&#x2F;merge_requests&#x2F;660&quot;&gt;merge request&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;Construct git remote URL based on configuration (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-runner&#x2F;merge_requests&#x2F;698&quot;&gt;merge request&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;Set git SSL information only for GitLab host (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-runner&#x2F;merge_requests&#x2F;687&quot;&gt;merge request&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;p&gt;List of all changes can be found in GitLab Runner’s &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-runner&#x2F;blob&#x2F;v10.1.0&#x2F;CHANGELOG.md&quot;&gt;CHANGELOG&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;runner&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on GitLab Runner
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&#x27;column&#x27;&gt;
&lt;h3 id=&#x27;improved-new-project-page&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#improved-new-project-page&#x27;&gt;&lt;&#x2F;a&gt;
Improved New Project Page
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Creating a &lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;#project-39-s-features&quot;&gt;project&lt;&#x2F;a&gt;
is the first step when getting started with GitLab,
and we’ve improved the &lt;em&gt;New Project&lt;&#x2F;em&gt; page to make this simpler. Now it’s
easier to take advantage of Project Templates (&lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;2017&#x2F;08&#x2F;22&#x2F;gitlab-9-5-released&#x2F;#project-templates&quot;&gt;introduced in GitLab 9.5&lt;&#x2F;a&gt;) to create
a project with a working example code and pre-configured CI,
create a blank project, or import an existing project from elsewhere.&lt;&#x2F;p&gt;

&lt;img alt=&#x27;Improved New Project Page&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_1&#x2F;new_project.png&#x27; &#x2F;&gt;
&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ce&#x2F;gitlab-basics&#x2F;create-project.html&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on creating projects in GitLab
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;improved-internationalization&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#improved-internationalization&#x27;&gt;&lt;&#x2F;a&gt;
Improved Internationalization
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;As part of our ongoing effort to internationalize GitLab, we have now externalised
strings in the Branches, Group and Wiki pages allowing our translation community to add
more languages and strings to GitLab.&lt;&#x2F;p&gt;

&lt;p&gt;If you are interested in contributing to GitLab’s Internationalization efforts, we welcome
you to join our &lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ce&#x2F;development&#x2F;i18n&#x2F;index.html&quot;&gt;translation community&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;img alt=&#x27;Improved Internationalization&#x27; src=&#x27;&#x2F;images&#x2F;9_X&#x2F;feature-a.png&#x27; &#x2F;&gt;
&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ce&#x2F;development&#x2F;i18n&#x2F;index.html&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on translating GitLab
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;semi-linear-history-and-fast-forward-merge-requests-in-ce&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#semi-linear-history-and-fast-forward-merge-requests-in-ce&#x27;&gt;&lt;&#x2F;a&gt;
Semi-linear History and Fast-forward Merge Requests in CE
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;While engaging with the GitLab community, lots of folks have told us that even
in small teams, they want flexibility when choosing a merge method. With
this release, we are taking
&lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;merge_requests&#x2F;#semi-linear-history-merge-requests&quot;&gt;semi-linear history&lt;&#x2F;a&gt;
and &lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;merge_requests&#x2F;#fast-forward-merge-requests&quot;&gt;fast-forward merge requests&lt;&#x2F;a&gt;
from GitLab Enterprise Editions into GitLab Community Edition (CE),
so that all users can enjoy them.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;merge_requests&#x2F;&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on Merge Requests
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;new-keyword-for-automatically-closing-issues&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#new-keyword-for-automatically-closing-issues&#x27;&gt;&lt;&#x2F;a&gt;
New keyword for Automatically Closing Issues
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;You can now use a new keyword, &lt;code&gt;implements&lt;&#x2F;code&gt; (and its variants), in a commit message
or merge request description to signal automatically closing an issue. This joins the existing
keywords such as &lt;code&gt;closes&lt;&#x2F;code&gt;, &lt;code&gt;fixes&lt;&#x2F;code&gt;, and &lt;code&gt;resolves&lt;&#x2F;code&gt; (and their variants).&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;issues&#x2F;automatic_issue_closing.html#default-closing-pattern-value&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on Automatic Issue Closing patterns
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;omnibus-improvements&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#omnibus-improvements&#x27;&gt;&lt;&#x2F;a&gt;
Omnibus Improvements
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;ul&gt;
  &lt;li&gt;Postgres has been updated to 9.6.5.&lt;&#x2F;li&gt;
  &lt;li&gt;Prometheus has been updated to 1.7.2, along with Postgres exporter 0.2.3 and Redis exporter 0.12.2.&lt;&#x2F;li&gt;
  &lt;li&gt;Additional Postgres settings are now configurable within &lt;code&gt;gitlab.rb&lt;&#x2F;code&gt;: &lt;code&gt;effective_io_concurrency&lt;&#x2F;code&gt;, &lt;code&gt;max_worker_processes&lt;&#x2F;code&gt;, &lt;code&gt;max_parallel_workers_per_gather&lt;&#x2F;code&gt;, &lt;code&gt;log_lock_waits&lt;&#x2F;code&gt;, &lt;code&gt;track_io_timing&lt;&#x2F;code&gt;, and &lt;code&gt;deadlock_timeout&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;omnibus&#x2F;roles&#x2F;&quot;&gt;Roles have been added&lt;&#x2F;a&gt; to streamline configuration of GitLab in highly available installations.&lt;&#x2F;li&gt;
  &lt;li&gt;Mattermost remains at version 4.2.0.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;omnibus&#x2F;&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on Omnibus GitLab
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;performance-improvements&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#performance-improvements&#x27;&gt;&lt;&#x2F;a&gt;
Performance Improvements
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Performance is an important part of GitLab, allowing GitLab to scale to hundreds of
thousands of users.&lt;&#x2F;p&gt;

&lt;p&gt;GitLab 10.1 includes 20 performance improvements, including faster viewing of merge
requests, faster importing from GitHub and general initial page load improvements.
The Container Registry page is now paginated, making it much faster. Project search from the
toolbar has been optimized as has viewing projects and issues. The Rebase button
is now also significantly faster.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;gitlab.com&#x2F;groups&#x2F;gitlab-org&#x2F;issues?scope=all&amp;amp;utf8=%E2%9C%93&amp;amp;state=closed&amp;amp;label_name[]=performance&amp;amp;milestone_title=10.1&#x27; target=&#x27;_blank&#x27;&gt;
See all the performance improvements in GitLab 10.1
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;section&gt;
&lt;!-- complementary information --&gt;
&lt;!-- deprecations --&gt;
&lt;section class=&#x27;release-post-section&#x27; id=&#x27;deprecations&#x27;&gt;
&lt;h2 class=&#x27;text-center&#x27; id=&#x27;release-deprecations&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#release-deprecations&#x27;&gt;&lt;&#x2F;a&gt;
Deprecations
&lt;&#x2F;h2&gt;
&lt;h3 id=&#x27;the-&amp;lt;code&amp;gt;gitlab&amp;lt;&#x2F;code&amp;gt;-helm-chart&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#the-&amp;lt;code&amp;gt;gitlab&amp;lt;&#x2F;code&amp;gt;-helm-chart&#x27;&gt;&lt;&#x2F;a&gt;
The &lt;code&gt;gitlab&lt;&#x2F;code&gt; Helm chart
&lt;&#x2F;h3&gt;
&lt;p&gt;The &lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;install&#x2F;kubernetes&#x2F;gitlab_chart.html&quot;&gt;&lt;code&gt;gitlab&lt;&#x2F;code&gt; Helm chart&lt;&#x2F;a&gt;
is deprecated, and will be replaced by the new
&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;omnibus-gitlab&#x2F;issues&#x2F;2420&quot;&gt;cloud native GitLab chart&lt;&#x2F;a&gt;.
 We are planning for an initial beta release of this new chart in 10.3.&lt;&#x2F;p&gt;

&lt;p&gt;A migration will be required to move from the current deprecated chart,
to the new cloud native GitLab chart.&lt;&#x2F;p&gt;

&lt;p&gt;
Due:
&lt;strong&gt;Dec 22nd, 2017.&lt;&#x2F;strong&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;mattermost-configuration-changes&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#mattermost-configuration-changes&#x27;&gt;&lt;&#x2F;a&gt;
Mattermost Configuration Changes
&lt;&#x2F;h3&gt;
&lt;p&gt;With the release of GitLab 11.0, the number of Mattermost configuration options supported within
&lt;code&gt;gitlab.rb&lt;&#x2F;code&gt; will be reduced. We will continue to support the
&lt;a href=&quot;http:&#x2F;&#x2F;docs.gitlab.com&#x2F;omnibus&#x2F;gitlab-mattermost&#x2F;#upgrading-gitlab-mattermost-from-versions-prior-to-11-0&quot;&gt;core configuration settings&lt;&#x2F;a&gt;
necessary to run Mattermost, and set up the integration with GitLab. Going forward, other
configuration settings should be set
directly within the Mattermost console, or &lt;a href=&quot;http:&#x2F;&#x2F;docs.gitlab.com&#x2F;omnibus&#x2F;gitlab-mattermost&#x2F;#upgrading-gitlab-mattermost-from-versions-prior-to-11-0&quot;&gt;passed as environment variables&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;Presently with two applications attempting to write to the same config file, changes can be lost.&lt;&#x2F;p&gt;

&lt;p&gt;
Due:
&lt;strong&gt;GitLab 11.0&lt;&#x2F;strong&gt;
&lt;&#x2F;p&gt;
&lt;&#x2F;section&gt;
&lt;!-- Updgrade barometer --&gt;
&lt;section class=&#x27;release-post-section&#x27; id=&#x27;upgrade-barometer&#x27;&gt;
&lt;h2 class=&#x27;text-center&#x27; id=&#x27;barometer&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#barometer&#x27;&gt;&lt;&#x2F;a&gt;
Upgrade barometer
&lt;&#x2F;h2&gt;
&lt;p&gt;To upgrade to GitLab 10.1 from the latest 10.0 version, no downtime is required.&lt;&#x2F;p&gt;

&lt;p&gt;To upgrade without downtime, please consult the
&lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;update&#x2F;README.html#upgrading-without-downtime&quot;&gt;documentation on downtimeless upgrades&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;You can check the status of background migrations by running this command
from the Rails console: &lt;code&gt;Sidekiq::Queue.new(&#x27;background_migration&#x27;).size&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;

&lt;&#x2F;section&gt;

</content>
</entry>
<entry>
<title>We&#x27;re coming to you live from Crete, at the GitLab Summit!</title>
<link href='https://about.gitlab.com/2017/10/17/watch-the-gitlab-summit-from-your-desk/' rel='alternate' />
<id>https://about.gitlab.com/2017/10/17/watch-the-gitlab-summit-from-your-desk/</id>
<published>2017-10-17T00:00:00+00:00</published>
<updated>2017-10-17T00:00:00+00:00</updated>
<author>
<name>Emily von Hoffmann</name>
</author>
<content type='html'>&lt;p&gt;It&#x27;s that time again! Every nine months, our entire remote workforce descends on one location for the &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;culture&#x2F;summits&#x2F;&quot;&gt;GitLab Summit&lt;&#x2F;a&gt;. This year, we&#x27;ll be in Crete, and you&#x27;re invited!&lt;&#x2F;p&gt;



&lt;p&gt;Before you go off and buy a plane ticket, we should clarify that there probably isn&#x27;t room for all of you on the island. But we&#x27;re trying something new this Summit — we&#x27;re live streaming every day to bring the experience to as many of our remote friends as possible.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;watch&quot;&gt;Watch&lt;&#x2F;h2&gt;

&lt;p&gt;We&#x27;ll be streaming on &lt;a href=&quot;https:&#x2F;&#x2F;rebrand.ly&#x2F;gitlab-summit-stream&quot;&gt;YouTube&lt;&#x2F;a&gt;. You can watch &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;team&#x2F;#sytses&quot;&gt;Sid&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;team&#x2F;#dzaporozhets&quot;&gt;Dmitriy&lt;&#x2F;a&gt;&#x27;s keynotes, our Santorini trip, &lt;a href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;forms&#x2F;d&#x2F;e&#x2F;1FAIpQLSf9PSEMkxdlYQnAmDcXvsqeeXe-O1kRECZopG9nmwfn_O5qgA&#x2F;viewform&quot;&gt;GitLabber-led user generated content (UGC) sessions&lt;&#x2F;a&gt;, the 10.1 release, and our final party can all be viewed in one place.&lt;&#x2F;p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;95FuYdcziLQ&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;&#x2F;iframe&gt;

&lt;h2 id=&quot;schedule&quot;&gt;Schedule&lt;&#x2F;h2&gt;

&lt;p&gt;We&#x27;ll likely make some changes to this schedule as we close in on kickoff, so please keep in mind it&#x27;s a WIP!&lt;&#x2F;p&gt;

&lt;h4 id=&quot;thursday-october-19&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=3EegHi0fdPQ&quot;&gt;Thursday, October 19&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;

&lt;p&gt;Watch Thursday&#x27;s live stream &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=3EegHi0fdPQ&quot;&gt;here&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;ul&gt;
  &lt;li&gt;10am-6pm UTC - Arrivals and getting to know GitLabbers&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;h4 id=&quot;friday-october-20&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=AopRnEbvgzE&quot;&gt;Friday, October 20&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;

&lt;p&gt;Watch Friday&#x27;s live stream &lt;a href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;AopRnEbvgzE&quot;&gt;here&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;ul&gt;
  &lt;li&gt;7am UTC - Welcome &amp;amp; keynote with GitLab CEO Sid Sijbrandij (&lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;sytses&quot;&gt;@sytses&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;8am UTC - AMA with GitLab CEO Sid Sijbrandij (chat your questions here or on Twitter using #GitLabSummit)&lt;&#x2F;li&gt;
  &lt;li&gt;9am UTC - Eat lunch with us!&lt;&#x2F;li&gt;
  &lt;li&gt;10am UTC - Join us live for our Amazing Race challenge&lt;&#x2F;li&gt;
  &lt;li&gt;12pm UTC - How GitLab Started keynote with CTO &amp;amp; Co-founder Dmitriy Zaporozhets (&lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;dzaporozhets&quot;&gt;@dzaporozhets&lt;&#x2F;a&gt;;chat your questions on YouTube or on Twitter using #GitLabSummit)&lt;&#x2F;li&gt;
  &lt;li&gt;1:15pm UTC - Award Ceremony and Happy Hour&lt;&#x2F;li&gt;
  &lt;li&gt;3pm UTC - GitLab BBQ&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;h4 id=&quot;saturday-october-21&quot;&gt;Saturday, October 21&lt;&#x2F;h4&gt;

&lt;p&gt;&lt;strong&gt;Due to WIFI issues, we were not able to live stream Saturday&#x27;s events. However,
we&#x27;ll be showing re-runs and highlight footage during &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=95FuYdcziLQ&quot;&gt;Sunday&#x27;s stream&lt;&#x2F;a&gt;.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;

&lt;ul&gt;
  &lt;li&gt;4am - 5pm UTC Day trip to Santorini&lt;&#x2F;li&gt;
  &lt;li&gt;5:15 pm UTC - Join us for dinner and hallway conversations&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;h4 id=&quot;sunday-october-22&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=95FuYdcziLQ&quot;&gt;Sunday, October 22&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;ul&gt;
  &lt;li&gt;6-7am UTC - AMAs - Send us your questions ahead of time on Twitter with #GitLabSummit&lt;&#x2F;li&gt;
  &lt;li&gt;6-6:15am Mark Pundsack (@MarkPundsack), Head of Product&lt;&#x2F;li&gt;
  &lt;li&gt;6:15-6:30am Barbie Graver (@BarbieGraver), Chief Culture Officer&lt;&#x2F;li&gt;
  &lt;li&gt;6:30-6:45am Sarrah Vesselov (@SVesselov), UX Lead&lt;&#x2F;li&gt;
  &lt;li&gt;7am UTC - Chat with our developers and engineers as they release GitLab 10.1&lt;&#x2F;li&gt;
  &lt;li&gt;9am-3pm UTC - Day trip to Heraklion&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;h4 id=&quot;monday-october-23&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=7r9mo-QwBbM&quot;&gt;Monday, October 23&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;

&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;forms&#x2F;d&#x2F;e&#x2F;1FAIpQLSf9PSEMkxdlYQnAmDcXvsqeeXe-O1kRECZopG9nmwfn_O5qgA&#x2F;viewform&quot;&gt;Vote for the UGC Sessions you want to see on the live stream!&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;ul&gt;
  &lt;li&gt;6-11am UTC - Send us your questions to have them answered live&lt;&#x2F;li&gt;
  &lt;li&gt;11am UTC - UGC Session 1&lt;&#x2F;li&gt;
  &lt;li&gt;12pm UTC - UGC Session 2&lt;&#x2F;li&gt;
  &lt;li&gt;1pm UTC - UGC Session 3&lt;&#x2F;li&gt;
  &lt;li&gt;2pm UTC - UGC Session 4&lt;&#x2F;li&gt;
  &lt;li&gt;3pm UTC - Join us for dinner&lt;&#x2F;li&gt;
  &lt;li&gt;5pm UTC - Join us for Game Night and a &lt;a href=&quot;https:&#x2F;&#x2F;gitter.im&#x2F;gitterHQ&#x2F;topics&#x2F;categories&#x2F;ama&quot;&gt;Gitter AMA&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;h4 id=&quot;tuesday-october-24&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=LRpkLBWA_sI&quot;&gt;Tuesday, October 24&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;

&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;forms&#x2F;d&#x2F;e&#x2F;1FAIpQLSf9PSEMkxdlYQnAmDcXvsqeeXe-O1kRECZopG9nmwfn_O5qgA&#x2F;viewform&quot;&gt;Vote for the UGC Sessions you want to see on the live stream!&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;ul&gt;
  &lt;li&gt;6-11am UTC Send us your questions to have them answered live&lt;&#x2F;li&gt;
  &lt;li&gt;11am UTC - UGC Session 1&lt;&#x2F;li&gt;
  &lt;li&gt;12pm UTC - UGC Session 2&lt;&#x2F;li&gt;
  &lt;li&gt;1pm UTC - UGC Session 3&lt;&#x2F;li&gt;
  &lt;li&gt;2pm UTC - UGC Session 4&lt;&#x2F;li&gt;
  &lt;li&gt;3pm UTC - Join us for dinner&lt;&#x2F;li&gt;
  &lt;li&gt;5pm UTC - Join the Toga Party!&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;h2 id=&quot;get-involved&quot;&gt;Get involved&lt;&#x2F;h2&gt;

&lt;p&gt;We want to see you there! &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;gitlab&quot;&gt;Tweet us&lt;&#x2F;a&gt; using #GitLabSummit to let us know your questions and comments. We&#x27;ll be giving away limited edition swag to people who chime in and ask questions on social, and we&#x27;ll also poll you to ask which UGC sessions you want live streamed. We&#x27;re so excited to share the Summit with our community for the first time, and we hope you&#x27;ll join us!&lt;&#x2F;p&gt;

&lt;p&gt;Read more about our company values in our &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;2016&#x2F;07&#x2F;12&#x2F;our-handbook-is-open-source-heres-why&#x2F;&quot;&gt;open source&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;handbook&#x2F;values&quot;&gt;handbook&lt;&#x2F;a&gt;, licensed by &lt;a href=&quot;https:&#x2F;&#x2F;creativecommons.org&#x2F;licenses&#x2F;by-sa&#x2F;4.0&#x2F;&quot;&gt;CC BY-SA 4.0&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;img src=&#x27;https:&#x2F;&#x2F;about.gitlab.com&#x2F;images&#x2F;blogimages&#x2F;greece-summit-2017.png&#x27; class=&#x27;webfeedsFeaturedVisual&#x27; style=&#x27;display: none;&#x27; &#x2F;&gt;</content>
</entry>
<entry>
<title>GitLab 10.0.4, 9.5.9, and 9.4.7 Released</title>
<link href='https://about.gitlab.com/2017/10/17/gitlab-10-dot-0-dot-4-security-release/' rel='alternate' />
<id>https://about.gitlab.com/2017/10/17/gitlab-10-dot-0-dot-4-security-release/</id>
<published>2017-10-17T00:00:00+00:00</published>
<updated>2017-10-17T00:00:00+00:00</updated>
<author>
<name>Brian Neel</name>
</author>
<content type='html'>&lt;p&gt;Today we are releasing versions 10.0.4, 9.5.9, and 9.4.7 for GitLab 
Community Edition (CE) and Enterprise Edition (EE).&lt;&#x2F;p&gt;

&lt;p&gt;These versions contain several security fixes, including fixes for two 
persistent Cross-Site Scripting (XSS) vulnerabilities, an open redirect vulnerability,
a bug when changing usernames that could leave behind and leak 
repositories, an information leakage vulnerability in private issue names, and
security updates for Ruby and libxml2. We recommend that all GitLab installations 
be upgraded to one of these versions.&lt;&#x2F;p&gt;

&lt;p&gt;Please read on for more details.&lt;&#x2F;p&gt;



&lt;h2 id=&quot;cross-site-scripting-xss-vulnerability-in-the-markdown-sanitization-filter&quot;&gt;Cross-Site Scripting (XSS) vulnerability in the Markdown sanitization filter&lt;&#x2F;h2&gt;

&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;SecurityYasin&quot;&gt;Yasin Soliman&lt;&#x2F;a&gt; via &lt;a href=&quot;https:&#x2F;&#x2F;www.hackerone.com&#x2F;&quot;&gt;HackerOne&lt;&#x2F;a&gt; reported a Cross-Site Scripting (XSS) vulnerability in the
GitLab markdown sanitization filter. The sanitization filter was not properly
stripping invalid characters from URL schemes and was therefore vulnerable to
persistent XSS attacks anywhere Markdown was supported. &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;issues&#x2F;38272&quot;&gt;#38272&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;h2 id=&quot;cross-site-scripting-xss-vulnerability-in-search-bar&quot;&gt;Cross-Site Scripting (XSS) vulnerability in search bar&lt;&#x2F;h2&gt;

&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;joshunger&quot;&gt;Josh Unger&lt;&#x2F;a&gt; reported a Cross-Site Scripting (XSS) vulnerability in the
issue search bar. Usernames were not being properly HTML escaped inside the author
filter would could allow arbitrary script execution. &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;issues&#x2F;38267&quot;&gt;#38267&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;h2 id=&quot;open-redirect-in-repository-git-redirects&quot;&gt;Open redirect in repository &lt;code&gt;git&lt;&#x2F;code&gt; redirects&lt;&#x2F;h2&gt;

&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;ericrafaloff.com&quot;&gt;Eric Rafaloff&lt;&#x2F;a&gt; via &lt;a href=&quot;https:&#x2F;&#x2F;www.hackerone.com&#x2F;&quot;&gt;HackerOne&lt;&#x2F;a&gt; reported that GitLab was vulnerable to an open redirect
vulnerability when redirecting requests for repository names that include the &lt;code&gt;git&lt;&#x2F;code&gt;
extension. GitLab was not properly removing dangerous parameters from the params
field before redirecting which could allow an attacker to redirect users to 
arbitrary hosts. &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;issues&#x2F;37715&quot;&gt;#37715&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;h2 id=&quot;username-changes-could-leave-repositories-behind&quot;&gt;Username changes could leave repositories behind&lt;&#x2F;h2&gt;

&lt;p&gt;An internal code review discovered that a bug in the code that moves repositories
during a username change could potentially leave behind projects, allowing an
attacker who knows the previous username to potentially steal the contents of
repositories on instances that are not configured with hashed namespaces. &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;issues&#x2F;38126&quot;&gt;#38126&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;h2 id=&quot;confidential-issue-names-could-leak-in-related-issues-feature&quot;&gt;Confidential issue names could leak in &quot;related issues&quot; feature&lt;&#x2F;h2&gt;

&lt;p&gt;An internal code review discovered that confidential issue titles could leak
when referenced as &quot;related issues&quot;. GitLab EE was not properly filtering confidential
issues in the related issues feature for users that did not have access to these
issues. &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;issues&#x2F;3435&quot;&gt;#3435&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;h2 id=&quot;ruby-update&quot;&gt;Ruby update&lt;&#x2F;h2&gt;

&lt;p&gt;The version of Ruby included with GitLab Omnibus CE+EE packages has been updated
to 2.3.5 to patch a potential SMTP injection vunerability that could allow attackers
to use a GitLab instance to send arbitrary emails. A patch is also included to
support the use of carriage returns as email separators in pipeline alert email 
recipient lists so that installations improperly using carriage returns as email 
separators do not break. &lt;a href=&quot;https:&#x2F;&#x2F;hackerone.com&#x2F;reports&#x2F;137631&quot;&gt;HackerOne Report&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;h2 id=&quot;libxml2-update&quot;&gt;Libxml2 update&lt;&#x2F;h2&gt;

&lt;p&gt;The version of libxml2 included with GitLab Omnibus CE+EE packages has been updated
to 2.9.6 to patch several security vulnerabilities. &lt;a href=&quot;http:&#x2F;&#x2F;xmlsoft.org&#x2F;news.html&quot;&gt;XMLSoft&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;h3 id=&quot;versions-affected&quot;&gt;Versions affected&lt;&#x2F;h3&gt;

&lt;p&gt;Cross-Site Scripting (XSS) vulnerability in markdown:&lt;&#x2F;p&gt;
&lt;ul&gt;
  &lt;li&gt;GitLab CE+EE 2.8.0-9.4.6, 9.5.0-9.5.8, 10.0.0-10.0.3&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;p&gt;Cross-Site Scripting (XSS) vulnerability in search bar&lt;&#x2F;p&gt;
&lt;ul&gt;
  &lt;li&gt;GitLab CE+EE 9.3.0-9.4.6, 9.5.0-9.5.8, 10.0.0-10.0.3&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;p&gt;Open redirect in repository git redirects&lt;&#x2F;p&gt;
&lt;ul&gt;
  &lt;li&gt;GitLab CE+EE 9.2.0-9.4.6, 9.5.0-9.5.8, 10.0.0-10.0.3&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;p&gt;Username changes could leave repositories behind&lt;&#x2F;p&gt;
&lt;ul&gt;
  &lt;li&gt;GitLab CE+EE 9.5.0-9.5.8, 10.0.0-10.0.3&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;p&gt;Confidential issue names could leak in &quot;related issues&quot; feature&lt;&#x2F;p&gt;
&lt;ul&gt;
  &lt;li&gt;GitLab EE 9.4.0-9.4.6, 9.5.0-9.5.8, 10.0.0-10.0.3&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;p&gt;Ruby update&lt;&#x2F;p&gt;
&lt;ul&gt;
  &lt;li&gt;GitLab CE+EE 8.14.0-9.4.6, 9.5.0-9.5.8, 10.0.0-10.0.3&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;p&gt;Libxml2 update&lt;&#x2F;p&gt;
&lt;ul&gt;
  &lt;li&gt;GitLab CE+EE 1.1.1-9.4.6, 9.5.0-9.5.8, 10.0.0-10.0.3&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;p&gt;We recommend that all installations running a version mentioned above be 
upgraded as soon as possible. No workarounds are available for these 
vulnerabilities.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;upgrade-barometer&quot;&gt;Upgrade barometer&lt;&#x2F;h2&gt;

&lt;p&gt;These versions do not include any migrations and will not require downtime.&lt;&#x2F;p&gt;

&lt;p&gt;Please be aware that by default the Omnibus packages will stop, run migrations, 
and start again, no matter how “big” or “small” the upgrade is. This behavior 
can be changed by adding a &lt;a href=&quot;http:&#x2F;&#x2F;doc.gitlab.com&#x2F;omnibus&#x2F;update&#x2F;README.html&quot;&gt;&#x2F;etc&#x2F;gitlab&#x2F;skip-auto-migrations file&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;updating&quot;&gt;Updating&lt;&#x2F;h2&gt;

&lt;p&gt;To update, check out our &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;update&quot;&gt;update page&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;enterprise-edition&quot;&gt;Enterprise Edition&lt;&#x2F;h2&gt;

&lt;p&gt;Interested in GitLab Enterprise Edition? Check out the &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;features&#x2F;#enterprise&quot;&gt;features exclusive to
EE&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;Access to GitLab Enterprise Edition is included with a
&lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;pricing&#x2F;&quot;&gt;subscription&lt;&#x2F;a&gt;. No time to upgrade GitLab
yourself? Subscribers receive upgrade and installation services.&lt;&#x2F;p&gt;
&lt;img src=&#x27;https:&#x2F;&#x2F;about.gitlab.com&#x2F;images&#x2F;default-blog-image.png&#x27; class=&#x27;webfeedsFeaturedVisual&#x27; style=&#x27;display: none;&#x27; &#x2F;&gt;</content>
</entry>
<entry>
<title>How to spot development issues and fix them fast</title>
<link href='https://about.gitlab.com/2017/10/16/how-to-spot-development-issues/' rel='alternate' />
<id>https://about.gitlab.com/2017/10/16/how-to-spot-development-issues/</id>
<published>2017-10-16T00:00:00+00:00</published>
<updated>2017-10-16T00:00:00+00:00</updated>
<author>
<name>Patrick Foster</name>
</author>
<content type='html'>&lt;p&gt;Development issues can be expensive to fix — and the later you uncover them, 
the worse it is. If you’re running (or dependent on) a development project it’s 
really important that you stay on the ball at all times. Communication, 
transparency, and accountability are all essential. Here are some development 
project red flags that you need to be aware of – as well as how you 
can address things if it looks like they are starting to go wrong…&lt;&#x2F;p&gt;



&lt;h2 id=&quot;track-developer-stress-and-coping-strategies&quot;&gt;Track developer stress and coping strategies&lt;&#x2F;h2&gt;

&lt;p&gt;&lt;strong&gt;Start with getting to know the team behind the work – learn how to track their
stress levels accurately.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;

&lt;p&gt;If you are working with developers or managing a team of them, you will start to
get a feel for their stress levels via your day-to-day interactions. If you know
them reasonably well, you will probably be able to recognize stress in the 
things that they say, or in way that they act. (&lt;a href=&quot;http:&#x2F;&#x2F;serendip.brynmawr.edu&#x2F;biology&#x2F;b103&#x2F;f03&#x2F;web1&#x2F;skim.html&quot;&gt;Everyone handles stress differently&lt;&#x2F;a&gt;, 
depending on their personality and past experience).&lt;&#x2F;p&gt;

&lt;p&gt;The easiest way to diagnose developer stress? Over-complication of simple tasks.
If you find it’s taking you about 16 emails to discuss some simple edits to a 
site menu, it’s probably a sign that something is wrong, and that undue pressure
is being applied somewhere along the line. Once we enter stressful realms, 
communication tends to get very fraught and people will start to feel on edge 
all the time.&lt;&#x2F;p&gt;

&lt;p&gt;It’s important to address any workflow or workload issues that might be causing 
stress, but don’t forget that one of the biggest stressors is probably other 
people. It could be that development personalities and job responsibilities are 
clashing in unproductive ways. Development teams need the right mix of people 
and skillsets in order to function harmoniously (just like any other team). 
&lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;2017&#x2F;05&#x2F;23&#x2F;attributes-of-successful-development-teams&#x2F;&quot;&gt;Does your team have all of these crucial attributes?&lt;&#x2F;a&gt; 
It could be that the team is out of balance somewhere, so spend some time with 
people in order to improve team dynamics and implement coping strategies.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;stop-little-things-from-snowballing&quot;&gt;Stop little things from snowballing&lt;&#x2F;h2&gt;

&lt;p&gt;If little tasks and small instructions are constantly getting ‘lost in briefing’
it could signal that there is a missing chain in the communication workflow. 
Small oversights can quickly build and create mountains of frustrations for the 
team. Missing even the most minute detail can completely derail an otherwise 
successful development project, so react immediately if you spot any oversights,
no matter how small.&lt;&#x2F;p&gt;

&lt;p&gt;Features like Issues and &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;features&#x2F;issueboard&#x2F;&quot;&gt;Issue Boards&lt;&#x2F;a&gt; can help everyone break down 
complex tasks into smaller individual ones and track their progress across the 
development lifecycle. Singular tasks are often be the best way for developers 
to tackle a subject – this is especially true for junior developers and 
trainees. Overloading people with too many tasks at once will crash their 
bandwidth, so approach briefs in a very ordered manner.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;adopt-slow-solutions-where-needed&quot;&gt;Adopt ‘slow’ solutions (where needed)&lt;&#x2F;h2&gt;

&lt;p&gt;Sometimes it’s not possible to whack a plaster on an issue and call it a day. 
Some solutions to development problems are just as complex as the problems 
themselves, and you need to focus on proper, rather than fast, implementation. 
You might need to factor in extra time or budget (gulp) in order to get a 
development project or team back on track. The effort you put into the (right) 
solution will pay off in the long run.&lt;&#x2F;p&gt;

&lt;p&gt;A good example of a ‘slow solution’ is the &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;2017&#x2F;05&#x2F;17&#x2F;learning-curve-is-the-biggest-challenge-developers-face-with-git&#x2F;&quot;&gt;steep learning curve developers face when adopting new tools and ways of working like Git&lt;&#x2F;a&gt; 
– but that shouldn’t put you off. It may be that right now your development team
need to spend some time getting to grips with a process, framework, or tool that
will save hundreds of development hours further down the line.&lt;&#x2F;p&gt;

&lt;p&gt;You may also want to take advantage of the &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;2017&#x2F;06&#x2F;19&#x2F;how-to-shorten-conversation-cycle&#x2F;&quot;&gt;Minimum Viable Change Principle&lt;&#x2F;a&gt; that 
takes into account the full scale of development complexity, but focuses on 
moving the project forwards with a minimum viable fix, allowing for further 
iterations when the time is right. This is a great strategy that should be 
implemented on a regular basis, especially when time is of the essence and a 
full raft of features is not immediately feasible.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;focus-on-logic&quot;&gt;Focus on logic&lt;&#x2F;h2&gt;

&lt;p&gt;Development is an extremely logical task, and you need to approach development 
troubleshooting in the same logical and methodical way. Development problems 
need to be fully mapped out in a logical sequence, not treated reactively with 
‘creative’ solutions.&lt;&#x2F;p&gt;

&lt;p&gt;Specificity is a really important thing when discussing potential development 
issues.  Unclear and vague pronouns aren’t helpful – be ready to be super 
analytical and direct.&lt;&#x2F;p&gt;

&lt;p&gt;Development projects are notorious for running over-budget and taking up loads 
of business time, which can cause logic to fly out of the window in a state of 
panic. Think carefully about any knee-jerk reactions, and don’t be so ready to 
burn a whole project because of a few final teething problems.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;review-your-team-model&quot;&gt;Review your team model&lt;&#x2F;h2&gt;

&lt;p&gt;&lt;strong&gt;It all works better when you embrace the idea that “product,” “design,” and 
“engineering” are just different perspectives on the same thing.&lt;&#x2F;strong&gt; – &lt;a href=&quot;http:&#x2F;&#x2F;jrsinclair.com&#x2F;articles&#x2F;2017&#x2F;faster-better-cheaper-art-of-making-software&#x2F;#fn:3&quot;&gt;Greg Veen&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;p&gt;Slow progress or projects stalling could come down to your software team model. 
When was the last time you reviewed yours? There are a few different software 
project management methodologies that can really help structure and improve 
previously ‘messy’ development teams. Have a look around you, and see whether 
it’s time your team went in for an upgrade?&lt;&#x2F;p&gt;

&lt;p&gt;From &lt;a href=&quot;https:&#x2F;&#x2F;devops.com&#x2F;kanban-vs-scrum&#x2F;&quot;&gt;Scrum to Kanban&lt;&#x2F;a&gt;, there is an 
increasing focus on &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;2017&#x2F;10&#x2F;04&#x2F;devops-strategy&#x2F;&quot;&gt;DevOps&lt;&#x2F;a&gt; 
as a way to have more joined-up development and software teams. A product 
engineering model can be a great way to improve company and project efficiency –
it’s certainly &lt;a href=&quot;https:&#x2F;&#x2F;engineering.shopify.com&#x2F;blogs&#x2F;engineering&#x2F;why-shopify-moved-to-the-production-engineering-model&quot;&gt;helped big software companies like Shopify refine their development strategy&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;measure-constantly-for-project-agility&quot;&gt;Measure constantly for project agility&lt;&#x2F;h2&gt;

&lt;p&gt;If you want to find problems, you need to be tracking them first! From 
collecting the right data, to testing and tracking, make sure that you 
constantly keeping tabs on the project as it progresses. Adopting tools like 
&lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;features&#x2F;cycle-analytics&#x2F;&quot;&gt;Cycle Analytics&lt;&#x2F;a&gt; will 
ensure that you always stay on track with how your projects are progressing, 
and the data you’ll harness will become an invaluable source of business intelligence.&lt;&#x2F;p&gt;

&lt;p&gt;One great way to incentivize teams and fix any looming issues on the horizon is 
to make performance and progress visible, then discuss them openly.
When a problem does surface, treat it as a single entity and don’t wait for any 
more to pile up – this is a much more &lt;a href=&quot;http:&#x2F;&#x2F;agilemethodology.org&#x2F;&quot;&gt;agile approach&lt;&#x2F;a&gt; 
that will help keep projects streamlined.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;build-communication-into-the-project&quot;&gt;Build communication into the project&lt;&#x2F;h2&gt;

&lt;p&gt;Show, don’t tell. Development progress needs to be communicated in clear and 
visual terms – language is often an insufficient medium for development (and 
developers). Consistent bug reporting and watertight specifications are 
important. Specification quality needs to be at 100 percent, otherwise you can’t
expect the code you get back to be 100 percent either.&lt;&#x2F;p&gt;

&lt;p&gt;If development is rubbing up against teams with little development experience, 
communication becomes even more essential. Reducing the amount of jargon can 
help non-developers stay in the loop, but at the same time, it’s important that 
a business learns how to adopt development and software language (especially if 
it relies on it for its income).&lt;&#x2F;p&gt;

&lt;p&gt;It’s disheartening to see how little some software company employees actually 
know about software development – better communication can help rectify this issue.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;the-halfway-point-check-in&quot;&gt;The halfway point check-in&lt;&#x2F;h2&gt;

&lt;p&gt;The halfway point is a critical yardstick for any development project. It’s a 
great time to check in with your team and see how they are getting on. By then, 
you should have a pretty robust feel for how people are coping, and whether the 
project is going to be delivered in time.&lt;&#x2F;p&gt;

&lt;p&gt;Having a formal process and meeting for the halfway point isn’t always feasible 
(it largely depends on project size), but it’s a good idea to do nevertheless. 
&lt;a href=&quot;https:&#x2F;&#x2F;www.themuse.com&#x2F;advice&#x2F;7-great-ways-to-boost-your-teams-morale&quot;&gt;Getting the team together and getting visibility on progress is also a morale booster&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;If things aren’t looking good halfway? Don’t just cross your fingers, and hope 
for the best for the rest of the time – you need to tackle the issue there and 
then. Go away and review all the data that’s available to you before you make 
any rash killswitch decisions.&lt;&#x2F;p&gt;

&lt;p&gt;&lt;em&gt;In order to keep your development projects on track, you need to become good at
communicating with your development team, embracing agile solutions wherever 
possible. What’s your number one project management tip?&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;

&lt;h3 id=&quot;about-the-guest-author&quot;&gt;About the guest author&lt;&#x2F;h3&gt;

&lt;p&gt;Patrick Foster is an ecommerce consultant and coach, and has been helping 
founders and ecommerce startups for longer than he cares to admit. A passionate 
advocate of ecommerce journeys and stories, he is always looking to find 
likeminded thinkers and entrepreneurs. Come say hello on &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;myecommercetips&quot;&gt;Twitter&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p class=&quot;note&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;unsplash.com&#x2F;photos&#x2F;SITaCHf7jjg&quot;&gt;Cover image&lt;&#x2F;a&gt; by &lt;a href=&quot;https:&#x2F;&#x2F;unsplash.com&#x2F;@alexandershustov&quot;&gt;Alexander Shustov&lt;&#x2F;a&gt; on Unsplash&lt;&#x2F;p&gt;
&lt;img src=&#x27;https:&#x2F;&#x2F;about.gitlab.com&#x2F;images&#x2F;blogimages&#x2F;spot-dev-issues.jpg&#x27; class=&#x27;webfeedsFeaturedVisual&#x27; style=&#x27;display: none;&#x27; &#x2F;&gt;</content>
</entry>
<entry>
<title>Enabling an open and collaborative course environment with GitLab and the Grav CMS</title>
<link href='https://about.gitlab.com/2017/10/12/collaborative-course-environment-gitlab-grav/' rel='alternate' />
<id>https://about.gitlab.com/2017/10/12/collaborative-course-environment-gitlab-grav/</id>
<published>2017-10-12T00:00:00+00:00</published>
<updated>2017-10-12T00:00:00+00:00</updated>
<author>
<name>Paul Hibbitts</name>
</author>
<content type='html'>&lt;p&gt;Tech-savvy educators! Do you want to:&lt;&#x2F;p&gt;

&lt;ul&gt;
  &lt;li&gt;Share your course materials more openly?&lt;&#x2F;li&gt;
  &lt;li&gt;Support collaborative editing by students and fellow educators?&lt;&#x2F;li&gt;
  &lt;li&gt;Deliver a better multi-device experience of your course materials?&lt;&#x2F;li&gt;
  &lt;li&gt;Be able to update your online course materials in as little as 30 seconds?&lt;&#x2F;li&gt;
  &lt;li&gt;And, in general, move beyond the constraints of your current Learning Management System?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;



&lt;p&gt;If this sounds like you, then the combination of an institutionally hosted instance of &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&quot;&gt;GitLab&lt;&#x2F;a&gt; and a modern flat-file (no database) Content Management System such as &lt;a href=&quot;https:&#x2F;&#x2F;getgrav.org&#x2F;&quot;&gt;Grav&lt;&#x2F;a&gt; might be your answer!&lt;&#x2F;p&gt;

&lt;p&gt;As an educator and software interaction designer, I am always striving to deliver a better experience for my students, both in person and online. In the past several years this has led me to ‘flipping’ the Learning Management System, where I use an alternative platform instead of the LMS as the primary online environment. Many instructors (including myself) have taken this approach in the past using a traditional platform such as WordPress, but I found significant new benefits from partnering the LMS with a more modern platform that was built to take full advantage of the open and collaborative ecosystem (i.e. Git, GitLab, GitHub, etc.) we now have.&lt;&#x2F;p&gt;

&lt;p&gt;With the above approach, direct links are provided to any appropriate LMS elements and sensitive student data remains in the LMS. Common elements across multiple courses, like calendars, assignments, discussion forums, and grades are still stored in the LMS for single-point access by students. While perhaps not suited for university-wide adoption, this is a very viable and productive approach for individual instructors and their students while we wait for more open and adaptable institutional-level tools to become available.&lt;&#x2F;p&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;blogimages&#x2F;gitlab-grav-open-course1.png&quot; alt=&quot;Open and Collaborative Flipped LMS Approach Using GitLab and the Grav CMS&quot; style=&quot;width: 500px;&quot; class=&quot;shadow&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;p&gt;&lt;em&gt;&lt;small&gt;Open and Collaborative ‘Flipped’ LMS Approach Using GitLab and the Grav CMS&lt;&#x2F;small&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;

&lt;p&gt;Fortunately, my university (&lt;a href=&quot;http:&#x2F;&#x2F;www.sfu.ca&#x2F;&quot;&gt;Simon Fraser University&lt;&#x2F;a&gt;, or SFU, in Burnaby, BC, Canada) also provides an institutionally hosted instance of GitLab which not only gives me an ideal workspace for my online course materials, but also supports single sign-on so my students can easily contribute to these materials as well. By combining GitLab with the modern flat-file CMS Grav, my institution&#x27;s LMS and a small collection of other open source web apps, I’ve been able to reach more of my desired teaching goals (such as providing an anytime, anywhere performance support tool with real-time chat) for my own courses than by using the LMS as the primary online space. In addition, I’ve made the resulting software open source to also help other instructors reach their own goals – more about this project at the end of this article!&lt;&#x2F;p&gt;

&lt;h2 id=&quot;why-open-source-software&quot;&gt;Why open source software?&lt;&#x2F;h2&gt;

&lt;p&gt;The advantages of using open source software in the field of education are well documented elsewhere (see &lt;a href=&quot;http:&#x2F;&#x2F;er.educause.edu&#x2F;articles&#x2F;2008&#x2F;5&#x2F;open-source-software-in-education&quot;&gt;Open Source Software in Education&lt;&#x2F;a&gt;), but from my own viewpoint, the things I value most are: having more control over the software I use, the online communities often found with open software projects, public communication with the team developing the software, and the wide range of ways I can contribute to projects. I’ve also been keenly following several other open source, institutional-level learning ecosystem efforts, such as &lt;a href=&quot;https:&#x2F;&#x2F;www.elmsln.org&#x2F;&quot;&gt;ELMSLN&lt;&#x2F;a&gt; (a platform for building and sustaining innovation in course technologies) and &lt;a href=&quot;https:&#x2F;&#x2F;www.tsugi.org&#x2F;&quot;&gt;TSUGI&lt;&#x2F;a&gt; (a framework for building learning tools).&lt;&#x2F;p&gt;

&lt;h2 id=&quot;why-gitlab&quot;&gt;Why GitLab?&lt;&#x2F;h2&gt;

&lt;p&gt;GitLab meets several key criteria for its use in a learning ecosystem. First, it is open source software itself and secondly, it is possible to install an instance of GitLab on your own server. For universities and colleges this enhances the benefits of being open source in the first place as single sign-on and the storage of sensitive student data remains in the sole control of the institution.&lt;&#x2F;p&gt;

&lt;p&gt;Using GitLab in combination with the &lt;a href=&quot;https:&#x2F;&#x2F;desktop.github.com&#x2F;&quot;&gt;GitHub Desktop application&lt;&#x2F;a&gt; I can also very quickly update my online course sites from my desktop, while at the same time being able to then edit course site materials with any code editor I like. Most importantly, students feel like active course participants when they see they are welcome to suggest changes to the course site, or even just to make corrections to course materials. Everything is of course version controlled, which means as a repository administrator I can easily see each and every change before approving them. For changes not immediately approved I can then start a discussion via GitLab with the author of the proposed change to work out any needed further changes, etc. GitLab brings an industrial-strength software and document collaboration tool into the reach of my fellow university colleagues and students.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;why-grav-cms&quot;&gt;Why Grav CMS?&lt;&#x2F;h2&gt;

&lt;p&gt;While looking for an open source platform to support a learning ecosystem I evaluated multiple options, including self-hosting (for full administrative control) WordPress, Concrete5, Moodle and others. I then came across a number of apps under the category of ‘flat-file CMS,’ meaning that content was stored in files instead of a database. I could see that content as files would be a perfect partner for using a web-based Git service (such as GitLab, &lt;a href=&quot;https:&#x2F;&#x2F;www.github.com&#x2F;&quot;&gt;GitHub&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;www.gitbook.com&#x2F;&quot;&gt;GitBook&lt;&#x2F;a&gt;, etc.) to share and collaboratively edit content. With such a partnership, CMS content can be automatically backed up in a straightforward manner, while also tracking all revisions along the way. Digging deeper, I discovered the open source flat-file CMS Grav (by the team behind &lt;a href=&quot;http:&#x2F;&#x2F;www.rockettheme.com&#x2F;&quot;&gt;RocketTheme&lt;&#x2F;a&gt;) used Markdown – the native format for Web-based Git services such as GitLab – for content. Markdown is also an excellent system-independent format to support the ‘5Rs’ of Open Education Resources (Retain, Reuse, Revise, Remix, and Redistribute).&lt;&#x2F;p&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;blogimages&#x2F;gitlab-grav-open-course2.png&quot; alt=&quot;Editing Markdown content in the Grav CMS Admin Panel&quot; style=&quot;width: 500px;&quot; class=&quot;shadow&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;p&gt;&lt;em&gt;&lt;small&gt;Editing Markdown content in the Grav CMS Admin Panel&lt;&#x2F;small&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;

&lt;p&gt;Grav uses many existing modern standards and open source components, such as the very user-friendly &lt;a href=&quot;https:&#x2F;&#x2F;twig.symfony.com&#x2F;&quot;&gt;Twig language&lt;&#x2F;a&gt; (courtesy of Symfony) instead of pure PHP for theme templating. Grav also supports modular and custom content types, and was designed from the ground-up to be both fast and extensible. In addition, with the creation of the open source Git Sync plugin (by &lt;a href=&quot;https:&#x2F;&#x2F;trilby.media&#x2F;&quot;&gt;Trilby Media&lt;&#x2F;a&gt;) it is now easier than ever to do two-way syncing of Grav content between a production server, Git repository and an optional local development instance. It is even  possible to sync theme files, which determine the actual functionality and presentation of a site, so  educators (or perhaps their tech-savvy students) can directly help other educators needing assistance in additional customization of their Grav sites.&lt;&#x2F;p&gt;

&lt;p&gt;It should be noted that Grav is not a static site generator, but rather a file-based CMS which supports not only dynamic content but also an online Admin Panel.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;cmpt-363-open-course-hub&quot;&gt;CMPT-363 Open Course Hub&lt;&#x2F;h2&gt;

&lt;p&gt;For my SFU course CMPT-363 User Interface Design this Fall, I will not only be using GitLab and Grav (hosted on the educationally focused &lt;a href=&quot;https:&#x2F;&#x2F;reclaimhosting.com&#x2F;&quot;&gt;Reclaim Hosting&lt;&#x2F;a&gt;), but also a number of other web apps (also mostly open source) to provide a learning ecosystem to my students. Since Grav itself is open and extensible, I can easily add in Javascript elements for a Livechat (which my students have told me they love) thanks to &lt;a href=&quot;https:&#x2F;&#x2F;rocket.chat&#x2F;&quot;&gt;Rocket.Chat&lt;&#x2F;a&gt;, responsive Markdown-based slide embeds thanks to the commercial &lt;a href=&quot;https:&#x2F;&#x2F;www.swipe.to&#x2F;home&quot;&gt;Swipe.to&lt;&#x2F;a&gt; web app, and links to an anonymous course feedback form thanks to &lt;a href=&quot;https:&#x2F;&#x2F;sandstorm.io&#x2F;&quot;&gt;Sandstorm.IO&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;simonv3&#x2F;quick-survey&quot;&gt;Quick Survey&lt;&#x2F;a&gt;. To address both various other teaching goals (the LMS actually does some things quite reasonably) and student data privacy concerns, I still use the institutional LMS &lt;a href=&quot;https:&#x2F;&#x2F;www.canvaslms.com&#x2F;&quot;&gt;Canvas&lt;&#x2F;a&gt; by Instructure to support a wide range of course elements such as quizzes, assignment submissions, discussion forums, and gradebook. You can see this multi-device friendly Course Hub in action at &lt;a href=&quot;http:&#x2F;&#x2F;paulhibbitts.net&#x2F;cmpt-363-173&#x2F;&quot;&gt;paulhibbitts.net&#x2F;cmpt-363-173&#x2F;&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;blogimages&#x2F;gitlab-grav-open-course3.png&quot; alt=&quot;CMPT-363 Open Course Hub Learning Ecosystem&quot; style=&quot;width: 500px;&quot; class=&quot;shadow&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;p&gt;&lt;em&gt;&lt;small&gt;CMPT-363 Open Course Hub Learning Ecosystem&lt;&#x2F;small&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;

&lt;h2 id=&quot;the-open-course-hub-project&quot;&gt;The Open Course Hub Project&lt;&#x2F;h2&gt;

&lt;p&gt;Based on the &lt;a href=&quot;https:&#x2F;&#x2F;storify.com&#x2F;paulhibbitts&#x2F;flipped-lms&quot;&gt;very positive student feedback&lt;&#x2F;a&gt; and my own experiences with the 2015 CMPT-363 Course Hub, I decided to release an open source version of a pre-packaged Course Hub with Git Sync the following year (called a Skeleton in Grav-speak, which is a ready-to-run package that includes Grav and all needed theme and example content files). While this package can be installed in &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=8yyE-LaAa8Y&quot;&gt;less than a minute&lt;&#x2F;a&gt; and fully configured in &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=jnBig4aGfFg&quot;&gt;under five minutes&lt;&#x2F;a&gt; it is intended for fellow tech-savvy educators to use and further customize as they see fit.&lt;&#x2F;p&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;blogimages&#x2F;gitlab-grav-open-course4.png&quot; alt=&quot;CMPT-363 Open Course Hub Web Page&quot; style=&quot;width: 500px;&quot; class=&quot;shadow&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;p&gt;&lt;em&gt;&lt;small&gt;CMPT-363 Open Course Hub Web Page&lt;&#x2F;small&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;

&lt;p&gt;What are the exact skills currently expected? In general, you should be comfortable with accessing files on a website server, understand folder hierarchies, be familiar with Markdown (here is a &lt;a href=&quot;https:&#x2F;&#x2F;designedbywaldo.com&#x2F;en&#x2F;tools&#x2F;markdown-tutorial&quot;&gt;10-minute Markdown tutorial&lt;&#x2F;a&gt;), and have a working knowledge of using GitLab or GitHub. Being able to use &lt;a href=&quot;https:&#x2F;&#x2F;desktop.github.com&#x2F;&quot;&gt;GitHub Desktop&lt;&#x2F;a&gt; and a desktop code editor like &lt;a href=&quot;https:&#x2F;&#x2F;atom.io&#x2F;&quot;&gt;Atom.io&lt;&#x2F;a&gt; or &lt;a href=&quot;http:&#x2F;&#x2F;brackets.io&#x2F;&quot;&gt;Adobe Brackets&lt;&#x2F;a&gt; will also bring the ability to store a copy of your Grav site content on your local desktop and then selectively edit and push changes back to the Git repository for deployment to your live Grav Course Hub site. Step-by-step install and configuration instructions for the Grav Course Hub are available at &lt;a href=&quot;http:&#x2F;&#x2F;learn.hibbittsdesign.org&#x2F;coursehub&quot;&gt;learn.hibbittsdesign.org&#x2F;coursehub&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;This is also my way to give back to the open source community in general, which has been so helpful in the development of my own original CMPT-363 Course Hub. Using Grav and the Git Sync plugin I’ve released several additional Open Education Resources (OER) projects, including the Open Publishing Space, and all of these are available at &lt;a href=&quot;http:&#x2F;&#x2F;learn.hibbittsdesign.org&#x2F;&quot;&gt;learn.hibbittsdesign.org&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;Questions or comments about using GitLab as an open and collaborative backbone to your learning ecosystem? Please feel free to contact me via email (&lt;a href=&quot;&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#112;&amp;#097;&amp;#117;&amp;#108;&amp;#064;&amp;#104;&amp;#105;&amp;#098;&amp;#098;&amp;#105;&amp;#116;&amp;#116;&amp;#115;&amp;#100;&amp;#101;&amp;#115;&amp;#105;&amp;#103;&amp;#110;&amp;#046;&amp;#111;&amp;#114;&amp;#103;&quot;&gt;&amp;#112;&amp;#097;&amp;#117;&amp;#108;&amp;#064;&amp;#104;&amp;#105;&amp;#098;&amp;#098;&amp;#105;&amp;#116;&amp;#116;&amp;#115;&amp;#100;&amp;#101;&amp;#115;&amp;#105;&amp;#103;&amp;#110;&amp;#046;&amp;#111;&amp;#114;&amp;#103;&lt;&#x2F;a&gt;) or Twitter &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;hibbittsdesign&quot;&gt;@hibbittsdesign&lt;&#x2F;a&gt;. You can also read more about my learning ecosystem explorations at &lt;a href=&quot;http:&#x2F;&#x2F;www.hibbittsdesign.org&#x2F;blog&#x2F;&quot;&gt;hibbittsdesign.org&#x2F;blog&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;&lt;em&gt;Special thanks to the folks at GitLab for the kind offer to provide this guest blog post, and everyone from the Grav community and my Twitter network who provided helpful feedback and comments on the draft versions of this post!&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;

&lt;h3 id=&quot;about-the-guest-author&quot;&gt;About the guest author&lt;&#x2F;h3&gt;

&lt;p&gt;Paul Hibbitts has been an interaction design practitioner and educator for over 20 years, and has recently ventured into the world of open source software development thanks to the amazing Grav CMS.&lt;&#x2F;p&gt;

&lt;p class=&quot;note&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;unsplash.com&#x2F;photos&#x2F;Y94yKEyNjVw&quot;&gt;Cover image&lt;&#x2F;a&gt; by &lt;a href=&quot;https:&#x2F;&#x2F;unsplash.com&#x2F;@chuttersnap&quot;&gt;chuttersnap&lt;&#x2F;a&gt; on unsplash&lt;&#x2F;p&gt;
&lt;img src=&#x27;https:&#x2F;&#x2F;about.gitlab.com&#x2F;images&#x2F;blogimages&#x2F;open-course-environment.jpg&#x27; class=&#x27;webfeedsFeaturedVisual&#x27; style=&#x27;display: none;&#x27; &#x2F;&gt;</content>
</entry>
<entry>
<title>Complete DevOps is DevOps reimagined. Here&#x27;s what that looks like</title>
<link href='https://about.gitlab.com/2017/10/11/from-dev-to-devops/' rel='alternate' />
<id>https://about.gitlab.com/2017/10/11/from-dev-to-devops/</id>
<published>2017-10-11T00:00:00+00:00</published>
<updated>2017-10-11T00:00:00+00:00</updated>
<author>
<name>Sid Sijbrandij</name>
</author>
<content type='html'>&lt;p&gt;Earlier this week &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;2017&#x2F;10&#x2F;09&#x2F;gitlab-raises-20-million-to-complete-devops&#x2F;&quot;&gt;we announced our #CompleteDevOps vision&lt;&#x2F;a&gt;. Let&#x27;s take a closer look at what that means, and how it&#x27;s different from traditional DevOps.&lt;&#x2F;p&gt;



&lt;h2 id=&quot;traditional-vs-complete-devops&quot;&gt;Traditional vs. Complete DevOps&lt;&#x2F;h2&gt;

&lt;p&gt;In the early days of software development the process of taking an idea to production was slow, insecure and vulnerable to errors. DevOps emerged as a way to foster collaboration and create faster iteration cycles with greater quality and security. As it sits today, DevOps is a set of practices at the intersection of development and operations. It was a huge step forward.&lt;&#x2F;p&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;blogimages&#x2F;dev-to-devops-intersection.png&quot; alt=&quot;Intersection of Dev and Ops&quot; style=&quot;width: 500px;&quot; class=&quot;shadow&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;p&gt;But it didn&#x27;t go far enough.&lt;&#x2F;p&gt;

&lt;p&gt;Even with the adoption of DevOps, serious challenges continue to exist. Developers and operators used to be separate groups with separate tools. The people are now closer together but their tools are still apart. This hinders dev and ops teams from working together. Trying to glue their tools together with traditional DevOps applications doesn&#x27;t solve the fundamental problem of having separate applications.&lt;&#x2F;p&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;blogimages&#x2F;dev-to-devops-tools.jpg&quot; alt=&quot;Distinct tools of developers and operators&quot; style=&quot;width: 800px;&quot; class=&quot;shadow&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;h2 id=&quot;why-complete-devops&quot;&gt;Why Complete DevOps?&lt;&#x2F;h2&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;blogimages&#x2F;dev-to-devops-union.png&quot; alt=&quot;Union of Dev and Ops&quot; style=&quot;width: 500px;&quot; class=&quot;shadow&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;p&gt;Complete DevOps reimagines the scope of tooling to include both developers and operations teams in one unified solution. This dramatically reduces friction, increases collaboration, and drives a competitive advantage. Doing away with context switching and having all the necessary information in one place closes the loop and enables a better understanding of each team&#x27;s needs.&lt;&#x2F;p&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;blogimages&#x2F;dev-to-devops-advantages.jpg&quot; alt=&quot;The advantages of Complete DevOps&quot; style=&quot;width: 800px;&quot; class=&quot;shadow&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;p&gt;To make our vision a reality, we&#x27;re working on a number of new features and improving on existing ones. You can take an in-depth at some of these in our Head of Product &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;team&#x2F;#MarkPundsack&quot;&gt;Mark Pundsack&lt;&#x2F;a&gt;&#x27;s &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;2017&#x2F;10&#x2F;04&#x2F;devops-strategy&#x2F;&quot;&gt;outline here&lt;&#x2F;a&gt;, or watch the full presentation about our Complete DevOps vision below.&lt;&#x2F;p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;5dhjw-TT964?start=1437&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;&#x2F;iframe&gt;

&lt;p&gt;You can also browse the slides at your leisure:&lt;&#x2F;p&gt;

&lt;iframe src=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;presentation&#x2F;d&#x2F;e&#x2F;2PACX-1vT2sfToefXXAc4_u34KXz5efU1qUD0O9rXahRZUACkaBBk73orjtXi_3FAKq5mt4RKaSTZfcgD4P4pi&#x2F;embed?start=false&amp;amp;loop=false&amp;amp;delayms=3000&quot; frameborder=&quot;0&quot; width=&quot;1280&quot; height=&quot;749&quot; allowfullscreen=&quot;true&quot; mozallowfullscreen=&quot;true&quot; webkitallowfullscreen=&quot;true&quot;&gt;&lt;&#x2F;iframe&gt;

&lt;p&gt;Share your thoughts, comments, and questions about #CompleteDevOps with us on &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;gitlab&quot;&gt;Twitter&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;img src=&#x27;https:&#x2F;&#x2F;about.gitlab.com&#x2F;images&#x2F;blogimages&#x2F;dev-to-devops-cover.png&#x27; class=&#x27;webfeedsFeaturedVisual&#x27; style=&#x27;display: none;&#x27; &#x2F;&gt;</content>
</entry>
<entry>
<title>Announcing $20 million in Series C round funding led by GV to complete DevOps</title>
<link href='https://about.gitlab.com/2017/10/09/gitlab-raises-20-million-to-complete-devops/' rel='alternate' />
<id>https://about.gitlab.com/2017/10/09/gitlab-raises-20-million-to-complete-devops/</id>
<published>2017-10-09T00:00:00+00:00</published>
<updated>2017-10-09T00:00:00+00:00</updated>
<author>
<name></name>
</author>
<content type='html'>&lt;p&gt;Today we are thrilled to announce our $20 million Series C funding led by GV. This follows &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;2016&#x2F;09&#x2F;13&#x2F;gitlab-master-plan&#x2F;&quot;&gt;our Series B round last September&lt;&#x2F;a&gt;. With the help of our investors (and community!) we’re gearing up to bring you Complete DevOps, a reimagined scope of DevOps that unifies development and operations work into a single user experience.&lt;&#x2F;p&gt;



&lt;p class=&quot;alert alert-gitlab-orange&quot;&gt;Not a GitLab user? &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;installation&#x2F;&quot;&gt;Install GitLab&lt;&#x2F;a&gt; or &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;users&#x2F;sign_in&quot;&gt;sign in&lt;&#x2F;a&gt; to get started!&lt;&#x2F;p&gt;

&lt;p&gt;In addition to our Series C funding round led by Dave Munichiello, GV General Partner, we’re excited to announce new board member,
Matt Mullenweg, founder of WordPress.&lt;&#x2F;p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&quot;The Fortune 500 is racing to build world-class software development organizations that mirror the speed,
productivity, and quality of the largest tech companies. As these organizations strive to produce high-quality
code at scale, they will need best-in-class tools and platforms. GitLab’s platform accelerates
the development process with an emphasis on collaboration and automation.
GitLab’s hybrid, multi-cloud solution is loved by developers, and is seeing tremendous traction in the field.&quot; – Dave Munichiello, GV General Partner&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&quot;GitLab’s powerful momentum and scaling have a lot of parallels to Automattic and WordPress in their early days.
WordPress had to battle a lot of competitors, and ultimately came out on top as a successful company on an open source business model.
I hope to help GitLab achieve the same triumph. Fundamentally, I want to help create the kind of internet that I want to live in
and I want my children to live in, one that reaches a global audience and one that is able to make a difference.&quot;
– Matt Mullenweg, founder of WordPress&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;

&lt;p&gt;Since our start in 2014, we’ve had one mission: change all creative work from read-only to read-write so that everyone can contribute.
Last year we unveiled GitLab’s Master Plan on September 13th, committing to shipping every stage of idea to production (which we completed in 8.15!).
This was a major step forward in simplifying the software development process.
Now, we&#x27;re taking it a step further to unite development and operations in one user experience.
Watch the recording of our earlier live stream announcing our #CompleteDevOps vision below,
and keep scrolling for a recap and the slides from the presentation.&lt;&#x2F;p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;5dhjw-TT964&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;&#x2F;iframe&gt;

&lt;h2 id=&quot;complete-devops&quot;&gt;Complete DevOps&lt;&#x2F;h2&gt;

&lt;p&gt;Before DevOps, the world of software iteration was slow, insecure, and error prone.
DevOps came to the intersection of development and operations to create faster iteration cycles with greater quality and security.&lt;&#x2F;p&gt;

&lt;p&gt;But it didn&#x27;t go far enough…&lt;&#x2F;p&gt;

&lt;p&gt;In the current landscape, developers and operations use different tools,
they don&#x27;t have the ability to fully collaborate, and the need to integrate
many disparate tools continues to be a point of friction that slows progress
and leads to insecure, poor quality code.&lt;&#x2F;p&gt;

&lt;p&gt;Complete DevOps reimagines the scope of tooling to include both developers
and operations teams in one unified solution. This dramatically reduces friction,
increases collaboration, and drives a competitive advantage.&lt;&#x2F;p&gt;

&lt;p&gt;In &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;2017&#x2F;09&#x2F;22&#x2F;gitlab-10-0-released&#x2F;&quot;&gt;10.0&lt;&#x2F;a&gt;, we shipped the first iteration of Auto DevOps,
which just scratches the surface of the Complete DevOps features we have in the works.
You can read our Head of Product &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;team&#x2F;#MarkPundsack&quot;&gt;Mark Pundsack&lt;&#x2F;a&gt;’s
detailed vision in &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;2017&#x2F;10&#x2F;04&#x2F;devops-strategy&#x2F;&quot;&gt;his blog post&lt;&#x2F;a&gt;, but to summarize:&lt;&#x2F;p&gt;

&lt;p&gt;We want to build GitLab into the complete DevOps tool chain.
We already cover every stage of the software development lifecycle. Why stop at production?
Why not go beyond that, into operations? We want to close the loop between Dev and Ops,
automating processes and reducing complexity so that you can focus on a great customer experience.&lt;&#x2F;p&gt;

&lt;iframe src=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;presentation&#x2F;d&#x2F;e&#x2F;2PACX-1vRVKUjMMa7M7lPV04_TMgfmd2Fj_kEQYW9-RvKAtKf799_Dwbfvos8diqinI-Uhm1uTwPYCdAPPzun1&#x2F;embed?start=false&amp;amp;loop=false&amp;amp;delayms=3000&quot; frameborder=&quot;0&quot; width=&quot;1280&quot; height=&quot;749&quot; allowfullscreen=&quot;true&quot; mozallowfullscreen=&quot;true&quot; webkitallowfullscreen=&quot;true&quot;&gt;&lt;&#x2F;iframe&gt;

&lt;h3 id=&quot;why-complete-devops&quot;&gt;Why Complete DevOps?&lt;&#x2F;h3&gt;

&lt;ol&gt;
  &lt;li&gt;A single UI for development and operations means less time is wasted switching tools.&lt;&#x2F;li&gt;
  &lt;li&gt;All phases of DevOps are deeply integrated, so development and operations can work together collaboratively with less friction.&lt;&#x2F;li&gt;
  &lt;li&gt;The best practices of more than 100K organizations are built in by default.&lt;&#x2F;li&gt;
  &lt;li&gt;You benefit from a single install, with upgrades that don&#x27;t break, no integration work, and one permission model.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;

&lt;p&gt;Share your thoughts, comments, and questions about #CompleteDevOps with us &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;gitlab&quot;&gt;on Twitter&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;

&lt;h3 id=&quot;the-cloud-native-development-solution&quot;&gt;The cloud-native development solution&lt;&#x2F;h3&gt;

&lt;p&gt;The software world is moving from virtual machines to cloud-native development.
We want to help ease this transition for companies, by offering a complete development and operations solution for cloud-native development.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;get-involved&quot;&gt;Get involved&lt;&#x2F;h2&gt;

&lt;p&gt;We 💜 our community! At GitLab, everyone can contribute and we owe GitLab’s existence to your enthusiasm,
drive, and hard work. Without our contributors’ belief in open source software, we would not be where we are today.
We need your help to make our collective vision a reality.&lt;&#x2F;p&gt;

&lt;p&gt;We are committed to standing by our &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;2016&#x2F;01&#x2F;11&#x2F;being-a-good-open-source-steward&#x2F;&quot;&gt;promise to be good stewards of open source&lt;&#x2F;a&gt;,
and keeping communication and collaboration amongst the community a high priority.
Our open core business model ships both open and closed software.
In an effort to maintain an unprecedented level of transparency, we follow three key principles:&lt;&#x2F;p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;2015&#x2F;12&#x2F;16&#x2F;improving-open-development-for-everyone&#x2F;&quot;&gt;Development in the open&lt;&#x2F;a&gt;. You can submit issues in a public issue tracker. This is not a read-only interface. &lt;&#x2F;li&gt;
  &lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;2015&#x2F;08&#x2F;03&#x2F;almost-everything-we-do-is-now-open&#x2F;&quot;&gt;Business in the open&lt;&#x2F;a&gt;. Our company handbook and policies are in the open. &lt;&#x2F;li&gt;
  &lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;direction&#x2F;&quot;&gt;Clear direction&lt;&#x2F;a&gt;. Our Direction page clarifies the current project priorities and what is possible in the upcoming releases. &lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;

&lt;p&gt;Read more about our company values in our &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;2016&#x2F;07&#x2F;12&#x2F;our-handbook-is-open-source-heres-why&#x2F;&quot;&gt;open source&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;handbook&#x2F;values&quot;&gt;handbook&lt;&#x2F;a&gt;, licensed by &lt;a href=&quot;https:&#x2F;&#x2F;creativecommons.org&#x2F;licenses&#x2F;by-sa&#x2F;4.0&#x2F;&quot;&gt;CC BY-SA 4.0&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;img src=&#x27;https:&#x2F;&#x2F;about.gitlab.com&#x2F;images&#x2F;blogimages&#x2F;gitlab-live-event.png&#x27; class=&#x27;webfeedsFeaturedVisual&#x27; style=&#x27;display: none;&#x27; &#x2F;&gt;</content>
</entry>
<entry>
<title>GitLab Patch Release: 10.0.3</title>
<link href='https://about.gitlab.com/2017/10/05/gitlab-10-dot-0-dot-3-released/' rel='alternate' />
<id>https://about.gitlab.com/2017/10/05/gitlab-10-dot-0-dot-3-released/</id>
<published>2017-10-05T00:00:00+00:00</published>
<updated>2017-10-05T00:00:00+00:00</updated>
<author>
<name>Jaroslava Kadlecová</name>
</author>
<content type='html'>&lt;p&gt;Today we are releasing version 10.0.3 for GitLab Community Edition (CE) and Enterprise Edition (EE).&lt;&#x2F;p&gt;

&lt;p&gt;This version resolves a number of regressions and bugs in
&lt;a href=&quot;&#x2F;2017&#x2F;09&#x2F;27&#x2F;gitlab-10-dot-0-dot-2-released&#x2F;&quot;&gt;the 10.0.2 release&lt;&#x2F;a&gt; and
prior versions.&lt;&#x2F;p&gt;



&lt;p&gt;It includes the following fixes:&lt;&#x2F;p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Fix merge request counter updates after merge (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14563&quot;&gt;!14563&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Make sure API responds with 401 when invalid authentication info is provided (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14525&quot;&gt;!14525&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Fix 500 error on merged merge requests when GitLab is restored from a backup (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14547&quot;&gt;!14547&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Fix commenting on side-by-side commit diff (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14529&quot;&gt;!14529&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Gitaly RepositoryExists remains opt-in for all method calls (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14513&quot;&gt;!14513&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Adjust MRs being stuck on &quot;process of being merged&quot; for more than 2 hours (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14540&quot;&gt;!14540&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; &lt;code&gt;find_user&lt;&#x2F;code&gt; Users helper method no longer overrides &lt;code&gt;find_user&lt;&#x2F;code&gt; API helper method (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14418&quot;&gt;!14418&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Improve UX of autodevops popover to match gpg one (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14582&quot;&gt;!14582&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Fix CSRF validation issue when closing&#x2F;opening merge requests from the UI (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14555&quot;&gt;!14555&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Make &lt;code&gt;Repository#has_visible_content&lt;&#x2F;code&gt; more efficient (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14554&quot;&gt;!14554&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Fix Auto DevOps banner feature flag (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14576&quot;&gt;!14576&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Fix data parameter not being sent in ajax request for jobs log (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14564&quot;&gt;!14564&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Fix pushes to an empty repository not invalidating &lt;code&gt;has_visible_content?&lt;&#x2F;code&gt; cache (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14613&quot;&gt;!14613&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Ensure all refs are restored on a backup&#x2F;restore (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14595&quot;&gt;!14595&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Fix Admin -&amp;gt; License selector for GitLab QA specs (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14599&quot;&gt;!14599&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Fix gitlab-rake gitlab:import:repos task (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14597&quot;&gt;!14597&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Fix broken certificate-authority-data with kubectl &amp;gt;= 1.8.0 (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14635&quot;&gt;!14635&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE:&lt;&#x2F;strong&gt; Show group tab if member lock is enabled (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;3025&quot;&gt;!3025&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE:&lt;&#x2F;strong&gt; Only show Turn on Service Desk button when user has permissions (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;3020&quot;&gt;!3020&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE:&lt;&#x2F;strong&gt; Add basic documentation on the consul cluster (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;3013&quot;&gt;!3013&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE:&lt;&#x2F;strong&gt; File uploaders do not perform hard check, only soft check (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;2960&quot;&gt;!2960&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE:&lt;&#x2F;strong&gt; Fix EE delta size check handling with annotated tags (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;3041&quot;&gt;!3041&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE:&lt;&#x2F;strong&gt; Rewrite Geo database rake tasks so they operate on the correct database (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;3052&quot;&gt;!3052&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;h2 id=&quot;upgrade-barometer&quot;&gt;Upgrade barometer&lt;&#x2F;h2&gt;

&lt;p&gt;This version does not include any new migrations, and should not require any
downtime.&lt;&#x2F;p&gt;

&lt;p&gt;Please be aware that by default the Omnibus packages will stop, run migrations,
and start again, no matter how “big” or “small” the upgrade is. This behavior
can be changed by adding a &lt;a href=&quot;http:&#x2F;&#x2F;doc.gitlab.com&#x2F;omnibus&#x2F;update&#x2F;README.html&quot;&gt;&lt;code&gt;&#x2F;etc&#x2F;gitlab&#x2F;skip-auto-migrations&lt;&#x2F;code&gt;
file&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;updating&quot;&gt;Updating&lt;&#x2F;h2&gt;

&lt;p&gt;To update, check out our &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;update&#x2F;&quot;&gt;update page&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;enterprise-edition&quot;&gt;Enterprise Edition&lt;&#x2F;h2&gt;

&lt;p&gt;Interested in GitLab Enterprise Edition? Check out the &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;gitlab-ee&#x2F;&quot;&gt;features exclusive to
EE&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;Access to GitLab Enterprise Edition is granted by a &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;products&#x2F;&quot;&gt;subscription&lt;&#x2F;a&gt;.
No time to upgrade GitLab yourself? Subscribers receive upgrade and installation
services.&lt;&#x2F;p&gt;
&lt;img src=&#x27;https:&#x2F;&#x2F;about.gitlab.com&#x2F;images&#x2F;default-blog-image.png&#x27; class=&#x27;webfeedsFeaturedVisual&#x27; style=&#x27;display: none;&#x27; &#x2F;&gt;</content>
</entry>
<entry>
<title>Beyond CI&#x2F;CD: GitLab&#x27;s DevOps vision</title>
<link href='https://about.gitlab.com/2017/10/04/devops-strategy/' rel='alternate' />
<id>https://about.gitlab.com/2017/10/04/devops-strategy/</id>
<published>2017-10-04T00:00:00+00:00</published>
<updated>2017-10-04T00:00:00+00:00</updated>
<author>
<name>Mark Pundsack</name>
</author>
<content type='html'>&lt;p&gt;With GitLab 10.0, we shipped Auto DevOps for the Community and Enterprise
Editions. Read on for an in-depth look at our strategy behind it, and beyond.&lt;&#x2F;p&gt;



&lt;p&gt;I recently met with my colleagues
&lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;team&#x2F;#JAScheuermann&quot;&gt;Joe&lt;&#x2F;a&gt; and
&lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;team&#x2F;#mktinghipster&quot;&gt;Courtland&lt;&#x2F;a&gt; to give them the
lowdown on GitLab&#x27;s DevOps vision: where we&#x27;ve come from and where we&#x27;re headed.
You can watch the video of our discussion or check out the lightly edited
transcript below. You can also jump into the rabbit hole, starting with the meta
issue for &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;issues&#x2F;32639&quot;&gt;GitLab DevOps&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;zMAB42g4MPI&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;&#x2F;iframe&gt;

&lt;h2 id=&quot;cicd-where-weve-come-from&quot;&gt;CI&#x2F;CD: Where we&#x27;ve come from&lt;&#x2F;h2&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;blogimages&#x2F;devops-strategy-ci-scope.svg&quot; alt=&quot;CI&#x2F;CD&#x2F;Beyond CD&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;p&gt;When I joined GitLab about a year ago, I created a &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;direction&#x2F;#ci--cd&quot;&gt;vision document for
CI&#x2F;CD&lt;&#x2F;a&gt;, and outlined a lot of the
key things that I thought were missing in CI&#x2F;CD in general, and going beyond CD.
I literally called one section &quot;beyond CD&quot; because I didn’t have a name for it
then.&lt;&#x2F;p&gt;

&lt;p&gt;And in that document, I create an example pipeline to characterize all this
stuff, to show how the pieces fit together into a development lifecycle.&lt;&#x2F;p&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;blogimages&#x2F;devops-strategy-example-pipeline.png&quot; alt=&quot;Example pipeline&quot; class=&quot;shadow&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;p&gt;I love this diagram not only because it&#x27;s complex and scary, but because when we
started, we had maybe four boxes filled in, and now we have 10 or 12 filled in. To
start with, we had code management and, obviously, builds and tests. And we kind
of did deployment, but not really.&lt;&#x2F;p&gt;

&lt;p&gt;Since then, we’ve added review apps – a specific example of deployments – which
is really awesome. We also added a more formalized mechanism for doing
deployments; actually recording deployments and deployment histories, keeping
track of environments, and everything else. Then we added Canary Deployments in
9.2 and code quality in 9.3. We added system monitoring with Prometheus in 9.0.&lt;&#x2F;p&gt;

&lt;p&gt;We don’t yet have what I called &quot;business monitoring,&quot; which could mean
monitoring revenue, or clicks, or whatever you care about; but that’s coming. We
don&#x27;t yet have load testing, but the Prometheus team is thinking about that.
We don&#x27;t yet have a plan for feature flags, but I think it&#x27;s a really important
part.&lt;&#x2F;p&gt;

&lt;p&gt;And then we have this other dimension of pipelines, which is the relationship
between different codebases (or projects), and in 9.3 we introduced the first
version of multi-project pipelines.&lt;&#x2F;p&gt;

&lt;p&gt;So we&#x27;ve gone from a core view of three or four boxes to where 90 percent is
complete. That&#x27;s pretty awesome.&lt;&#x2F;p&gt;

&lt;p&gt;It became obvious to me that we were viewing the scope with this hard line:
developer focused rather than an ops focused. For example, we’ll deploy into production,
and we might even watch the metrics related to your code in production, but
we’re not going to monitor your entire production app, because that’s
operations, and that’s clearly out of scope, right?&lt;&#x2F;p&gt;

&lt;h2 id=&quot;where-were-headed-beyond-cd&quot;&gt;Where we&#x27;re headed: Beyond CD&lt;&#x2F;h2&gt;

&lt;p&gt;What hit me a few months ago is, &quot;Why is that out of scope? That’s ridiculous.
No, we’re going to keep going. We&#x27;re going to go past production into
operations.&quot; Most of this still applies, but instead of just monitoring the
system as it relates to a merge request, what about monitoring the system for
network errors, outages, or dependency problems? What if we don&#x27;t stop at
production, and monitor things that are typically ops related that may not
involve a developer at all?&lt;&#x2F;p&gt;

&lt;p&gt;Then I realized that this thing I called Beyond CD, maybe it&#x27;s really DevOps.
Maybe the whole thing is DevOps.&lt;&#x2F;p&gt;

&lt;h3 id=&quot;the-devops-tool-chain&quot;&gt;The DevOps tool chain&lt;&#x2F;h3&gt;

&lt;p&gt;To offer some context: DevOps is hard to define, because everybody defines it
slightly differently. Sometimes DevOps is defined as the intersection of
development, operations, and quality assurance.&lt;&#x2F;p&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;blogimages&#x2F;devops-strategy-venn-diagram.png&quot; alt=&quot;DevOps Venn diagram&quot; class=&quot;shadow&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;p&gt;&lt;em&gt;&lt;small&gt;Image by Rajiv.Pant, derived from Devops.png:, &lt;a href=&quot;https:&#x2F;&#x2F;commons.wikimedia.org&#x2F;w&#x2F;index.php?curid=20202905&quot;&gt;CC BY 3.0&lt;&#x2F;a&gt;&lt;&#x2F;small&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;

&lt;p&gt;For the most part, my personal interest in DevOps has been in that intersection.
We do great code management; we’ve done that for quite a while. How do we get
that code into production? How do we get it into QA?&lt;&#x2F;p&gt;

&lt;p&gt;Review apps are a great example that fits squarely in that tiny, little triangle
in the middle of the Venn diagram. You take your code, you deploy it, which is
an operations thing, but you have it deployed in a temporary, ephemeral, app,
just for QA people (or designers, product managers, or anyone who is not a
primary coder), so they can test your application for quality assurance, feature
assurance, or whatever.&lt;&#x2F;p&gt;

&lt;p&gt;But now, I&#x27;m looking beyond the intersection. Here&#x27;s the &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;DevOps_toolchain&quot;&gt;DevOps tool chain
definition&lt;&#x2F;a&gt; from Wikipedia:&lt;&#x2F;p&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;blogimages&#x2F;devops-strategy-devops-toolchain.png&quot; alt=&quot;DevOps Toolchain&quot; class=&quot;shadow&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;p&gt;&lt;em&gt;&lt;small&gt;Image by Kharnagy (Own work) &lt;a href=&quot;http:&#x2F;&#x2F;creativecommons.org&#x2F;licenses&#x2F;by-sa&#x2F;4.0&quot;&gt;CC BY-SA 4.0&lt;&#x2F;a&gt;, via Wikimedia Commons&lt;&#x2F;small&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;

&lt;p&gt;Well, that’s everything! That’s not the intersection; that’s the union of
everything from code, to releasing, to monitoring. And that&#x27;s where things get
confusing. Sometimes when people talk about DevOps, they’re not talking about
all of your code stuff. It’s the intersection parts that are the interesting
parts of DevOps. It’s the parts where we let developers get their code into
production easily. That slice, that intersection, of the Venn diagram, that’s
the interesting part about DevOps.&lt;&#x2F;p&gt;

&lt;p&gt;Having said that, as a product company, we are going to deliver things that are
pretty squarely on the development side, and, eventually, we’re going to deliver
things that are pretty squarely in the operations side. At some point, we may
have an operations dashboard that lets you understand your dependencies in your
network infrastructure, and your routers, and your whatever. That’s pretty far
fetched at this point, but it could happen. Why not? Just have GitLab be
your one operations dashboard, and then it’s not just about the intersection of
the DevOps, it’s the whole DevOps tool chain.&lt;&#x2F;p&gt;

&lt;p&gt;So, that is the whirlwind, high-level summary of where we&#x27;ve been, and a little
bit about where we’re going. Now let&#x27;s get into specific issues.&lt;&#x2F;p&gt;

&lt;h3 id=&quot;the-ops-dashboard--1788&quot;&gt;The Ops Dashboard – &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;issues&#x2F;1788&quot;&gt;#1788&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;

&lt;p&gt;We have a monitoring dashboard that&#x27;s very developer centric. What about
taking that same content and slicing it from the operator&#x27;s perspective? For a
moment, ignore all the stuff below, let’s just pretend there’s only the four
boxes at the top:&lt;&#x2F;p&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;blogimages&#x2F;devops-strategy-monitoring-deploy-board.png&quot; alt=&quot;Ops view of monitoring and deploy board&quot; class=&quot;shadow&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;p&gt;So an operator might want to know, &quot;What’s the state of production?&quot; If I&#x27;m a
developer I can go into a project, into environments, see the production
environment for that project, and I can see what the status is. But what if I
want to see all production environments? As an operations person, I care a
little less about individual projects than I care about &quot;production.&quot; So this is
giving me the overview of &quot;production.&quot; All of these little boxes would
represent production deploys of projects that you have in your GitLab
infrastructure.&lt;&#x2F;p&gt;

&lt;p&gt;The view is explicitly convoluted because we had just introduced sub-groups and
I wanted to make sure this mechanism expanded. So ignore all the stuff below and
just look at the top-level dashboards. Or maybe one level down, which is already
still pretty complicated, but let’s say your marketing organization had
different properties than your other developer operations; you’d be able to see
really quickly what the status is. If something’s red, you’d be able to click
down, and see details.&lt;&#x2F;p&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;blogimages&#x2F;devops-strategy-service-health.png&quot; alt=&quot;Ops view - service health&quot; class=&quot;shadow&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;blogimages&#x2F;devops-strategy-pod-health.png&quot; alt=&quot;Ops view - pod health&quot; class=&quot;shadow&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;p&gt;You’d be able to see graphs like this, which are similar to what we already
provide, but from the other angle. As a developer I’m looking at the deploy, and
saying, &quot;Oh, how did my deploy affect my performance?&quot; But this is saying,
&quot;How’s production? Is anything wrong with my entire production suite?&quot;&lt;&#x2F;p&gt;

&lt;p&gt;This is really just scratching the surface of the ops views of things, but I
think it&#x27;s going to become much more important as people embrace DevOps. You
want your developers to be talking the same language as your operations people.
In a lot of organizations, it’s already the same people – there are no separate
operations people. Developers push code to production, and they&#x27;re paged if
something goes wrong. In others, developers and operators are separate, but they
want to work together towards DevOps.&lt;&#x2F;p&gt;

&lt;p&gt;Either way, you want to be using the same tools. You want to be able to point
to, for example, a memory bump that your operations people should also be able
to see. But if they’re using completely different tools, like New Relic and
Datadog, that kind of sucks. So let’s give them the same tools.&lt;&#x2F;p&gt;

&lt;h3 id=&quot;pipeline-view-of-environments--28698&quot;&gt;Pipeline view of environments – &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;issues&#x2F;28698&quot;&gt;#28698&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;

&lt;p&gt;I particularly love this proposal, and I really want to see this happen soon.&lt;&#x2F;p&gt;

&lt;p&gt;The environments page today is just a list of environments showing the last
deployment. The picture tells you who deployed, which is good, and you can see
that the commit is from the same SHA as staging, which is kind of nice. I can
see the deploy board, and if there&#x27;s a deploy ongoing, I’m able to see the state
as it rolls out. We don’t yet show you the current health of these pods; once
they&#x27;re deployed, all we know is that they&#x27;re deployed. This is how the
environment view is today, and it&#x27;s centered around deployments.&lt;&#x2F;p&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;blogimages&#x2F;devops-strategy-environments-list.png&quot; alt=&quot;Environments list&quot; class=&quot;shadow&quot; &#x2F;&gt;
&lt;em&gt;&lt;small&gt;Current Environment view&lt;&#x2F;small&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;

&lt;p&gt;You can click through to see the deployment history and this is actually really
valuable because I can see who deployed things, how long ago, and if something
went wrong in production I can really quickly roll back and let the developers
have some space to go and figure out what went wrong.&lt;&#x2F;p&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;blogimages&#x2F;devops-strategy-deployment-history.png&quot; alt=&quot;Deployment history&quot; class=&quot;shadow&quot; &#x2F;&gt;
&lt;em&gt;&lt;small&gt;Current Deployment History view&lt;&#x2F;small&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;

&lt;p&gt;But this proposal turns it around to have more of a DevOps view of the thing.&lt;&#x2F;p&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;blogimages&#x2F;devops-strategy-pipeline-view-environments.png&quot; alt=&quot;Pipeline view of environments&quot; class=&quot;shadow&quot; &#x2F;&gt;
&lt;em&gt;&lt;small&gt;Proposed pipeline view of Environments&lt;&#x2F;small&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;

&lt;p&gt;The idea is to take the same application, and instead of just looking at a list
of environments, I’d be looking at columns with lots of review apps, and some
number of staging environments, and a production environment. Instead of just
showing you the SHA, we would show you, for example, what merge requests have
been merged into staging that are not yet in production. That’s a great
marriage of these two views, that you’d be able to see the diff between them.&lt;&#x2F;p&gt;

&lt;p&gt;This list, although it’s just a mockup, shows maybe the last five things that
were in production, or what was included in the last deploy, or whatever works
best for your environment. Showing what’s in the last deploy might be enough,
but for people who deploy 17 times a day, maybe that’s a little less useful, and
we just show history.&lt;&#x2F;p&gt;

&lt;p&gt;But then what about building in more of the operations kind of stuff, and
saying, &quot;Alright, what’s the state of my pods?&quot; Here we were flagging where the
error rate exceeded a threshold and there’s some alert that popped up. And here
we’re showing this automatic rollback kind of stuff, but basically just really
building on this ops view. Of course this is still a DevOps view, in the sense
that I’m looking at an individual project. So, one permutation of that would
marry that ops view of all of production. Or if I’m looking at a microservices
kind of thing, where there are five or 100 different projects, and I want to see
the status of all those really quickly. See
&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;issues&#x2F;28707&quot;&gt;#28707&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;h3 id=&quot;dependency-security--28566&quot;&gt;Dependency security – &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;issues&#x2F;28566&quot;&gt;#28566&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;

&lt;p&gt;So, here, the idea is that you&#x27;ve deployed something in production, and some
module or something that you depend on has been updated, not by you, but by the
community, or someone else.&lt;&#x2F;p&gt;

&lt;p&gt;The easiest and most naive way to approach this is that with the next merge
request, or next CI&#x2F;CD run, we would go and check to see if anything’s outdated.
And we might fail your CI&#x2F;CD because of this.&lt;&#x2F;p&gt;

&lt;p&gt;It would make much more sense to run this stuff automatically. Even if, for
example, nobody pushes for seven days, and in the middle of that, there’s a
security release; just proactively run stuff and notify me. So, that&#x27;s sort of a
second iteration of thinking about how you would notify somebody, and tell them,
&quot;Oh, you’ve got a security change. You should go in and do something about it.&quot;&lt;&#x2F;p&gt;

&lt;p&gt;Now, the third iteration is, &quot;Well, what would you do with that information?&quot;
You’d go and maybe give it to your junior developer to go and make the change,
and point to the new version. And then, of course, you need to test that it
works. So, you’re going to create a merge request, and then test it, to make
sure that it still functions properly.&lt;&#x2F;p&gt;

&lt;p&gt;Well, why notify somebody, and tell the junior developer to go and do this? Why
don’t we just do it for you? Why don’t we just go and submit the merge request
for you, and then tell you what the results are. And, in fact, let’s go further,
and say, &quot;Hey it passed. We just deployed into production for you.&quot; Why would
you have security vulnerability in place any longer than necessary?&lt;&#x2F;p&gt;

&lt;p&gt;And instead of having 100 alerts about 100 projects or microservices that all
need to get updated, you just get alerts about three of them that fail, that
actually have some weird dependency that it didn’t work on. And then, you can
focus on real problems.&lt;&#x2F;p&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;blogimages&#x2F;devops-strategy-dependency-security.png&quot; alt=&quot;Dependency security&quot; class=&quot;shadow&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;p&gt;So, that’s a glimpse at how we’re thinking about this.&lt;&#x2F;p&gt;

&lt;p&gt;This would definitely be an enterprise-level feature. And again, we&#x27;ve fleshed
out some ideas and it’s unscheduled, but it does really tie into the ops
mindset.&lt;&#x2F;p&gt;

&lt;h3 id=&quot;question-enterprise-edition-features&quot;&gt;Question: Enterprise Edition features&lt;&#x2F;h3&gt;

&lt;p&gt;Courtland: You mentioned that sort of automation would be an enterprise edition
feature. Can you talk a little bit more about why a smaller development team,
like under 100 developers, wouldn’t get value out of something like that?&lt;&#x2F;p&gt;

&lt;p&gt;Mark:	So, this is where things get a little tricky, because of course,
smaller developer teams would get value out of that too. Everybody would get
value out of that. Some of it has to do with proportionality. One test I like to
use is: is there some other way you could achieve the same thing, using
workarounds, and we’re just making it easier? And that’s a good case, here. You
can already do this, but we’re going to automate it. And automation is something
that affects larger companies a lot more, because they’ve got hundreds of
projects, with thousands of developers. And they just can’t deal with the scale,
or it’s worth dealing with the automation. Whereas, if you’ve got a small
developer, with a single project, you’re pretty much on top of it. And if
something changes, yeah, you just go ahead and fix it; you’re aware of it. The
bigger challenges are when you’re just not aware of how this thing might affect
one project that somebody’s almost forgotten about.&lt;&#x2F;p&gt;

&lt;p&gt;The other thing is that, just to be blunt, our concept that Enterprise Edition
is only for more than X people, is a little flawed. It’s that it
applies more to those companies, that those people value it more, and they’d be
willing to pay for it more, or however you judge your value there. Clearly,
small companies would value all this automation, and everything else, but
they’re not going to get as much incremental value out of it, as a larger
company would.&lt;&#x2F;p&gt;

&lt;p&gt;The other way to look at it is that this is pretty advanced stuff, and frankly,
it doesn’t deserve to be, free, open source. It’s probably really complicated
stuff, and you’re going to have to pay there. Maybe there’d be levels to it,
right? There’d be a version that gives you an alert: we’ll run this test once a
day. Or even just have a blog post about how to do this: you set up a recurring,
scheduled pipeline job, once a day, to test if any of your dependencies have
been updated. And you can do that today and then it would alert you. But to
automate it, to actually, create a merge request for you, and everything else?
Well, that’s in the Enterprise feature. It’s not that version checking isn’t
important for everybody, but the automation around it really, really matters for
larger companies. Does that make sense?&lt;&#x2F;p&gt;

&lt;p&gt;Courtland:	Yeah, I mean, I think that the first way you described it, in that,
&quot;Yeah, everyone gets some value out a feature like this, but the overwhelming
value and use for this is in larger development teams,&quot; that resonated.&lt;&#x2F;p&gt;

&lt;h3 id=&quot;slo-and-auto-revert--1661&quot;&gt;SLO and auto revert – &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;issues&#x2F;1661&quot;&gt;#1661&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;

&lt;p&gt;This is a feature showing how we’re thinking about auto reverting something.
We’ve got canary deployments, and we have another feature we’re not currently
working on or scheduled, but it’s incremental rollout, so that you would not
just rollout to a single canary, or a bucket of canaries, but it would slowly
increment: 1 percent, then 5 percent, then 25 percent. But let’s say, at some point, during my
rollout, you detect an error.&lt;&#x2F;p&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;blogimages&#x2F;devops-strategy-revert.png&quot; alt=&quot;Revert&quot; class=&quot;shadow&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;p&gt;This a mockup of what it would look like. You’re like, &quot;Oh, error rates
increased by something above our threshold; let’s revert that one, go back, and
create a new issue, and alert somebody to take a look at it.&quot; Lately, I’m
thinking that I don’t know if I really want to automatically roll back, versus
just stop it in its canary form, and say, &quot;Well, it’s canary. Let’s let canary
be there, so you can debug the canary, but just don’t let the canary go on
further.&quot;&lt;&#x2F;p&gt;

&lt;p&gt;Error rate exceeding is a pretty tough one. But let’s say memory bumps up, and
you might be like, &quot;Yeah, we added something, and it’s using more memory, and
we’re okay with that. Don’t stop my deploy just because it’s using more memory.&quot;
There might need to be human intervention in there, but somewhere along this
line we’re automating a lot of the deploy stuff.&lt;&#x2F;p&gt;

&lt;h3 id=&quot;onboarding-and-adoption--32638&quot;&gt;Onboarding and adoption – &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;issues&#x2F;32638&quot;&gt;#32638&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;

&lt;p&gt;Onboarding and adoption is a really big issue, with lots of different ideas for
how to improve onboarding, how to get people actually using idea to production,
improving auto deploy. Not a lot of visuals, so I won’t really talk about it,
but it’s definitely one of our top priorities; the next most important thing
we’re working on.&lt;&#x2F;p&gt;

&lt;h3 id=&quot;cloud-development--32637&quot;&gt;Cloud development – &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;issues&#x2F;32637&quot;&gt;#32637&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;

&lt;p&gt;Cloud development is the idea that setting up your local host machine is
actually kind of a pain sometimes. Especially with microservices, where each
service can be in their own language, you don’t want to maintain Java, and Ruby,
and Node, and all these other versions of dependencies, and every time something
switches, you’ve got to reinstall a new version of stuff. Or even these days,
you might develop on an iPad, and you don’t have a local host to compile things.&lt;&#x2F;p&gt;

&lt;p&gt;Cloud9 is the biggest, well known thing, from an IDE perspective, and Amazon
bought them a little while ago. But even aside from the IDE portion of it, it’s
just being able to develop in the cloud, and being able to make some changes,
and then push them back; commit them to a repo.&lt;&#x2F;p&gt;

&lt;p&gt;We have a little bit of a demo like this, right now, with our web terminal. So,
if you have Kubernetes, you see this terminal button, and it just pops up the
terminal right in the staging server. And I can actually go ahead and edit a
file there, and… I just made a live change into my staging app.&lt;&#x2F;p&gt;

&lt;p&gt;Now, generally speaking, I would not actually recommend you do that, because
I’m messing with my staging app, that’s not what it&#x27;s for. It makes an awesome
little demo, but it’s not what you should do. What we want to do is come up with
a way that people could do that, but have it be not on your staging app, but in
maybe a dev environment that is specifically for this purpose. But that also,
after you make your changes, and test them, and run them live, you can then go
and commit them back to version control, and close that loop. So there’s a whole
bunch of issues related to that. And to be honest, it was what we were hoping
that Koding would have provided for us, and we have an integration
with them, but it hasn’t worked out, really, the way that we had hoped. And so,
we’re looking at alternatives, and we think we can probably do this ourselves.&lt;&#x2F;p&gt;

&lt;p&gt;Anyway, that’s a big thing to flesh out.&lt;&#x2F;p&gt;

&lt;h3 id=&quot;gitlab-paas--32820&quot;&gt;GitLab PaaS – &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;issues&#x2F;32820&quot;&gt;#32820&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;

&lt;p&gt;Heroku is awesome, because it gives you this really great platform that’s easy
to use, and gives you all this functionality on top of Amazon. Five or six years
ago it was super, brain-meltingly awesome to get people to do ops. For a
developer, I don’t have to be aware of how to do ops; Heroku just does ops
for us.&lt;&#x2F;p&gt;

&lt;p&gt;GitLab PaaS is basically the idea that you’ve got a lot of these components, and
we’re not going to invent them all from scratch. We’re going to rely on
Kubernetes, for example. But on top of Kubernetes, we could make an awesome
environment for ops. An ops environment, or a platform as a service. And so,
there’s an issue to discuss what it would take to do that. At some point in
time, this is a big item for us. If we can make it super really easy for you to
fully manage your ops environment via GitLab, and maybe, for example, never
touch the Kubernetes dashboard; never touch any of the tools, just use the
GitLab tools to do this. That’s pretty powerful.&lt;&#x2F;p&gt;

&lt;p&gt;Sort of related is an idea in the onboarding stuff, that on GitLab.com
we can actually provide you with a Kubernetes cluster; maybe a shared cluster. We
have to worry about security, of course. But imagine if you were a brand new
user on GitLab.com, and you push up an app, and you have nothing in there
specifically for GitLab, you just push up your code, and GitLab is like, &quot;Oh,
that’s a Ruby app. Okay, I know how to build Ruby apps. Oh, and I also know how
to test Ruby apps. I’m just going to go and test them automatically for you.&quot;
And, &quot;Oh, by the way, I know how to deploy this. I’m just going to go ahead and
deploy this to production.&quot; And we’ll make a
production.project-name.ephemeral-gitlabapps.com, whatever the hell, some domain
so that it’s not going to affect your actual production. But if you wanted to,
you would just point your DNS over to this production app, and you&#x27;ve got the
production app running on GitLab infrastructure. And that’s, really, what Heroku
provided, right?&lt;&#x2F;p&gt;

&lt;p&gt;But that also is an onboarding thing for us to make it really easy. Because if
we want everybody to have CI, well, let’s turn it on for you. That’s pretty
awesome. If we want everybody to have CD, we can’t just turn it on for you,
because you have to have a place to deploy it to. So, if we just provided you a
Kubernetes cluster (&quot;everybody gets a cluster&quot;), then you just got a place. And,
I mean, we’ll severely limit it. We’ll make it limited in some way, so that
you’re not going to run the production stuff for long there. Or if you do, you have
to pay for it. But we’re not going to try and make money off of the production
resources. We want to make money off of making it really easy. So, really, what
we want to do is encourage you to, then, go and spin up your own Kubernetes
cluster, say, on Google. And we’ll make a nice little link that says, &quot;Go and
spin up a cluster on GKE.&quot; We’ll make that really, really easy, but to make it
super easy, for some number of days, we can just provide you that cluster,
automatically.&lt;&#x2F;p&gt;

&lt;h3 id=&quot;feature-flags--779&quot;&gt;Feature flags – &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;issues&#x2F;779&quot;&gt;#779&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;

&lt;p&gt;Feature flags are really about decoupling delivery from deployment. It’s the
idea that you make your code, you deploy it, but you haven’t turned it on, so
it’s not delivered yet. And the idea there is that it means you can merge in the
main line, more often, because it’s not affecting anybody. And, also, it really
helps because you can do things like: when I do deliver, I can deliver it for
certain people; just GitLab employees or just the Beta group, and then I can
control that rollout. So then, if there&#x27;s an error rate spike, well, it’s just
a few a people and I know who they are, and they’re going to complain to me.
It’s no big deal. But I can test things out, get it polished, fix the problems,
before rolling it out. And then, you can also do things like, roll it out to 10 percent
of the people, 50 percent of the people, whatever. It’s all about reducing risk, and
improving quality, and fundamentally about getting things into your mainline
quicker. So, it’s ops-ish, in that sense, but it’s, really, still pretty fully
on dev.&lt;&#x2F;p&gt;

&lt;h3 id=&quot;artifact-management--2752&quot;&gt;Artifact management – &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;issues&#x2F;2752&quot;&gt;#2752&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;

&lt;p&gt;Artifact management has become a hot topic lately. We already have a container
registry for Docker image artifacts, and we also have file-based artifacts that
you can pass between jobs, and pass between pipelines, and even pass between
cross project pipelines. And we have ways to download them, and browse them, but
if those artifacts happen to be things like Maven or Ruby or node modules, and
you want to publish them, and then consume them in other pipelines, we don’t
have a formal way to do that.&lt;&#x2F;p&gt;

&lt;p&gt;And you could, obviously, publish to the open source, RubyGems, for example. But
if you want a private Gem, that is only consumed by your team… Maybe that&#x27;s
not as big for Ruby developers, but Java developers do that all the time. A lot
of Java developers use Artifactory or Sonatype Nexus. In order to complete the
DevOps tool chain, we need to have some first class support for that, either by
bundling in one of these other providers, or by adding layers, and APIs, on top
of our existing artifacts. My personal pet favorite right now is, let’s say we
can just tag our existing artifact, and say, &quot;Oh, this is Maven type of
artifact,&quot; and then we expose that via an API and so then you can declare that
in another project, and it would just consume the APIs, and just know how to do
that. But it would also use our built-in authentication so you don’t have to set
up creds and do all this declaration; you can be like, &quot;Oh, I’ve got access to
this project and this project, so I can get the artifacts, and I can consume it
all really easily.&quot;&lt;&#x2F;p&gt;

&lt;h3 id=&quot;auto-devops--35712&quot;&gt;Auto DevOps – &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;issues&#x2F;35712&quot;&gt;#35712&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;

&lt;p&gt;&lt;em&gt;Note: We shipped the first iteration of Auto DevOps in &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;2017&#x2F;09&#x2F;22&#x2F;gitlab-10-0-released&#x2F;#auto-devops&quot;&gt;10.0&lt;&#x2F;a&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;

&lt;p&gt;So, let’s talk about Auto DevOps. This spans from the near-term to the very
long-term. It’s great that we do a lot of DevOps, and in a very simplistic way,
it’s like, &quot;Oh, but shouldn’t we just make this stuff automatic?&quot; The way I
phrase it is, we should provide the best practices in an easy and default way.
You can set up a GitLab CI YAML, but you have to actively go and do that. But,
really, every project should be running some kind of CI. So, why don’t we just
detect when you’ve pushed up a project; we’ll just build it, and we’ll go and
test it, because we know how to do testing. Today, with Auto Deploy, we already
use Auto Build, with build packs. We will automatically detect, I think, one of
seven different languages, and automatically build your Java app, or Ruby, or
Node… and we use Heroku’s build packs, actually, to do this build. And so we
build that up, and when using Auto Deploy, we’ll go ahead and deploy that. You
still have to, obviously, have a Kubernetes cluster in order to do that, so it’s
not fully automated if you don’t have that. But if you’ve got Kubernetes, hey,
this is a literally one click. You pick from a menu, say, &quot;Oh, I’m on
Kubernetes,&quot; and then hit submit, and you’ve got Auto Deploy and Auto Build.&lt;&#x2F;p&gt;

&lt;p&gt;But one of the things we don’t have is Auto CI. And that’s a little annoying,
but it’s one of the things we want to pick up, and actually, hopefully our CTO,
Dmitriy, is going to pick that up in Q3; it&#x27;s one of his OKRs. Heroku,
themselves, actually extended build packs to do testing, and so that means that
there’s at least five build packs that know how to test these languages. And so,
hey, let’s use that. But even if that doesn’t work, there’s a lot of other
things we can do. Other companies have all this stuff automated, as well. So if
we can’t use Heroku CI, being able to say, &quot;Oh, this is this language; we know
how to test this language,&quot; we&#x27;ll be making that automatic.&lt;&#x2F;p&gt;

&lt;p&gt;Automatic is multiple levels of things. Is it a wizard that configures this
stuff for me? Is it one click checkbox, that says, &quot;Yes, turn on auto CI,&quot; or is
it templates that I can easily add into my GitLab CI YAML? I think, in order to
qualify as auto, what we have to do here is that it shouldn’t be templates. It
shouldn’t be blog posts that tell me how to do it. That’s just CI. It should be,
literally, just &quot;I pushed and it worked;&quot; or at most a checkbox or two.&lt;&#x2F;p&gt;

&lt;p&gt;Let’s go further, what other thing could we just automate here? And not automate
strictly for the purposes of automation, but about bringing best practices to
people. So, you have to actively work hard, to turn these things off. If you
don’t want CI, then shut it off, but by default you should have this.&lt;&#x2F;p&gt;

&lt;p&gt;So, this is a really, really long list of things that will take us forever to
get to. The first ones have links, because we’re tracking real issues for this.
Auto Metrics is a great one. If you’re running certain languages, you should
just be able to, really easily, go and just pull the right information out of
there. But whatever, the list is huge.&lt;&#x2F;p&gt;

&lt;p&gt;But the idea is that we can build up this Auto DevOps, even the marketing term,
and start talking about it in that way, and to not just say that GitLab is great
for your DevOps and is a complete DevOps tool chain. But, in fact, we do all
this stuff for you automatically.&lt;&#x2F;p&gt;

&lt;p&gt;There’s a lot to be done to make this fully automated. And what percentage of
projects can we really do? Auto Deploy is a great example that only works for
web apps. If it’s not a web app, we can’t just deploy it. What would it mean? We
deploy it, and it just wouldn’t function. If you made a command line app, what
would deploy even mean? Or if it’s a Maven, or really any kind of module that
you bundled up and released, that’s not the same thing as a deploy. So, maybe we
need an Auto Release. It’s not on this list, but maybe it should be. But within
the web app space, we can do some of this stuff automatically.&lt;&#x2F;p&gt;

&lt;p&gt;So that’s it. Everything you ever wanted to know about DevOps.&lt;&#x2F;p&gt;
&lt;img src=&#x27;https:&#x2F;&#x2F;about.gitlab.com&#x2F;images&#x2F;blogimages&#x2F;devops-nova-scotia-cover.jpg&#x27; class=&#x27;webfeedsFeaturedVisual&#x27; style=&#x27;display: none;&#x27; &#x2F;&gt;</content>
</entry>
<entry>
<title>GitLab Patch Release: 9.5.8</title>
<link href='https://about.gitlab.com/2017/10/04/gitlab-9-dot-5-dot-8-released/' rel='alternate' />
<id>https://about.gitlab.com/2017/10/04/gitlab-9-dot-5-dot-8-released/</id>
<published>2017-10-04T00:00:00+00:00</published>
<updated>2017-10-04T00:00:00+00:00</updated>
<author>
<name>Jose Ivan Vargas</name>
</author>
<content type='html'>&lt;p&gt;Today we are releasing version 9.5.8 for GitLab Community Edition (CE) and Enterprise Edition (EE).&lt;&#x2F;p&gt;

&lt;p&gt;This version includes backports of fixes for bugs that are present in the 9.5.x releases.&lt;&#x2F;p&gt;



&lt;p&gt;It includes the following fixes:&lt;&#x2F;p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Fix fork button being disabled for users who can fork to group (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14551&quot;&gt;!14551&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE&lt;&#x2F;strong&gt; Fix delta size check to handle commit or nil objects (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;2976&quot;&gt;!2976&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE&lt;&#x2F;strong&gt; Fix EE delta size check handling with annotated tags (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;3041&quot;&gt;!3041&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;h2 id=&quot;upgrade-barometer&quot;&gt;Upgrade barometer&lt;&#x2F;h2&gt;

&lt;p&gt;This version does not include any new migrations, and should not require any
downtime.&lt;&#x2F;p&gt;

&lt;p&gt;Please be aware that by default the Omnibus packages will stop, run migrations,
and start again, no matter how “big” or “small” the upgrade is. This behavior
can be changed by adding a &lt;a href=&quot;http:&#x2F;&#x2F;doc.gitlab.com&#x2F;omnibus&#x2F;update&#x2F;README.html&quot;&gt;&lt;code&gt;&#x2F;etc&#x2F;gitlab&#x2F;skip-auto-migrations&lt;&#x2F;code&gt;
file&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;updating&quot;&gt;Updating&lt;&#x2F;h2&gt;

&lt;p&gt;To update, check out our &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;update&#x2F;&quot;&gt;update page&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;enterprise-edition&quot;&gt;Enterprise Edition&lt;&#x2F;h2&gt;

&lt;p&gt;Interested in GitLab Enterprise Edition? Check out the &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;gitlab-ee&#x2F;&quot;&gt;features exclusive to
EE&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;Access to GitLab Enterprise Edition is granted by a &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;products&#x2F;&quot;&gt;subscription&lt;&#x2F;a&gt;.
No time to upgrade GitLab yourself? Subscribers receive upgrade and installation
services.&lt;&#x2F;p&gt;
&lt;img src=&#x27;https:&#x2F;&#x2F;about.gitlab.com&#x2F;images&#x2F;default-blog-image.png&#x27; class=&#x27;webfeedsFeaturedVisual&#x27; style=&#x27;display: none;&#x27; &#x2F;&gt;</content>
</entry>
<entry>
<title>GitLab Patch Release: 9.5.7</title>
<link href='https://about.gitlab.com/2017/10/03/gitlab-9-dot-5-dot-7-released/' rel='alternate' />
<id>https://about.gitlab.com/2017/10/03/gitlab-9-dot-5-dot-7-released/</id>
<published>2017-10-03T00:00:00+00:00</published>
<updated>2017-10-03T00:00:00+00:00</updated>
<author>
<name>Jose Ivan Vargas</name>
</author>
<content type='html'>&lt;p&gt;Today we are releasing version 9.5.7 for GitLab Community Edition (CE) and Enterprise Edition (EE).&lt;&#x2F;p&gt;

&lt;p&gt;This version resolves a single regression introduced in 9.5.4, which prevented admins from importing repositories from the command line.&lt;&#x2F;p&gt;



&lt;p&gt;It includes the following fix:&lt;&#x2F;p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Fix gitlab rake:import:repos task for 9.5.x (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14639&quot;&gt;!14639&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;h2 id=&quot;upgrade-barometer&quot;&gt;Upgrade barometer&lt;&#x2F;h2&gt;

&lt;p&gt;This version does not include any new migrations, and should not require any
downtime.&lt;&#x2F;p&gt;

&lt;p&gt;Please be aware that by default the Omnibus packages will stop, run migrations,
and start again, no matter how “big” or “small” the upgrade is. This behavior
can be changed by adding a &lt;a href=&quot;http:&#x2F;&#x2F;doc.gitlab.com&#x2F;omnibus&#x2F;update&#x2F;README.html&quot;&gt;&lt;code&gt;&#x2F;etc&#x2F;gitlab&#x2F;skip-auto-migrations&lt;&#x2F;code&gt;
file&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;updating&quot;&gt;Updating&lt;&#x2F;h2&gt;

&lt;p&gt;To update, check out our &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;update&#x2F;&quot;&gt;update page&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;enterprise-edition&quot;&gt;Enterprise Edition&lt;&#x2F;h2&gt;

&lt;p&gt;Interested in GitLab Enterprise Edition? Check out the &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;gitlab-ee&#x2F;&quot;&gt;features exclusive to
EE&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;Access to GitLab Enterprise Edition is granted by a &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;products&#x2F;&quot;&gt;subscription&lt;&#x2F;a&gt;.
No time to upgrade GitLab yourself? Subscribers receive upgrade and installation
services.&lt;&#x2F;p&gt;
&lt;img src=&#x27;https:&#x2F;&#x2F;about.gitlab.com&#x2F;images&#x2F;default-blog-image.png&#x27; class=&#x27;webfeedsFeaturedVisual&#x27; style=&#x27;display: none;&#x27; &#x2F;&gt;</content>
</entry>
<entry>
<title>Scaling the GitLab database</title>
<link href='https://about.gitlab.com/2017/10/02/scaling-the-gitlab-database/' rel='alternate' />
<id>https://about.gitlab.com/2017/10/02/scaling-the-gitlab-database/</id>
<published>2017-10-02T00:00:00+00:00</published>
<updated>2017-10-02T00:00:00+00:00</updated>
<author>
<name>Yorick Peterse</name>
</author>
<content type='html'>&lt;p&gt;For a long time GitLab.com used a single PostgreSQL database server and a single
replica for disaster recovery purposes. This worked reasonably well for the
first few years of GitLab.com&#x27;s existence, but over time we began seeing more and
more problems with this setup. In this article we&#x27;ll take a look at what we did
to help solve these problems for both GitLab.com and self-hosted GitLab
instances.&lt;&#x2F;p&gt;



&lt;p&gt;For example, the database was under constant pressure, with CPU utilization
hovering around 70 percent almost all the time. Not because we used all
available resources in the best way possible, but because we were bombarding the
server with too many (badly optimized) queries. We realized we needed a better
setup that would allow us to balance the load and make GitLab.com more resilient
to any problems that may occur on the primary database server.&lt;&#x2F;p&gt;

&lt;p&gt;When tackling these problems using PostgreSQL there are essentially four
techniques you can apply:&lt;&#x2F;p&gt;

&lt;ol&gt;
  &lt;li&gt;Optimize your application code so the queries are more efficient (and
ideally use fewer resources).&lt;&#x2F;li&gt;
  &lt;li&gt;Use a connection pooler to reduce the number of
database connections (and associated resources) necessary.&lt;&#x2F;li&gt;
  &lt;li&gt;Balance the load across multiple database servers.&lt;&#x2F;li&gt;
  &lt;li&gt;Shard your database.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;

&lt;p&gt;Optimizing the application code is something we have been working on actively
for the past two years, but it&#x27;s not a final solution. Even if you improve
performance, when traffic also increases you may still need to apply the other
two techniques. For the sake of this article we&#x27;ll skip over this particular
subject and instead focus on the other techniques.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;connection-pooling&quot;&gt;Connection pooling&lt;&#x2F;h2&gt;

&lt;p&gt;In PostgreSQL a connection is handled by starting an OS process which in turn
needs a number of resources. The more connections (and thus processes), the more
resources your database will use. PostgreSQL also enforces a maximum number of
connections as defined in the &lt;a href=&quot;https:&#x2F;&#x2F;www.postgresql.org&#x2F;docs&#x2F;9.6&#x2F;static&#x2F;runtime-config-connection.html#GUC-MAX-CONNECTIONS&quot;&gt;max_connections&lt;&#x2F;a&gt; setting. Once
you hit this limit PostgreSQL will reject new connections. Such a setup can be
illustrated using the following diagram:&lt;&#x2F;p&gt;

&lt;p class=&quot;text-center&quot;&gt;&lt;img src=&quot;&#x2F;images&#x2F;scaling-the-gitlab-database&#x2F;postgresql.svg&quot; alt=&quot;PostgreSQL Diagram&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;p&gt;Here our clients connect directly to PostgreSQL, thus requiring one connection
per client.&lt;&#x2F;p&gt;

&lt;p&gt;By pooling connections we can have multiple client-side connections reuse
PostgreSQL connections. For example, without pooling we&#x27;d need 100 PostgreSQL
connections to handle 100 client connections; with connection pooling we may
only need 10 or so PostgreSQL connections depending on our configuration. This
means our connection diagram will instead look something like the following:&lt;&#x2F;p&gt;

&lt;p class=&quot;text-center&quot;&gt;&lt;img src=&quot;&#x2F;images&#x2F;scaling-the-gitlab-database&#x2F;pooler.svg&quot; alt=&quot;Connection Pooling Diagram&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;p&gt;Here we show an example where four clients connect to pgbouncer but instead of
using four PostgreSQL connections we only need two of them.&lt;&#x2F;p&gt;

&lt;p&gt;For PostgreSQL there are two connection poolers that are most commonly used:&lt;&#x2F;p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pgbouncer.github.io&#x2F;&quot;&gt;pgbouncer&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;pgpool.net&#x2F;mediawiki&#x2F;index.php&#x2F;Main_Page&quot;&gt;pgpool-II&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;p&gt;pgpool is a bit special because it does much more than just connection pooling:
it has a built-in query caching mechanism, can balance load across multiple
databases, manage replication, and more.&lt;&#x2F;p&gt;

&lt;p&gt;On the other hand pgbouncer is much simpler: all it does is connection pooling.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;database-load-balancing&quot;&gt;Database load balancing&lt;&#x2F;h2&gt;

&lt;p&gt;Load balancing on the database level is typically done by making use of
PostgreSQL&#x27;s &quot;&lt;a href=&quot;https:&#x2F;&#x2F;www.postgresql.org&#x2F;docs&#x2F;9.6&#x2F;static&#x2F;hot-standby.html&quot;&gt;hot standby&lt;&#x2F;a&gt;&quot; feature. A hot-standby is a PostgreSQL
replica that allows you to run read-only SQL queries, contrary to a regular
standby that does not allow any SQL queries to be executed. To balance load
you&#x27;d set up one or more hot-standby servers and somehow balance read-only
queries across these hosts while sending all other operations to the primary.
Scaling such a setup is fairly easy: simply add more hot-standby servers (if
necessary) as your read-only traffic increases.&lt;&#x2F;p&gt;

&lt;p&gt;Another benefit of this approach is having a more resilient database cluster.
Web requests that only use a secondary can continue to operate even if the
primary server is experiencing issues; though of course you may still run into
errors should those requests end up using the primary.&lt;&#x2F;p&gt;

&lt;p&gt;This approach however can be quite difficult to implement. For example, explicit
transactions must be executed on the primary since they may contain writes.
Furthermore, after a write we want to continue using the primary for a little
while because the changes may not yet be available on the hot-standby servers
when using asynchronous replication.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;sharding&quot;&gt;Sharding&lt;&#x2F;h2&gt;

&lt;p&gt;Sharding is the act of horizontally partitioning your data. This means that data
resides on specific servers and is retrieved using a shard key. For example, you
may partition data per project and use the project ID as the shard key. Sharding
a database is interesting when you have a very high write load (as there&#x27;s no
other easy way of balancing writes other than perhaps a multi-master setup), or
when you have &lt;em&gt;a lot&lt;&#x2F;em&gt; of data and you can no longer store it in a conventional
manner (e.g. you simply can&#x27;t fit it all on a single disk).&lt;&#x2F;p&gt;

&lt;p&gt;Unfortunately the process of setting up a sharded database is a massive
undertaking, even when using software such as &lt;a href=&quot;https:&#x2F;&#x2F;www.citusdata.com&#x2F;&quot;&gt;Citus&lt;&#x2F;a&gt;. Not only do you
need to set up the infrastructure (which varies in complexity depending on
whether you run it yourself or use a hosted solution), but you also need to
adjust large portions of your application to support sharding.&lt;&#x2F;p&gt;

&lt;h3 id=&quot;cases-against-sharding&quot;&gt;Cases against sharding&lt;&#x2F;h3&gt;

&lt;p&gt;On GitLab.com the write load is typically very low, with most of the database
queries being read-only queries. In very exceptional cases we may spike to 1500
tuple writes per second, but most of the time we barely make it past 200 tuple
writes per second. On the other hand we can easily read up to 10 million tuples
per second on any given secondary.&lt;&#x2F;p&gt;

&lt;p&gt;Storage-wise, we also don&#x27;t use that much data: only about 800 GB. A large
portion of this data is data that is being migrated in the background. Once
those migrations are done we expect our database to shrink in size quite a bit.&lt;&#x2F;p&gt;

&lt;p&gt;Then there&#x27;s the amount of work required to adjust the application so all
queries use the right shard keys. While quite a few of our queries usually
include a project ID which we could use as a shard key, there are also many
queries where this isn&#x27;t the case. Sharding would also affect the process of
contributing changes to GitLab as every contributor would now have to make sure
a shard key is present in their queries.&lt;&#x2F;p&gt;

&lt;p&gt;Finally, there is the infrastructure that&#x27;s necessary to make all of this work.
Servers have to be set up, monitoring has to be added, engineers have to be
trained so they are familiar with this new setup, the list goes on. While hosted
solutions may remove the need for managing your own servers it doesn&#x27;t solve all
problems. Engineers still have to be trained and (most likely very expensive)
bills have to be paid. At GitLab we also highly prefer to ship the tools we need
so the community can make use of them. This means that if we were going to shard
the database we&#x27;d have to ship it (or at least parts of it) in our Omnibus
packages. The only way you can make sure something you ship works is by running
it yourself, meaning we wouldn&#x27;t be able to use a hosted solution.&lt;&#x2F;p&gt;

&lt;p&gt;Ultimately we decided against sharding the database because we felt it was an
expensive, time-consuming, and complex solution to a problem we do not have.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;connection-pooling-for-gitlab&quot;&gt;Connection pooling for GitLab&lt;&#x2F;h2&gt;

&lt;p&gt;For connection pooling we had two main requirements:&lt;&#x2F;p&gt;

&lt;ol&gt;
  &lt;li&gt;It has to work well (obviously).&lt;&#x2F;li&gt;
  &lt;li&gt;It has to be easy to ship in our Omnibus packages so our users can also take
advantage of the connection pooler.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;

&lt;p&gt;Reviewing the two solutions (pgpool and pgbouncer) was done in two steps:&lt;&#x2F;p&gt;

&lt;ol&gt;
  &lt;li&gt;Perform various technical tests (does it work, how easy is it to configure,
etc).&lt;&#x2F;li&gt;
  &lt;li&gt;Find out what the experiences are of other users of the solution, what
problems they ran into and how they dealt with them, etc.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;

&lt;p&gt;pgpool was the first solution we looked into, mostly because it seemed quite
attractive based on all the features it offered. Some of the data from our tests
can be found in &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-com&#x2F;infrastructure&#x2F;issues&#x2F;259#note_23464570&quot;&gt;this&lt;&#x2F;a&gt; comment.&lt;&#x2F;p&gt;

&lt;p&gt;Ultimately we decided against using pgpool based on a number of factors. For
example, pgpool does not support sticky connections. This is problematic when
performing a write and (trying to) display the results right away. Imagine
creating an issue and being redirected to the page, only to run into an HTTP 404
error because the server used for any read-only queries did not yet have the
data. One way to work around this would be to use synchronous replication, but
this brings many other problems to the table; problems we prefer to avoid.&lt;&#x2F;p&gt;

&lt;p&gt;Another problem is that pgpool&#x27;s load balancing logic is decoupled from your
application and operates by parsing SQL queries and sending them to the right
server. Because this happens outside of your application you have very little
control over which query runs where. This may actually be beneficial to some
because you don&#x27;t need additional application logic, but it also prevents you
from adjusting the routing logic if necessary.&lt;&#x2F;p&gt;

&lt;p&gt;Configuring pgpool also proved quite difficult due to the sheer number of
configuration options. Perhaps the final nail in the coffin was the feedback we
got on pgpool from those having used it in the past. The feedback we received
regarding pgpool was usually negative, though not very detailed in most cases.
While most of the complaints appeared to be related to earlier versions of
pgpool it still made us doubt if using it was the right choice.&lt;&#x2F;p&gt;

&lt;p&gt;The feedback combined with the issues described above ultimately led to us
deciding against using pgpool and using pgbouncer instead. We performed a
similar set of tests with pgbouncer and were very satisfied with it. It&#x27;s fairly
easy to configure (and doesn&#x27;t have that much that needs configuring in the
first place), relatively easy to ship, focuses only on connection pooling (and
does it really well), and had very little (if any) noticeable overhead. Perhaps
my only complaint would be that the pgbouncer website can be a little bit hard
to navigate.&lt;&#x2F;p&gt;

&lt;p&gt;Using pgbouncer we were able to drop the number of active PostgreSQL connections
from a few hundred to only 10-20 by using transaction pooling. We opted for
using transaction pooling since Rails database connections are persistent. In
such a setup, using session pooling would prevent us from being able to reduce
the number of PostgreSQL connections, thus brining few (if any) benefits. By
using transaction pooling we were able to drop PostgreSQL&#x27;s &lt;code&gt;max_connections&lt;&#x2F;code&gt;
setting from 3000 (the reason for this particular value was never really clear)
to 300. pgbouncer is configured in such a way that even at peak capacity we will
only need 200 connections; giving us some room for additional connections such
as &lt;code&gt;psql&lt;&#x2F;code&gt; consoles and maintenance tasks.&lt;&#x2F;p&gt;

&lt;p&gt;A side effect of using transaction pooling is that you cannot use prepared
statements, as the &lt;code&gt;PREPARE&lt;&#x2F;code&gt; and &lt;code&gt;EXECUTE&lt;&#x2F;code&gt; commands may end up running in
different connections; producing errors as a result. Fortunately we did not
measure any increase in response timings when disabling prepared statements, but
we &lt;em&gt;did&lt;&#x2F;em&gt; measure a reduction of roughly 20 GB in memory usage on our database
servers.&lt;&#x2F;p&gt;

&lt;p&gt;To ensure both web requests and background jobs have connections available we
set up two separate pools: one pool of 150 connections for background
processing, and a pool of 50 connections for web requests. For web requests we
rarely need more than 20 connections, but for background processing we can
easily spike to a 100 connections simply due to the large number of background
processes running on GitLab.com.&lt;&#x2F;p&gt;

&lt;p&gt;Today we ship pgbouncer as part of GitLab EE&#x27;s High Availability package. For
more information you can refer to
&lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;administration&#x2F;high_availability&#x2F;alpha_database.html&quot;&gt;&quot;Omnibus GitLab PostgreSQL High Availability.&quot;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;h2 id=&quot;database-load-balancing-for-gitlab&quot;&gt;Database load balancing for GitLab&lt;&#x2F;h2&gt;

&lt;p&gt;With pgpool and its load balancing feature out of the picture we needed
something else to spread load across multiple hot-standby servers.&lt;&#x2F;p&gt;

&lt;p&gt;For (but not limited to) Rails applications there is a library called
&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;taskrabbit&#x2F;makara&quot;&gt;Makara&lt;&#x2F;a&gt; which implements load balancing logic and includes a default
implementation for ActiveRecord. Makara however has some problems that were a
deal-breaker for us. For example, its support for sticky connections is very
limited: when you perform a write the connection will stick to the primary using
a cookie, with a fixed TTL. This means that if replication lag is greater than
the TTL you may still end up running a query on a host that doesn&#x27;t have the
data you need.&lt;&#x2F;p&gt;

&lt;p&gt;Makara also requires you to configure quite a lot, such as all the database hosts
and their roles, with no service discovery mechanism (our current solution does
not yet support this either, though it&#x27;s planned for the near future). Makara
also &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;taskrabbit&#x2F;makara&#x2F;issues&#x2F;151&quot;&gt;does not appear to be thread-safe&lt;&#x2F;a&gt;, which is
problematic since Sidekiq (the background processing system we use) is
multi-threaded. Finally, we wanted to have control over the load balancing logic
as much as possible.&lt;&#x2F;p&gt;

&lt;p&gt;Besides Makara there&#x27;s also &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;thiagopradi&#x2F;octopus&quot;&gt;Octopus&lt;&#x2F;a&gt; which has some load balancing
mechanisms built in. Octopus however is geared towards database sharding and not
just balancing of read-only queries. As a result we did not consider using
Octopus.&lt;&#x2F;p&gt;

&lt;p&gt;Ultimately this led to us building our own solution directly into GitLab EE.
The merge request adding the initial implementation can be found &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;1283&quot;&gt;here&lt;&#x2F;a&gt;,
though some changes, improvements, and fixes were applied later on.&lt;&#x2F;p&gt;

&lt;p&gt;Our solution essentially works by replacing &lt;code&gt;ActiveRecord::Base.connection&lt;&#x2F;code&gt; with
a proxy object that handles routing of queries. This ensures we can load balance
as many queries as possible, even queries that don&#x27;t originate directly from our
own code. This proxy object in turn determines what host a query is sent to
based on the methods called, removing the need for parsing SQL queries.&lt;&#x2F;p&gt;

&lt;h3 id=&quot;sticky-connections&quot;&gt;Sticky connections&lt;&#x2F;h3&gt;

&lt;p&gt;Sticky connections are supported by storing a pointer to the current PostgreSQL
WAL position the moment a write is performed. This pointer is then stored in
Redis for a short duration at the end of a request. Each user is given their own
key so that the actions of one user won&#x27;t lead to all other users being
affected. In the next request we get the pointer and compare this with all the
secondaries. If all secondaries have a WAL pointer that exceeds our pointer we
know they are in sync and we can safely use a secondary for our read-only
queries. If one or more secondaries are not yet in sync we will continue using
the primary until they are in sync. If no write is performed for 30 seconds and
all the secondaries are still not in sync we&#x27;ll revert to using the secondaries
in order to prevent somebody from ending up running queries on the primary
forever.&lt;&#x2F;p&gt;

&lt;p&gt;Checking if a secondary has caught up is quite simple and is implemented in
&lt;code&gt;Gitlab::Database::LoadBalancing::Host#caught_up?&lt;&#x2F;code&gt; as follows:&lt;&#x2F;p&gt;

&lt;pre class=&quot;highlight ruby&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;def&lt;&#x2F;span&gt; &lt;span class=&quot;nf&quot;&gt;caught_up?&lt;&#x2F;span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;n&quot;&gt;location&lt;&#x2F;span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;&#x2F;span&gt;
  &lt;span class=&quot;n&quot;&gt;string&lt;&#x2F;span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;n&quot;&gt;connection&lt;&#x2F;span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;nf&quot;&gt;quote&lt;&#x2F;span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;n&quot;&gt;location&lt;&#x2F;span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;&#x2F;span&gt;

  &lt;span class=&quot;n&quot;&gt;query&lt;&#x2F;span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;SELECT NOT pg_is_in_recovery() OR &quot;&lt;&#x2F;span&gt; &lt;span class=&quot;p&quot;&gt;\&lt;&#x2F;span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;pg_xlog_location_diff(pg_last_xlog_replay_location(), &lt;&#x2F;span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span class=&quot;n&quot;&gt;string&lt;&#x2F;span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;&#x2F;span&gt;&lt;span class=&quot;s2&quot;&gt;) &amp;gt;= 0 AS result&quot;&lt;&#x2F;span&gt;

  &lt;span class=&quot;n&quot;&gt;row&lt;&#x2F;span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;n&quot;&gt;connection&lt;&#x2F;span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;nf&quot;&gt;select_all&lt;&#x2F;span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;n&quot;&gt;query&lt;&#x2F;span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;&#x2F;span&gt;&lt;span class=&quot;nf&quot;&gt;first&lt;&#x2F;span&gt;

  &lt;span class=&quot;n&quot;&gt;row&lt;&#x2F;span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;&#x2F;span&gt; &lt;span class=&quot;n&quot;&gt;row&lt;&#x2F;span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;s1&quot;&gt;&#x27;result&#x27;&lt;&#x2F;span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;&#x2F;span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;s1&quot;&gt;&#x27;t&#x27;&lt;&#x2F;span&gt;
&lt;span class=&quot;k&quot;&gt;ensure&lt;&#x2F;span&gt;
  &lt;span class=&quot;n&quot;&gt;release_connection&lt;&#x2F;span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;&#x2F;span&gt;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Most of the code here is standard Rails code to run raw queries and grab the
results. The most interesting part is the query itself, which is as follows:&lt;&#x2F;p&gt;

&lt;pre class=&quot;highlight sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;SELECT&lt;&#x2F;span&gt; &lt;span class=&quot;k&quot;&gt;NOT&lt;&#x2F;span&gt; &lt;span class=&quot;n&quot;&gt;pg_is_in_recovery&lt;&#x2F;span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;&#x2F;span&gt;
&lt;span class=&quot;k&quot;&gt;OR&lt;&#x2F;span&gt; &lt;span class=&quot;n&quot;&gt;pg_xlog_location_diff&lt;&#x2F;span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;n&quot;&gt;pg_last_xlog_replay_location&lt;&#x2F;span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;&#x2F;span&gt; &lt;span class=&quot;n&quot;&gt;WAL&lt;&#x2F;span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;n&quot;&gt;POINTER&lt;&#x2F;span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;&#x2F;span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;&#x2F;span&gt; &lt;span class=&quot;k&quot;&gt;AS&lt;&#x2F;span&gt; &lt;span class=&quot;k&quot;&gt;result&lt;&#x2F;span&gt;&lt;span class=&quot;nv&quot;&gt;&quot;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Here &lt;code&gt;WAL-POINTER&lt;&#x2F;code&gt; is the WAL pointer as returned by the PostgreSQL function
&lt;code&gt;pg_current_xlog_insert_location()&lt;&#x2F;code&gt;, which is executed on the primary. In the
above code snippet the pointer is passed as an argument, which is then
quoted&#x2F;escaped and passed to the query.&lt;&#x2F;p&gt;

&lt;p&gt;Using the function &lt;code&gt;pg_last_xlog_replay_location()&lt;&#x2F;code&gt; we can get the WAL pointer
of a secondary, which we can then compare to our primary pointer using
&lt;code&gt;pg_xlog_location_diff()&lt;&#x2F;code&gt;. If the result is greater than 0 we know the secondary
is in sync.&lt;&#x2F;p&gt;

&lt;p&gt;The check &lt;code&gt;NOT pg_is_in_recovery()&lt;&#x2F;code&gt; is added to ensure the query won&#x27;t fail when
a secondary that we&#x27;re checking was &lt;em&gt;just&lt;&#x2F;em&gt; promoted to a primary and our
GitLab process is not yet aware of this. In such a case we simply return &lt;code&gt;true&lt;&#x2F;code&gt;
since the primary is always in sync with itself.&lt;&#x2F;p&gt;

&lt;h3 id=&quot;background-processing&quot;&gt;Background processing&lt;&#x2F;h3&gt;

&lt;p&gt;Our background processing code &lt;em&gt;always&lt;&#x2F;em&gt; uses the primary since most of the work
performed in the background consists of writes. Furthermore we can&#x27;t reliably
use a hot-standby as we have no way of knowing whether a job should use the
primary or not as many jobs are not directly tied into a user.&lt;&#x2F;p&gt;

&lt;h3 id=&quot;connection-errors&quot;&gt;Connection errors&lt;&#x2F;h3&gt;

&lt;p&gt;To deal with connection errors our load balancer will not use a secondary if it
is deemed to be offline, plus connection errors on any host (including the
primary) will result in the load balancer retrying the operation a few times.
This ensures that we don&#x27;t immediately display an error page in the event of a
hiccup or a database failover. While we also deal with &lt;a href=&quot;https:&#x2F;&#x2F;www.postgresql.org&#x2F;docs&#x2F;current&#x2F;static&#x2F;hot-standby.html#HOT-STANDBY-CONFLICT&quot;&gt;hot standby
conflicts&lt;&#x2F;a&gt; on the load balancer level we ended up
enabling &lt;code&gt;hot_standby_feedback&lt;&#x2F;code&gt; on our secondaries as doing so solved all
hot-standby conflicts without having any negative impact on table bloat.&lt;&#x2F;p&gt;

&lt;p&gt;The procedure we use is quite simple: for a secondary we&#x27;ll retry a few times
with no delay in between. For a primary we&#x27;ll retry the operation a few times
using an exponential backoff.&lt;&#x2F;p&gt;

&lt;p&gt;For more information you can refer to the source code in GitLab EE:&lt;&#x2F;p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;tree&#x2F;master&#x2F;lib&#x2F;gitlab&#x2F;database&#x2F;load_balancing.rb&quot;&gt;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;tree&#x2F;master&#x2F;lib&#x2F;gitlab&#x2F;database&#x2F;load_balancing.rb&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;tree&#x2F;master&#x2F;lib&#x2F;gitlab&#x2F;database&#x2F;load_balancing&quot;&gt;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;tree&#x2F;master&#x2F;lib&#x2F;gitlab&#x2F;database&#x2F;load_balancing&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;p&gt;Database load balancing was first introduced in GitLab 9.0 and &lt;em&gt;only&lt;&#x2F;em&gt; supports
PostgreSQL. More information can be found in the &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;2017&#x2F;03&#x2F;22&#x2F;gitlab-9-0-released&#x2F;&quot;&gt;9.0 release post&lt;&#x2F;a&gt;
and the &lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;administration&#x2F;database_load_balancing.html&quot;&gt;documentation&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;crunchy-data&quot;&gt;Crunchy Data&lt;&#x2F;h2&gt;

&lt;p&gt;In parallel to working on implementing connection pooling and load balancing we
were working with &lt;a href=&quot;https:&#x2F;&#x2F;www.crunchydata.com&#x2F;&quot;&gt;Crunchy Data&lt;&#x2F;a&gt;. Until very recently I was the only
&lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;handbook&#x2F;infrastructure&#x2F;database&#x2F;&quot;&gt;database specialist&lt;&#x2F;a&gt; which meant I had a lot of work on my
plate. Furthermore my knowledge of PostgreSQL internals and its wide range of
settings is limited (or at least was at the time), meaning there&#x27;s only so much
I could do. Because of this we hired Crunchy to help us out with identifying
problems, investigating slow queries, proposing schema optimisations, optimising
PostgreSQL settings, and much more.&lt;&#x2F;p&gt;

&lt;p&gt;For the duration of this cooperation most work was performed in confidential
issues so we could share private data such as log files. With the cooperation
coming to an end we have removed sensitive information from some of these issues
and opened them up to the public. The primary issue was
&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-com&#x2F;infrastructure&#x2F;issues&#x2F;1448&quot;&gt;gitlab-com&#x2F;infrastructure#1448&lt;&#x2F;a&gt;, which in turn led to many separate
issues being created and resolved.&lt;&#x2F;p&gt;

&lt;p&gt;The benefit of this cooperation was immense as it helped us identify and solve
many problems, something that would have taken me months to identify and solve
if I had to do this all by myself.&lt;&#x2F;p&gt;

&lt;p&gt;Fortunately we recently managed to hire our &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;_stark&quot;&gt;second database specialist&lt;&#x2F;a&gt;
and we hope to grow the team more in the coming months.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;combining-connection-pooling-and-database-load-balancing&quot;&gt;Combining connection pooling and database load balancing&lt;&#x2F;h2&gt;

&lt;p&gt;Combining connection pooling and database load balancing allowed us to
drastically reduce the number of resources necessary to run our database cluster
as well as spread load across our hot-standby servers. For example, instead of
our primary having a near constant CPU utilisation of 70 percent today it
usually hovers between 10 percent and 20 percent, while our two hot-standby
servers hover around 20 percent most of the time:&lt;&#x2F;p&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;scaling-the-gitlab-database&#x2F;cpu-percentage.png&quot; alt=&quot;CPU Percentage&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;p&gt;Here &lt;code&gt;db3.cluster.gitlab.com&lt;&#x2F;code&gt; is our primary while the other two hosts are our
secondaries.&lt;&#x2F;p&gt;

&lt;p&gt;Other load-related factors such as load averages, disk usage, and memory usage
were also drastically improved. For example, instead of the primary having a
load average of around 20 it barely goes above an average of 10:&lt;&#x2F;p&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;scaling-the-gitlab-database&#x2F;load-averages.png&quot; alt=&quot;CPU Percentage&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;p&gt;During the busiest hours our secondaries serve around 12 000 transactions per
second (roughly 740 000 per minute), while the primary serves around 6 000
transactions per second (roughly 340 000 per minute):&lt;&#x2F;p&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;scaling-the-gitlab-database&#x2F;transactions.png&quot; alt=&quot;Transactions Per Second&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;p&gt;Unfortunately we don&#x27;t have any data on the transaction rates prior to deploying
pgbouncer and our database load balancer.&lt;&#x2F;p&gt;

&lt;p&gt;An up-to-date overview of our PostgreSQL statistics can be found at our &lt;a href=&quot;http:&#x2F;&#x2F;monitor.gitlab.net&#x2F;dashboard&#x2F;db&#x2F;postgres-stats?refresh=5m&amp;amp;orgId=1&quot;&gt;public
Grafana dashboard&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;Some of the settings we have set for pgbouncer are as follows:&lt;&#x2F;p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Setting&lt;&#x2F;th&gt;
      &lt;th&gt;Value&lt;&#x2F;th&gt;
    &lt;&#x2F;tr&gt;
  &lt;&#x2F;thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;default_pool_size&lt;&#x2F;td&gt;
      &lt;td&gt;100&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td&gt;reserve_pool_size&lt;&#x2F;td&gt;
      &lt;td&gt;5&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td&gt;reserve_pool_timeout&lt;&#x2F;td&gt;
      &lt;td&gt;3&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td&gt;max_client_conn&lt;&#x2F;td&gt;
      &lt;td&gt;2048&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td&gt;pool_mode&lt;&#x2F;td&gt;
      &lt;td&gt;transaction&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
    &lt;tr&gt;
      &lt;td&gt;server_idle_timeout&lt;&#x2F;td&gt;
      &lt;td&gt;30&lt;&#x2F;td&gt;
    &lt;&#x2F;tr&gt;
  &lt;&#x2F;tbody&gt;
&lt;&#x2F;table&gt;

&lt;p&gt;With that all said there is still some work left to be done such as:
implementing service discovery (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;issues&#x2F;2042&quot;&gt;#2042&lt;&#x2F;a&gt;), improving how we check if
a secondary is available (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;issues&#x2F;2866&quot;&gt;#2866&lt;&#x2F;a&gt;), and ignoring secondaries that
are too far behind the primary (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;issues&#x2F;2197&quot;&gt;#2197&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;

&lt;p&gt;It&#x27;s worth mentioning that we currently do not have any plans of turning our
load balancing solution into a standalone library that you can use outside of
GitLab, instead our focus is on providing a solid load balancing solution for
GitLab EE.&lt;&#x2F;p&gt;

&lt;p&gt;If this has gotten you interested and you enjoy working with databases,
improving application performance, and adding database-related features to
GitLab (such as &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;issues&#x2F;2042&quot;&gt;service discovery&lt;&#x2F;a&gt;) you should definitely check out
the &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;jobs&#x2F;specialist&#x2F;database&#x2F;&quot;&gt;job opening&lt;&#x2F;a&gt; and the &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;handbook&#x2F;infrastructure&#x2F;database&#x2F;&quot;&gt;database specialist handbook
entry&lt;&#x2F;a&gt; for more information.&lt;&#x2F;p&gt;

&lt;img src=&#x27;https:&#x2F;&#x2F;about.gitlab.com&#x2F;images&#x2F;scaling-the-gitlab-database&#x2F;banner.jpg&#x27; class=&#x27;webfeedsFeaturedVisual&#x27; style=&#x27;display: none;&#x27; &#x2F;&gt;</content>
</entry>
<entry>
<title>GitLab Patch Release: 9.5.6</title>
<link href='https://about.gitlab.com/2017/09/28/gitlab-9-dot-5-dot-6-released/' rel='alternate' />
<id>https://about.gitlab.com/2017/09/28/gitlab-9-dot-5-dot-6-released/</id>
<published>2017-09-28T00:00:00+00:00</published>
<updated>2017-09-28T00:00:00+00:00</updated>
<author>
<name>Jose Ivan Vargas</name>
</author>
<content type='html'>&lt;p&gt;Today we are releasing version 9.5.6 for GitLab Community Edition (CE) and Enterprise Edition (EE).&lt;&#x2F;p&gt;

&lt;p&gt;This version resolves a number of regressions and bugs in
&lt;a href=&quot;&#x2F;2017&#x2F;09&#x2F;18&#x2F;gitlab-9-dot-5-dot-5-released&#x2F;&quot;&gt;this month&#x27;s 9.5.5 release&lt;&#x2F;a&gt; and
prior versions.&lt;&#x2F;p&gt;

&lt;p&gt;It includes the following fixes:&lt;&#x2F;p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Fix MR widget with ready to merge buttons&#x2F;controls at mobile breakpoint (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14242&quot;&gt;!14242&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Fix MR widget with external CI services&#x2F;integrations (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;13977&quot;&gt;!13977&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Update &quot;x&#x2F;x discussions resolved&quot; checkmark icon to be green when all discussions resolved (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14255&quot;&gt;!14255&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Upgrade Nokogiri because of CVE-2017-9050 (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14427&quot;&gt;!14427&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Handle error when fetching ref for MR with deleted source branch (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14550&quot;&gt;!14550&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE&lt;&#x2F;strong&gt; Show group tab if member lock is enabled (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;3025&quot;&gt;!3025&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;Omnibus CE&#x2F;EE&lt;&#x2F;strong&gt; Bump ruby version to 2.3.5 for security fixes (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;omnibus-gitlab&#x2F;merge_requests&#x2F;1930&#x2F;&quot;&gt;!1930&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;Omnibus CE&#x2F;EE&lt;&#x2F;strong&gt; Resolve &quot;update_databases assumes a populated databases.json&quot; (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;omnibus-gitlab&#x2F;merge_requests&#x2F;1924&#x2F;&quot;&gt;!1924&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;Omnibus CE&#x2F;EE&lt;&#x2F;strong&gt; Resolve &quot;restart repmgrd after node register&quot; (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;omnibus-gitlab&#x2F;merge_requests&#x2F;1928&#x2F;&quot;&gt;!1928&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;Omnibus CE&#x2F;EE&lt;&#x2F;strong&gt; Resolve &quot;repmgr unregister doesn&#x27;t accept –node&quot; (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;omnibus-gitlab&#x2F;merge_requests&#x2F;1927&#x2F;&quot;&gt;!1927&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;h2 id=&quot;upgrade-barometer&quot;&gt;Upgrade barometer&lt;&#x2F;h2&gt;

&lt;p&gt;This version does not include any new migrations, and should not require any
downtime.&lt;&#x2F;p&gt;

&lt;p&gt;Please be aware that by default the Omnibus packages will stop, run migrations,
and start again, no matter how “big” or “small” the upgrade is. This behavior
can be changed by adding a &lt;a href=&quot;http:&#x2F;&#x2F;doc.gitlab.com&#x2F;omnibus&#x2F;update&#x2F;README.html&quot;&gt;&lt;code&gt;&#x2F;etc&#x2F;gitlab&#x2F;skip-auto-migrations&lt;&#x2F;code&gt;
file&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;updating&quot;&gt;Updating&lt;&#x2F;h2&gt;

&lt;p&gt;To update, check out our &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;update&#x2F;&quot;&gt;update page&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;enterprise-edition&quot;&gt;Enterprise Edition&lt;&#x2F;h2&gt;

&lt;p&gt;Interested in GitLab Enterprise Edition? Check out the &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;gitlab-ee&#x2F;&quot;&gt;features exclusive to
EE&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;Access to GitLab Enterprise Edition is granted by a &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;products&#x2F;&quot;&gt;subscription&lt;&#x2F;a&gt;.
No time to upgrade GitLab yourself? Subscribers receive upgrade and installation
services.&lt;&#x2F;p&gt;
&lt;img src=&#x27;https:&#x2F;&#x2F;about.gitlab.com&#x2F;images&#x2F;default-blog-image.png&#x27; class=&#x27;webfeedsFeaturedVisual&#x27; style=&#x27;display: none;&#x27; &#x2F;&gt;</content>
</entry>
<entry>
<title>GitLab Patch Release: 10.0.2</title>
<link href='https://about.gitlab.com/2017/09/27/gitlab-10-dot-0-dot-2-released/' rel='alternate' />
<id>https://about.gitlab.com/2017/09/27/gitlab-10-dot-0-dot-2-released/</id>
<published>2017-09-27T00:00:00+00:00</published>
<updated>2017-09-27T00:00:00+00:00</updated>
<author>
<name>Jaroslava Kadlecová</name>
</author>
<content type='html'>&lt;p&gt;Today we are releasing version 10.0.2 for GitLab Community Edition (CE) and Enterprise Edition (EE).&lt;&#x2F;p&gt;

&lt;p&gt;This version resolves a number of regressions and bugs in
&lt;a href=&quot;&#x2F;2017&#x2F;09&#x2F;24&#x2F;gitlab-10-dot-0-dot-1-released&#x2F;&quot;&gt;this month&#x27;s 10.0.1 release&lt;&#x2F;a&gt; and
prior versions.&lt;&#x2F;p&gt;



&lt;p&gt;It includes the following fixes:&lt;&#x2F;p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Resize comment form after note submit and discard it (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14401&quot;&gt;!14401&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Fix rendering double note issue (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14429&quot;&gt;!14429&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Ensure that Blob.raw returns always a valid blob object (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14412&quot;&gt;!14412&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Remove navbar gradient (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14457&quot;&gt;!14457&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Re-allow &lt;code&gt;name&lt;&#x2F;code&gt; attribute on user-provided anchor HTML (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14452&quot;&gt;!14452&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Fix checks failing with &#x27;undefined method &lt;code&gt;run_command&lt;&#x2F;code&gt; in &lt;code&gt;rake gitlab:check&lt;&#x2F;code&gt; (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14469&quot;&gt;!14469&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Fix PG::UniqueViolation external_email migration (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14474&quot;&gt;!14474&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Prevent URL concatenation for avatars (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14437&quot;&gt;!14437&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; IssueNotes: Switch back to Write pane when note cancel or submit (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14402&quot;&gt;!14402&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Fix a dash being rendered in the note&#x27;s access role (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14450&quot;&gt;!14450&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Make locked setting of Runner to not affect jobs scheduling (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14483&quot;&gt;!14483&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE:&lt;&#x2F;strong&gt; Avoid wrapping users in dropdown (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14410&quot;&gt;!14410&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE:&lt;&#x2F;strong&gt; Fix delta size check to handle commit or nil objects (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;2976&quot;&gt;!2976&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE:&lt;&#x2F;strong&gt; Fix 500 error due to promote group Web hooks (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;2972&quot;&gt;!2972&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE:&lt;&#x2F;strong&gt; Add notes on authentication to PG HA document (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;2851&quot;&gt;!2851&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE:&lt;&#x2F;strong&gt; Send valid project path as name for Jira dev panel (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;3005&quot;&gt;!3005&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE:&lt;&#x2F;strong&gt; Remove duplicate group boards doc (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;2991&quot;&gt;!2991&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE:&lt;&#x2F;strong&gt; Point to embedded Consul (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;2980&quot;&gt;!2980&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE:&lt;&#x2F;strong&gt; Fix internal link in docs(&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;3003&quot;&gt;!3003&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;Omnibus:&lt;&#x2F;strong&gt; Fix an issue where enabling a GitLab Geo role would also disable all default services (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;omnibus-gitlab&#x2F;merge_requests&#x2F;1963&quot;&gt;!1963&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;Omnibus:&lt;&#x2F;strong&gt; Add option to configure redis snapshot frequency (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;omnibus-gitlab&#x2F;merge_requests&#x2F;1964&quot;&gt;!1964&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;Omnibus:&lt;&#x2F;strong&gt; Update pg-upgrade output to be more clear when a bundled PostgreSQL is not in use (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;omnibus-gitlab&#x2F;merge_requests&#x2F;1962&quot;&gt;!1962&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;Omnibus:&lt;&#x2F;strong&gt; Reload consul on config change instead of restarting (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;omnibus-gitlab&#x2F;merge_requests&#x2F;1966&quot;&gt;!1966&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;h2 id=&quot;upgrade-barometer&quot;&gt;Upgrade barometer&lt;&#x2F;h2&gt;

&lt;p&gt;This version does not include any new migrations, and should not require any
downtime.&lt;&#x2F;p&gt;

&lt;p&gt;Please be aware that by default the Omnibus packages will stop, run migrations,
and start again, no matter how “big” or “small” the upgrade is. This behavior
can be changed by adding a &lt;a href=&quot;http:&#x2F;&#x2F;doc.gitlab.com&#x2F;omnibus&#x2F;update&#x2F;README.html&quot;&gt;&lt;code&gt;&#x2F;etc&#x2F;gitlab&#x2F;skip-auto-migrations&lt;&#x2F;code&gt;
file&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;updating&quot;&gt;Updating&lt;&#x2F;h2&gt;

&lt;p&gt;To update, check out our &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;update&#x2F;&quot;&gt;update page&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;enterprise-edition&quot;&gt;Enterprise Edition&lt;&#x2F;h2&gt;

&lt;p&gt;Interested in GitLab Enterprise Edition? Check out the &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;gitlab-ee&#x2F;&quot;&gt;features exclusive to
EE&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;Access to GitLab Enterprise Edition is granted by a &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;products&#x2F;&quot;&gt;subscription&lt;&#x2F;a&gt;.
No time to upgrade GitLab yourself? Subscribers receive upgrade and installation
services.&lt;&#x2F;p&gt;
&lt;img src=&#x27;https:&#x2F;&#x2F;about.gitlab.com&#x2F;images&#x2F;default-blog-image.png&#x27; class=&#x27;webfeedsFeaturedVisual&#x27; style=&#x27;display: none;&#x27; &#x2F;&gt;</content>
</entry>
<entry>
<title>GitLab Continuous Integration named a Leader in the Forrester Wave™</title>
<link href='https://about.gitlab.com/2017/09/27/gitlab-leader-continuous-integration-forrester-wave/' rel='alternate' />
<id>https://about.gitlab.com/2017/09/27/gitlab-leader-continuous-integration-forrester-wave/</id>
<published>2017-09-27T00:00:00+00:00</published>
<updated>2017-09-27T00:00:00+00:00</updated>
<author>
<name></name>
</author>
<content type='html'>&lt;p&gt;Today Forrester has evaluated GitLab as a Leader in Continuous Integration in The Forrester Wave™: Continuous Integration Tools, Q3 2017 report. As the report states, “GitLab delivers ease of use, scalability, integration, and innovation.” We see CI&#x2F;CD as a critical component of our offering, making it quicker and easier to deliver value through automation. The progress we’ve made in developing a CI&#x2F;CD solution that’s seamlessly integrated is thanks largely to the participation and feedback of our community and customers.&lt;&#x2F;p&gt;



&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;blogimages&#x2F;forrester-ci-wave-leader-badge.png&quot; alt=&quot;Forrester Wave Leader badge&quot; style=&quot;float: right;margin-right: 7px;margin-top: 7px;margin-left: 7px;&quot; class=&quot;shadow&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;p&gt;We’re excited about &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;direction&#x2F;#ci--cd&quot;&gt;what the future holds for GitLab CI&#x2F;CD&lt;&#x2F;a&gt;, so it’s great to know that others see its value. Furthermore Forrester states, “GitLab’s vision is to serve enterprise-scale, integrated software development teams that want to spend more time writing code and less time maintaining their tool chain.”&lt;&#x2F;p&gt;

&lt;p&gt;We’ve said it before (we say it a lot, actually): CI&#x2F;CD is the cornerstone of modern software development. Delivering what customers want, faster, requires a modernized software development lifecycle that saves time, effort, and cost. Automation is key to this more efficient release cycle, which is why we’ve spent a lot of time developing our built-in test and release automation, so developers can spend less time stringing together their tool chain, and more on innovation and integrating customer feedback. We’re gratified to have been named a leader in CI by Forrester in their report on Continuous Integration Tools for Q3, 2017, which evaluated 10 vendors across 25 different criteria.&lt;&#x2F;p&gt;

&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;blogimages&#x2F;forrester-ci-wave-graphic.png&quot; alt=&quot;Forrester Wave graphic&quot; class=&quot;shadow&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;p&gt;We had some key areas of success:&lt;&#x2F;p&gt;

&lt;h2 id=&quot;top-score-in-the-current-offering-category&quot;&gt;Top score in the Current Offering category&lt;&#x2F;h2&gt;

&lt;p&gt;GitLab received the highest score in Forrester’s Current Offering evaluation, which we believe confirms that our product is hard to beat when it comes to ease of installation, configuring builds, platform support, analytics, an intuitive UI, container support and more. This all adds up to a more seamless development process which facilitates DevOps practices and collaboration.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;highest-score-possible-in-the-strategy-category&quot;&gt;Highest score possible in the Strategy category&lt;&#x2F;h2&gt;

&lt;p&gt;Forrester assessed our product strategy, market approach, training, consulting and support, giving us a 5.0, the highest possible score, for all three criteria. This is huge validation for our CI&#x2F;CD vision, shaped with the help of our customers, community, and their contributions.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;just-the-beginning&quot;&gt;Just the beginning&lt;&#x2F;h2&gt;

&lt;p&gt;A significant part of that vision, Auto DevOps, just shipped with our &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;2017&#x2F;09&#x2F;22&#x2F;gitlab-10-0-released&#x2F;&quot;&gt;10.0 release&lt;&#x2F;a&gt;. Auto DevOps is a hands-free DevOps experience that automatically configures your build, test, code quality assurance, review apps, deployment, and monitoring in a single environment. Our out-of-the-box templates allow you to set up an end-to-end DevOps lifecycle at the push of a button.&lt;&#x2F;p&gt;

&lt;p&gt;Auto DevOps is just the first step on a journey to building a complete and highly automated DevOps tool chain. Building on strong momentum, we’re working on a number of new features to better leverage our CI&#x2F;CD tools in a more automated way for both operations as well as development teams. With the full automation we are planning, you will not only be able to deliver a new, functioning application from a developer’s machine to a production environment in minutes, but also monitor all production environments in one dashboard.&lt;&#x2F;p&gt;

&lt;h3 id=&quot;faster-time-to-value&quot;&gt;Faster time to value&lt;&#x2F;h3&gt;

&lt;p&gt;Reducing the time teams spend on manual tasks means you can focus on what matters: building great products that your users want. GitLab CI&#x2F;CD facilitates a more iterative approach to software development, by automatically testing new code, helping you to catch potential problems earlier in the release cycle, taking the anxiety out of deployments and reducing the cost of fixing bugs. This puts you in a position to release more often, shortening the feedback loop and helping you to release features and improvements that your customers are asking for.&lt;&#x2F;p&gt;

&lt;h3 id=&quot;collaboration-without-dependency&quot;&gt;Collaboration without dependency&lt;&#x2F;h3&gt;

&lt;p&gt;The fact that GitLab CI&#x2F;CD is fully integrated makes all the difference. Less context-switching means key information doesn’t slip through the cracks like it can when teams work in different tools, with no single source of truth. Working in an integrated tool fosters collaboration by improving visibility, keeping everyone on the same page and making it easy for different teams to participate and comment. Features like review apps – which automatically spin up a dynamic environment for merge requests, so you can preview changes right away – make it even easier to share improvements with stakeholders and gather feedback.&lt;&#x2F;p&gt;

&lt;p&gt;Being named a Leader in this Wave evaluation, and receiving the Top Score in Current Offering, as well as the highest score possible for Strategy, is validation for us of the strength of today’s GitLab CI offering as well as our vision for the future.&lt;&#x2F;p&gt;

&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;reprints.forrester.com&#x2F;#&#x2F;assets&#x2F;2&#x2F;921&#x2F;RES137261&#x2F;reports&quot;&gt;View the full report&lt;&#x2F;a&gt; to learn more about GitLab Continuous Integration.&lt;&#x2F;p&gt;
&lt;img src=&#x27;https:&#x2F;&#x2F;about.gitlab.com&#x2F;images&#x2F;blogimages&#x2F;gitlab-ci-wave-cover.png&#x27; class=&#x27;webfeedsFeaturedVisual&#x27; style=&#x27;display: none;&#x27; &#x2F;&gt;</content>
</entry>
<entry>
<title>GitLab Patch Release: 10.0.1</title>
<link href='https://about.gitlab.com/2017/09/24/gitlab-10-dot-0-dot-1-released/' rel='alternate' />
<id>https://about.gitlab.com/2017/09/24/gitlab-10-dot-0-dot-1-released/</id>
<published>2017-09-24T00:00:00+00:00</published>
<updated>2017-09-24T00:00:00+00:00</updated>
<author>
<name>Stan Hu</name>
</author>
<content type='html'>&lt;p&gt;Today we are releasing version 10.0.1 for GitLab Community Edition (CE) and Enterprise Edition (EE).&lt;&#x2F;p&gt;

&lt;p&gt;This version resolves a migration issue in &lt;a href=&quot;&#x2F;2017&#x2F;09&#x2F;22&#x2F;gitlab-10-0-released&#x2F;&quot;&gt;this month&#x27;s 10.0.0
release&lt;&#x2F;a&gt; that &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;issues&#x2F;38246#note_41171108&quot;&gt;affected instances with
inactive LDAP accounts&lt;&#x2F;a&gt;.
Other than that, this update contains no changes to functionality from 10.0.0.&lt;&#x2F;p&gt;



&lt;p&gt;It includes the following fix:&lt;&#x2F;p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Fix duplicate key errors in PostDeployMigrateUserExternalMailData migration. (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14460&quot;&gt;!14460&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;p&gt;Thanks to Ian Yang for suggesting a solution.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;upgrade-barometer&quot;&gt;Upgrade barometer&lt;&#x2F;h2&gt;

&lt;p&gt;This version includes a revision to a single migration, but does not require
any downtime. If you have already successfully upgraded to 10.0.0, this
upgrade will not affect you.&lt;&#x2F;p&gt;

&lt;p&gt;Please be aware that by default the Omnibus packages will stop, run migrations,
and start again, no matter how “big” or “small” the upgrade is. This behavior
can be changed by adding a &lt;a href=&quot;http:&#x2F;&#x2F;doc.gitlab.com&#x2F;omnibus&#x2F;update&#x2F;README.html&quot;&gt;&lt;code&gt;&#x2F;etc&#x2F;gitlab&#x2F;skip-auto-migrations&lt;&#x2F;code&gt;
file&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;updating&quot;&gt;Updating&lt;&#x2F;h2&gt;

&lt;p&gt;To update, check out our &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;update&#x2F;&quot;&gt;update page&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;enterprise-edition&quot;&gt;Enterprise Edition&lt;&#x2F;h2&gt;

&lt;p&gt;Interested in GitLab Enterprise Edition? Check out the &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;gitlab-ee&#x2F;&quot;&gt;features exclusive to
EE&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;Access to GitLab Enterprise Edition is granted by a &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;products&#x2F;&quot;&gt;subscription&lt;&#x2F;a&gt;.
No time to upgrade GitLab yourself? Subscribers receive upgrade and installation
services.&lt;&#x2F;p&gt;
&lt;img src=&#x27;https:&#x2F;&#x2F;about.gitlab.com&#x2F;images&#x2F;default-blog-image.png&#x27; class=&#x27;webfeedsFeaturedVisual&#x27; style=&#x27;display: none;&#x27; &#x2F;&gt;</content>
</entry>
<entry>
<title>GitLab 10.0 Released with Auto DevOps and Group Issue Boards</title>
<link href='https://about.gitlab.com/2017/09/22/gitlab-10-0-released/' rel='alternate' />
<id>https://about.gitlab.com/2017/09/22/gitlab-10-0-released/</id>
<published>2017-09-22T00:00:00+00:00</published>
<updated>2017-09-22T00:00:00+00:00</updated>
<author>
<name>Mike Bartlett</name>
</author>
<content type='html'>
&lt;p&gt;From the formulation of an idea to executing and monitoring it in production, DevOps establishes
a culture and environment where developing, testing, and releasing software can happen quickly, frequently,
and more reliably.&lt;&#x2F;p&gt;

&lt;p&gt;GitLab 10.0 delivers a hands-free
DevOps environment with the introduction of &lt;a href=&quot;#auto-devops&quot;&gt;Auto DevOps&lt;&#x2F;a&gt;, allowing your team to easily configure and adopt
modern development practices in your workflow. Not only that, there&#x27;s &lt;a href=&quot;#new-user-experience&quot;&gt;new navigation&lt;&#x2F;a&gt; and a new way of &lt;a href=&quot;#group-issue-boards&quot;&gt;collaborating across groups&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;



&lt;p&gt;With every monthly release of GitLab, we introduce new capabilities and improve our existing features. GitLab 10.0 is no exception and includes numerous new additions, such as the ability to &lt;a href=&quot;#automatically-resolve-outdated-mr-discussions&quot;&gt;automatically resolve outdated merge request discussions&lt;&#x2F;a&gt;, improvements to &lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;group&#x2F;subgroups&#x2F;index.html&quot;&gt;subgroups&lt;&#x2F;a&gt;, and an &lt;a href=&quot;#api-support-for-wikis&quot;&gt;API for Wiki&lt;&#x2F;a&gt; thanks to a contribution from our open source community.&lt;&#x2F;p&gt;

&lt;p&gt;GitLab&#x27;s powerful issue management capabilities keep getting better with every release. Filtering and searching issues across groups has been &lt;a href=&quot;#group-merge-requests-search-and-filter-bar&quot;&gt;vastly improved&lt;&#x2F;a&gt;, our updated UX makes moving issues &lt;a href=&quot;#move-issues-from-the-sidebar&quot;&gt;easier to discover&lt;&#x2F;a&gt; and can be automated &lt;a href=&quot;#move-issue-quick-action&quot;&gt;through quick action commands&lt;&#x2F;a&gt;. GitLab Enterprise Edition Premium customers using JIRA can now &lt;a href=&quot;#access-gitlab-commits-and-branches-in-jira-development-panel&quot;&gt;see commits and branches&lt;&#x2F;a&gt; in JIRA&#x27;s development panel.&lt;&#x2F;p&gt;

&lt;p&gt;Security and performance continues to improve. Administrators can now &lt;a href=&quot;#ssh-key-length-restrictions&quot;&gt;restrict SSH&lt;&#x2F;a&gt; access through technology and key length. LDAP Group Sync can &lt;a href=&quot;#ldap-group-sync-api&quot;&gt;be automated&lt;&#x2F;a&gt; through our API and can now lock down &lt;a href=&quot;#ldap-group-sync-improvements-for-external-users&quot;&gt;External Users&lt;&#x2F;a&gt; at point of login as well. &lt;a href=&quot;#performance-improvements&quot;&gt;Performance&lt;&#x2F;a&gt; continues to get faster, improving page loading speeds, the speed of creating projects and performing commits, and reduced memory usage.&lt;&#x2F;p&gt;

&lt;style&gt;
  .blog.article .author,
  .blog.article .author a,
  .blog.article .date,
  .blog.article .date a,
  .blog.article .author-twitter i,
  .blog.article .author-gitlab i {
    color: white;
    text-shadow: 2px 2px 5px rgba(0,0,0,.7);
  }
&lt;&#x2F;style&gt;

&lt;img src=&#x27;https:&#x2F;&#x2F;about.gitlab.com&#x2F;images&#x2F;10_0&#x2F;10_0_cover_image.jpg&#x27; class=&#x27;webfeedsFeaturedVisual&#x27; style=&#x27;display: none;&#x27; &#x2F;&gt;
&lt;!-- CTA --&gt;
&lt;p class=&#x27;cta text-center&#x27;&gt;
&lt;a href=&quot;&#x2F;events&#x2F;&quot; class=&quot;btn btn-lg btn-red webcast-button&quot; target=&quot;_blank&quot;&gt;Join us for an upcoming event&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;!-- MVP --&gt;
&lt;section class=&#x27;mvp gray-section&#x27; id=&#x27;mvp&#x27;&gt;
&lt;div class=&#x27;release-post-section&#x27;&gt;
&lt;img alt=&#x27;GitLab MVP badge&#x27; src=&#x27;&#x2F;images&#x2F;mvp_badge.png&#x27; &#x2F;&gt;
&lt;h2 id=&#x27;mvp&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#mvp&#x27;&gt;&lt;&#x2F;a&gt;
This month&#x27;s Most Valuable Person (
&lt;a href=&#x27;&#x2F;mvp&#x2F;&#x27;&gt;MVP&lt;&#x2F;a&gt;
) is
&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;hiroponz&quot;&gt;Hiroyuki Sato&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Once again, we’ve had an incredible number of &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests?scope=all&amp;amp;utf8=%E2%9C%93&amp;amp;state=all&amp;amp;milestone_title=10.0&amp;amp;label_name[]=Community%20Contribution&quot;&gt;contributions&lt;&#x2F;a&gt;
from the community, illustrating the power of open source software and its benefit to GitLab and
all of our users and customers.&lt;&#x2F;p&gt;

&lt;p&gt;Hiroyuki has provided &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests?scope=all&amp;amp;utf8=%E2%9C%93&amp;amp;state=all&amp;amp;author_username=hiroponz&amp;amp;milestone_title=10.0&quot;&gt;numerous contributions&lt;&#x2F;a&gt;
in GitLab 10.0, including performance improvements, enhancing searching and filtering issues and merge requests,
as well as one of our favorite features of being able to &lt;a href=&quot;#filter-by-reactions&quot;&gt;filter issues&lt;&#x2F;a&gt; by your own reactions so
you can see what you’ve liked (or not!).&lt;&#x2F;p&gt;

&lt;p&gt;Thank you to everyone for your contributions, and a special thank you to Hiroyuki for such
amazing work.&lt;&#x2F;p&gt;

&lt;&#x2F;div&gt;
&lt;&#x2F;section&gt;
&lt;!-- top feature --&gt;
&lt;section class=&#x27;release-post-section&#x27; id=&#x27;top-feature&#x27;&gt;
&lt;h2 id=&#x27;auto-devops&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#auto-devops&#x27;&gt;&lt;&#x2F;a&gt;
Auto DevOps
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Auto DevOps brings DevOps best practices to your project by automatically
configuring your build, test, code quality assurance, review apps, deployment,
and monitoring in a single environment. In GitLab 10.0, we
have introduced out-of-the-box templates to quickly set up an end-to-end DevOps
lifecycle, built on top of &lt;a href=&quot;&#x2F;features&#x2F;gitlab-ci-cd&#x2F;&quot;&gt;GitLab CI&#x2F;CD&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;As it stands, GitLab offers a single environment where a code change can not only initiate a build,
but deploy a &lt;a href=&quot;&#x2F;features&#x2F;review-apps&#x2F;&quot;&gt;Review App&lt;&#x2F;a&gt; to preview your changes from
within each merge request. During the review process GitLab’s recently introduced ability to measure
&lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;merge_requests&#x2F;code_quality_diff.html#code-quality&quot;&gt;Code Quality&lt;&#x2F;a&gt;
ensures changes improve the overall quality of your software.&lt;&#x2F;p&gt;

&lt;p&gt;After code review, GitLab’s deployment capabilities easily allow you to deploy to
canary or production environments, as well as using &lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;ci&#x2F;autodeploy&#x2F;quick_start_guide.html#auto-deploy-quick-start-guide&quot;&gt;GitLab Auto Deploy&lt;&#x2F;a&gt;
to deploy straight to Google Cloud. Post-deployment metrics with
&lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;ci&#x2F;autodeploy&#x2F;index.html#auto-monitoring&quot;&gt;GitLab Auto Monitoring&lt;&#x2F;a&gt;
provide response and system metrics to make sure newly deployed code is performant.&lt;&#x2F;p&gt;

&lt;p&gt;Now, GitLab 10.0 brings this entire lifecycle together in an automated way, allowing
you to go from idea to production in the blink of an eye with GitLab Auto Devops.&lt;&#x2F;p&gt;

&lt;figure class=&quot;video_container&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;AgKc_KUQEtE&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt; &lt;&#x2F;iframe&gt;
&lt;&#x2F;figure&gt;

&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;topics&#x2F;autodevops&#x2F;#overview&quot;&gt;Auto DevOps&lt;&#x2F;a&gt;
automatically detects, builds, tests, deploys, and monitors applications.
Leveraging &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;gliderlabs&#x2F;herokuish&quot;&gt;Herokuish&lt;&#x2F;a&gt;, it supports
all languages and frameworks available through Heroku buildpacks, such as Ruby, Rails,
Node, PHP, Python, and Java, as well as the ability to customize your own buildpacks.
Read the &lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;topics&#x2F;autodevops&#x2F;quick_start_guide.html&quot;&gt;quick start guide&lt;&#x2F;a&gt;
to begin right now.&lt;&#x2F;p&gt;

&lt;p class=&quot;alert alert-info text-center&quot;&gt;&lt;em&gt;Auto DevOps is currently in Beta and is not recommended for production use just yet.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;

&lt;p class=&quot;note&quot;&gt;&lt;strong&gt;Note:&lt;&#x2F;strong&gt; GitLab is not affiliated with Heroku or Glider Labs.&lt;&#x2F;p&gt;

&lt;div class=&#x27;column&#x27;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;topics&#x2F;autodevops&#x2F;&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on
Auto DevOps
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;&#x2F;section&gt;
&lt;!-- primary features --&gt;
&lt;section id=&#x27;primary-features&#x27;&gt;
&lt;hr &#x2F;&gt;
&lt;div class=&#x27;release-row&#x27;&gt;
&lt;div class=&#x27;column&#x27;&gt;
&lt;h2 id=&#x27;group-issue-boards&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#group-issue-boards&#x27;&gt;&lt;&#x2F;a&gt;
Group Issue Boards
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Many teams work as a GitLab group, with work spanning many projects in that group.
For example, many organizations are moving toward or have already adopted a microservices
architecture where each microservice is one code repository (housed in one GitLab project).
This means a team may naturally be working across multiple projects, making it extremely helpful
to manage issues across all those projects together.&lt;&#x2F;p&gt;

&lt;p&gt;With this release we are proud to ship our
&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;issues&#x2F;928&quot;&gt;most requested feature&lt;&#x2F;a&gt;,
GitLab’s &lt;strong&gt;Group-level Issue Boards&lt;&#x2F;strong&gt;!&lt;&#x2F;p&gt;

&lt;p&gt;Now you can manage all issues across all projects within a group single and concentrated
view. Lists, labels, and milestones are all managed at the group level, allowing you to
focus on the group.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;issue_board.html#group-level-issue-boards&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on
Group Issue Boards
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&#x27;column&#x27;&gt;
&lt;img alt=&#x27;Group Issue Boards&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_0&#x2F;group_issue_board.png&#x27; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;hr &#x2F;&gt;
&lt;div class=&#x27;release-row image-left&#x27;&gt;
&lt;div class=&#x27;column text-column&#x27;&gt;
&lt;h2 id=&#x27;new-user-experience&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#new-user-experience&#x27;&gt;&lt;&#x2F;a&gt;
New User Experience
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;In GitLab 10.0 we are excited to unveil our new user experience, making it
much easier to navigate GitLab!&lt;&#x2F;p&gt;

&lt;p&gt;For the last few months, we have been &lt;a href=&quot;&#x2F;2017&#x2F;07&#x2F;17&#x2F;redesigning-gitlabs-navigation&#x2F;&quot;&gt;testing out&lt;&#x2F;a&gt;
a new way to navigate through GitLab. Based on feedback and user testing, we found
that people had a few problems with the existing navigation. Understanding
exactly which group or project you were currently viewing was often not
obvious, switching between different areas of GitLab was cumbersome and
there were a lot of inconsistencies with spacing and hierarchy that caused
confusion.&lt;&#x2F;p&gt;

&lt;p&gt;GitLab 10.0 introduces a more consistent navigation experience. The colored
top bar represents all global and personal aspects of GitLab – your groups,
projects, issues, merge requests, todos and personal information. The new left
navigation is contextual to the group or project you are viewing and also allows
quicker navigation between areas of the project, with pull-out menus saving you
clicks and page loads.&lt;&#x2F;p&gt;

&lt;p&gt;As an additional bonus, we’ve also brought back the ability to personalize your
experience, allowing you to change the color theme of GitLab because, well, not
everyone loves purple like we do!&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;&#x2F;2017&#x2F;09&#x2F;13&#x2F;unveiling-gitlabs-new-navigation&#x2F;&#x27; target=&#x27;_blank&#x27;&gt;
Read more about our new navigation
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&#x27;column image-column&#x27;&gt;
&lt;img alt=&#x27;New User Experience&#x27; src=&#x27;&#x2F;images&#x2F;10_0&#x2F;navigation_wireframe.png&#x27; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;hr &#x2F;&gt;
&lt;div class=&#x27;release-row&#x27;&gt;
&lt;div class=&#x27;column&#x27;&gt;
&lt;h2 id=&#x27;protected-gitlab-runners&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#protected-gitlab-runners&#x27;&gt;&lt;&#x2F;a&gt;
Protected GitLab Runners
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;When running sensitive jobs in CI&#x2F;CD pipelines, for example deployments
to production environments, you want to be sure that nobody can access credential
information or private configuration options.
In order to avoid any data leakage, you can set the protected flag for a
specific GitLab Runner, so only jobs running on
&lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;protected_branches.html&quot;&gt;protected branches&lt;&#x2F;a&gt;
are picked up.&lt;&#x2F;p&gt;

&lt;p&gt;Combining this feature with &lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;merge_requests&#x2F;merge_request_approvals.html&quot;&gt;mandatory approval&lt;&#x2F;a&gt;
and &lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;ci&#x2F;runners&#x2F;README.html#using-tags&quot;&gt;Runner selection by tags&lt;&#x2F;a&gt;,
you can guarantee that &lt;strong&gt;only trusted code&lt;&#x2F;strong&gt; is executed on the Protected Runner.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;ci&#x2F;runners&#x2F;README.html#protected-runners&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on
Protected GitLab Runners
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&#x27;column&#x27;&gt;
&lt;img alt=&#x27;Protected GitLab Runners&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_0&#x2F;protected_runners.png&#x27; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;hr &#x2F;&gt;
&lt;div class=&#x27;release-row image-left&#x27;&gt;
&lt;div class=&#x27;column text-column&#x27;&gt;
&lt;h2 id=&#x27;object-storage-for-git-lfs&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#object-storage-for-git-lfs&#x27;&gt;&lt;&#x2F;a&gt;
Object Storage for Git LFS
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;workflow&#x2F;lfs&#x2F;manage_large_binaries_with_git_lfs.html#git-lfs&quot;&gt;Git LFS&lt;&#x2F;a&gt;
provides a great way to efficiently store large files in Git.&lt;&#x2F;p&gt;

&lt;p&gt;Large files have a habit of using a lot of disk space and managing very large
storage clusters can become painful as usage grows.&lt;&#x2F;p&gt;

&lt;p&gt;GitLab Enterprise Edition Premium now offers the ability to store LFS files in
an object storage system such as the open source &lt;a href=&quot;https:&#x2F;&#x2F;minio.io&quot;&gt;Minio&lt;&#x2F;a&gt; or &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;issues&#x2F;2841&quot;&gt;Amazon’s S3&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;workflow&#x2F;lfs&#x2F;lfs_administration.html#setting-up-s3-compatible-object-storage&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on
Object Storage for Git LFS
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&#x27;column image-column&#x27;&gt;
&lt;img alt=&#x27;Object Storage for Git LFS&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_0&#x2F;git_lfs.png&#x27; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;hr &#x2F;&gt;
&lt;div class=&#x27;release-row&#x27;&gt;
&lt;div class=&#x27;column&#x27;&gt;
&lt;h2 id=&#x27;ssh-key-length-restrictions&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#ssh-key-length-restrictions&#x27;&gt;&lt;&#x2F;a&gt;
SSH Key Length Restrictions
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;With thanks to our community contributor &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;electrickite&quot;&gt;Corey Hinshaw&lt;&#x2F;a&gt;
GitLab 10.0 now allows administrators to add restrictions on SSH keys.&lt;&#x2F;p&gt;

&lt;p&gt;This functionality allows administrators to restrict not only the type of
SSH keys that may be used, but also the minimal key length, giving you a more
secure way to manage your GitLab SSH access environment.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;security&#x2F;ssh_keys_restrictions.html&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on SSH Restrictions
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&#x27;column&#x27;&gt;
&lt;img alt=&#x27;SSH Key Length Restrictions&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_0&#x2F;ssh_keys_restrictions_settings.png&#x27; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;section&gt;
&lt;!-- secondary features --&gt;
&lt;section id=&#x27;secodary-features&#x27;&gt;
&lt;div class=&#x27;release-post-section text-center zero-bottom-margin&#x27;&gt;
&lt;h2 id=&#x27;other-improvements-in-gitlab&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#other-improvements-in-gitlab&#x27;&gt;&lt;&#x2F;a&gt;
Other Improvements in GitLab 10.0
&lt;&#x2F;h2&gt;
&lt;&#x2F;div&gt;
&lt;div class=&#x27;release-row align-top divider&#x27;&gt;
&lt;div class=&#x27;column&#x27;&gt;
&lt;h3 id=&#x27;api-support-for-wikis&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#api-support-for-wikis&#x27;&gt;&lt;&#x2F;a&gt;
API Support for Wikis
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;You can now use the GitLab API to work with wiki pages! With the additions
to the API, it is possible to get a list of all wiki pages, get a particular page,
create a new wiki page, as well as edit and delete pages, providing a great way
to programmatically access GitLab’s wiki functionality.&lt;&#x2F;p&gt;

&lt;p&gt;Many thanks to our community contributor, &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;blackst0ne&quot;&gt;Vitaliy Klachkov&lt;&#x2F;a&gt; for adding this functionality.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;api&#x2F;wikis.html&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on Wikis API
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;gitlab-runner-10.0&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#gitlab-runner-10.0&#x27;&gt;&lt;&#x2F;a&gt;
GitLab Runner 10.0
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;We’re also releasing &lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;runner&#x2F;&quot;&gt;GitLab Runner&lt;&#x2F;a&gt; 10.0 today!
GitLab Runner is the open source project that is used to run your CI&#x2F;CD jobs
and send the results back to GitLab.&lt;&#x2F;p&gt;

&lt;h4 id=&quot;most-interesting-changes&quot;&gt;Most interesting changes:&lt;&#x2F;h4&gt;

&lt;ul&gt;
  &lt;li&gt;Register command &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-runner&#x2F;merge_requests&#x2F;657&quot;&gt;locks Runner to a project by default&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
  &lt;li&gt;Add &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-runner&#x2F;merge_requests&#x2F;664&quot;&gt;handling of non-existing images for Docker &amp;gt;= 17.07&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-runner&#x2F;merge_requests&#x2F;655&quot;&gt;Fix variable file permission issue&lt;&#x2F;a&gt; with Kubernetes executor&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;p&gt;List of all changes can be found in GitLab Runner’s &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-runner&#x2F;blob&#x2F;v10.0.0&#x2F;CHANGELOG.md&quot;&gt;CHANGELOG&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;runner&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on GitLab Runner
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;gitlab-runner-locked-to-project-by-default&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#gitlab-runner-locked-to-project-by-default&#x27;&gt;&lt;&#x2F;a&gt;
GitLab Runner Locked to Project by Default
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;During the &lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;runner&#x2F;register&#x2F;&quot;&gt;initial registration&lt;&#x2F;a&gt; of a new GitLab Runner,
you are asked if you want to &lt;strong&gt;lock it to the project&lt;&#x2F;strong&gt; for which you are providing the token.
Before GitLab 10.0, the default choice was &lt;code&gt;false&lt;&#x2F;code&gt;, but it was not clear that this allows any Master
of the project to enable the Runner also for other projects, and this might be a security risk.
With GitLab 10.0, the default choice is now &lt;code&gt;true&lt;&#x2F;code&gt;, so the Runner cannot be easily assigned to other projects.&lt;&#x2F;p&gt;

&lt;p&gt;This behavior can be changed later in the Runner settings, if there is the need. It can be also set
during registration manually (for interactive mode) or with the &lt;code&gt;--locked=false&lt;&#x2F;code&gt; option (for
non-interactive mode).&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;runner&#x2F;register&#x2F;&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on the Runner registration process
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;simplified-project-permissions&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#simplified-project-permissions&#x27;&gt;&lt;&#x2F;a&gt;
Simplified Project Permissions
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;One of GitLab’s many distinguishing features is the granularity of permissions
and access to project capabilities.&lt;&#x2F;p&gt;

&lt;p&gt;In GitLab 10.0 we have simplified the user interface, allowing you to maintain
precise control of your project visibility, features and permissions, but doing so
in an easy-to-use and beautiful interface.&lt;&#x2F;p&gt;

&lt;img alt=&#x27;Simplified Project Permissions&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_0&#x2F;simplified_project_permissions.png&#x27; &#x2F;&gt;
&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;settings&#x2F;#sharing-and-permissions&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on
Simplified Project Permissions
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;improved-subgroup-permissions&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#improved-subgroup-permissions&#x27;&gt;&lt;&#x2F;a&gt;
Improved Subgroup Permissions
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;In &lt;a href=&quot;&#x2F;2017&#x2F;03&#x2F;22&#x2F;gitlab-9-0-released&#x2F;#subgroups-ce-ees-eep&quot;&gt;GitLab 9.0&lt;&#x2F;a&gt;
we released subgroups, giving you more flexibility in how you organize
projects and groups inside of GitLab. If you haven’t tried them out before,
you can find out more about subgroups in our &lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;group&#x2F;subgroups&#x2F;&quot;&gt;documentation&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;We’ve now added the ability to allow owners to create subgroups if group creation
has been restricted, making it easier for delegated users to manage the group
structure of GitLab.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;group&#x2F;subgroups&#x2F;&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on Subgroups
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;access-gitlab-commits-and-branches-in-jira-development-panel&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#access-gitlab-commits-and-branches-in-jira-development-panel&#x27;&gt;&lt;&#x2F;a&gt;
Access GitLab Commits and Branches in JIRA Development Panel
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Many GitLab users are also JIRA users. With this release, we are significantly
improving our JIRA integration by introducing linked commits and branches in a JIRA
issue’s &lt;a href=&quot;https:&#x2F;&#x2F;confluence.atlassian.com&#x2F;jirasoftwarecloud&#x2F;viewing-the-development-information-for-an-issue-777002795.html&quot;&gt;development panel&lt;&#x2F;a&gt;.
As you are interacting with a JIRA issue, you can now quickly click through to associated
GitLab commits or branches, further tightening the GitLab-JIRA integration.&lt;&#x2F;p&gt;

&lt;img alt=&#x27;Access GitLab Commits and Branches in JIRA Development Panel&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_0&#x2F;jira_dev_panel.png&#x27; &#x2F;&gt;
&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;integration&#x2F;jira_development_panel.html&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on JIRA Development Panel integration
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;time-tracking-for-issues-csv-export&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#time-tracking-for-issues-csv-export&#x27;&gt;&lt;&#x2F;a&gt;
Time Tracking for Issues CSV Export
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;We have now included time tracking information (time estimate and time spent) in the
existing issues CSV export functionality. This allows roles such as team leads or
managers to manage time tracking information easily in issues using spreadsheets.&lt;&#x2F;p&gt;

&lt;p&gt;Thank you &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;g3dinua&quot;&gt;Bohdan V.&lt;&#x2F;a&gt; for the contribution.&lt;&#x2F;p&gt;

&lt;img alt=&#x27;Time Tracking for Issues CSV Export&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_0&#x2F;csv_export.png&#x27; &#x2F;&gt;
&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;issues&#x2F;csv_export.html&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on CSV Export
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;filter-by-reactions&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#filter-by-reactions&#x27;&gt;&lt;&#x2F;a&gt;
Filter by Reactions
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Throughout GitLab, when you are filtering issues and merge requests, you
can now filter by reactions you have added. You can use this as a generalized
bookmarking feature. Just react to issues and merge requests by awarding
different emoji, and now you access those objects quickly by filtering on them.&lt;&#x2F;p&gt;

&lt;p&gt;Thank you &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;hiroponz&quot;&gt;Hiroyuki Sato&lt;&#x2F;a&gt; for the contribution.&lt;&#x2F;p&gt;

&lt;img alt=&#x27;Filter by Reactions&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_0&#x2F;filter_my_reaction.png&#x27; &#x2F;&gt;
&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;search&#x2F;#issues-and-merge-requests-per-project&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on searching and filtering through GitLab
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;move-issue-quick-action&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#move-issue-quick-action&#x27;&gt;&lt;&#x2F;a&gt;
Move Issue Quick Action
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;There is now a move issue quick action to speed up your workflows even more.
So you can now type comments, and perform yet another action (moving an issue),
all within the comment box itself.&lt;&#x2F;p&gt;

&lt;p&gt;Thank you &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;frite&quot;&gt;Manolis&lt;&#x2F;a&gt; for the contribution.&lt;&#x2F;p&gt;

&lt;img alt=&#x27;Move Issue Quick Action&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_0&#x2F;move_quick_action.png&#x27; &#x2F;&gt;
&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;quick_actions.html&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on Quick Actions
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;redesigned-system-notes-icons&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#redesigned-system-notes-icons&#x27;&gt;&lt;&#x2F;a&gt;
Redesigned System Notes Icons
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;As part of our continuing effort to &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;issues&#x2F;32894&quot;&gt;define and distinguish our unique
GitLab personality&lt;&#x2F;a&gt;,
we now have a redesigned set of system note icons.&lt;&#x2F;p&gt;

&lt;img alt=&#x27;Redesigned System Notes Icons&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_0&#x2F;system_note_icons.png&#x27; &#x2F;&gt;
&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;development&#x2F;ux_guide&#x2F;basics.html#icons&#x27; target=&#x27;_blank&#x27;&gt;
Check out our new beautiful icons set!
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;improved-monitoring-dashboard&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#improved-monitoring-dashboard&#x27;&gt;&lt;&#x2F;a&gt;
Improved Monitoring Dashboard
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;The environment monitoring dashboard has been significantly improved, with an improved look and feel as well as support for multiple series in a single chart.
This provides a deeper-level insight into performance as well as easy comparisons. For example, an application’s throughput can now be broken out by HTTP response type,
providing a single chart for both successful and failed request rates, as well as potential missing pages.&lt;&#x2F;p&gt;

&lt;img alt=&#x27;Improved Monitoring Dashboard&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_0&#x2F;prometheus_dashboard.png&#x27; &#x2F;&gt;
&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;ci&#x2F;environments.html#monitoring-environments&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on monitoring environments with Prometheus
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;ldap-group-sync-api&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#ldap-group-sync-api&#x27;&gt;&lt;&#x2F;a&gt;
LDAP Group Sync API
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;GitLab’s LDAP Group Sync is now available via API, allowing you to programmatically
request a sync event. This means that any group automation such as creation of groups
performed via the API can immediately be programmatically synchronized to LDAP with one
simple API call.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;api&#x2F;groups.html#sync-group-with-ldap&#x27; target=&#x27;_blank&#x27;&gt;
GitLab Enterprise Edition Group API
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;ldap-config-&quot;verify_certificates&quot;-defaults-to-secure&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#ldap-config-&quot;verify_certificates&quot;-defaults-to-secure&#x27;&gt;&lt;&#x2F;a&gt;
LDAP Config &quot;verify_certificates&quot; Defaults to Secure
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;The LDAP config option &lt;code&gt;verify_certificates&lt;&#x2F;code&gt; now defaults to true for security.
This option was added in 9.4.2 but defaulted to false for backwards-compatibility.&lt;&#x2F;p&gt;

&lt;p&gt;Installations that are using &lt;code&gt;start_tls&lt;&#x2F;code&gt; or &lt;code&gt;simple_tls&lt;&#x2F;code&gt; for the encryption
parameter and that unknowingly do not have SSL configured properly between the
LDAP server and the GitLab server, may break if the LDAP server’s SSL
certificate cannot be verified by the GitLab server.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;administration&#x2F;auth&#x2F;ldap.html&#x27; target=&#x27;_blank&#x27;&gt;
Read through the admin documentation on LDAP
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;streamlined-omnibus-gitlab-installation&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#streamlined-omnibus-gitlab-installation&#x27;&gt;&lt;&#x2F;a&gt;
Streamlined Omnibus GitLab Installation
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Installation of GitLab is now easier and faster than ever! GitLab 10 adds support for specifying the GitLab URL
directly when installing the package. When specified, GitLab will automatically be reconfigured with the
URL and started, removing two steps from the installation process.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;omnibus&#x2F;&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on Omnibus GitLab
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;omnibus-improvements&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#omnibus-improvements&#x27;&gt;&lt;&#x2F;a&gt;
Omnibus Improvements
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;ul&gt;
  &lt;li&gt;Ruby has been updated to &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;omnibus-gitlab&#x2F;merge_requests&#x2F;1930&quot;&gt;2.3.5&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
  &lt;li&gt;libyaml has been &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;omnibus-gitlab&#x2F;merge_requests&#x2F;1930&quot;&gt;updated to 0.1.7&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;omnibus&#x2F;&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on Omnibus GitLab
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;gitlab-mattermost-4.2&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#gitlab-mattermost-4.2&#x27;&gt;&lt;&#x2F;a&gt;
GitLab Mattermost 4.2
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;GitLab 10.0 includes &lt;a href=&quot;https:&#x2F;&#x2F;about.mattermost.com&#x2F;blog&#x2F;mattermost-4-2&#x2F;&quot;&gt;Mattermost 4.2&lt;&#x2F;a&gt;, an
&lt;a href=&quot;https:&#x2F;&#x2F;about.mattermost.com&#x2F;&quot;&gt;open source Slack-alternative&lt;&#x2F;a&gt; whose newest release includes interactive
message buttons to simplify complex workflows, plus much more.&lt;&#x2F;p&gt;

&lt;p&gt;This version includes &lt;a href=&quot;http:&#x2F;&#x2F;about.mattermost.com&#x2F;security-updates&#x2F;&quot;&gt;security updates&lt;&#x2F;a&gt; and an upgrade is recommended.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;omnibus&#x2F;gitlab-mattermost&#x2F;&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on GitLab Mattermost
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&#x27;column&#x27;&gt;
&lt;h3 id=&#x27;weekly-view-for-cycle-analytics&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#weekly-view-for-cycle-analytics&#x27;&gt;&lt;&#x2F;a&gt;
Weekly View for Cycle Analytics
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Cycle Analytics measures the time it takes to go from an idea to production
for each project you have. This is achieved not only by indicating the
total time it takes to reach that point, but the total time is broken down
into the multiple stages an idea has to pass through to be shipped.&lt;&#x2F;p&gt;

&lt;p&gt;With thanks to our community contributor, &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;mehlah&quot;&gt;Mehdi Lahmam&lt;&#x2F;a&gt;
it is now possible to view your cycle over a seven-day period which is great
for teams with very short release cycles.&lt;&#x2F;p&gt;

&lt;img alt=&#x27;Weekly View for Cycle Analytics&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_0&#x2F;7_day_cycle_analytics.png&#x27; &#x2F;&gt;
&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;cycle_analytics.html&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on Cycle Analytics
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;new-gitlab-runner-repository&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#new-gitlab-runner-repository&#x27;&gt;&lt;&#x2F;a&gt;
New GitLab Runner Repository
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;At 12th September 2017 we’ve moved GitLab Runner to a new repository path.
From now on Runner is available at &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-runner&quot;&gt;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-runner&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;

&lt;p&gt;Please update your bookmarks!&lt;&#x2F;p&gt;

&lt;h3 id=&#x27;new-predefined-variables-for-user-identity&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#new-predefined-variables-for-user-identity&#x27;&gt;&lt;&#x2F;a&gt;
New Predefined Variables for User Identity
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;When running pipelines, we have a lot of &lt;strong&gt;environment variables&lt;&#x2F;strong&gt; that are automatically set by GitLab,
giving your scripts the ability to access important information. Starting with GitLab 10.0, two new
variables, &lt;code&gt;GITLAB_USER_NAME&lt;&#x2F;code&gt; and &lt;code&gt;GITLAB_USER_LOGIN&lt;&#x2F;code&gt;, are now available to access the &lt;strong&gt;full name&lt;&#x2F;strong&gt; and
the &lt;strong&gt;login username&lt;&#x2F;strong&gt; associated to the account that is running the job.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;ci&#x2F;variables&#x2F;#predefined-variables-environment-variables&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on Predefined Variables for CI
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;variables-for-pipeline-schedules-api&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#variables-for-pipeline-schedules-api&#x27;&gt;&lt;&#x2F;a&gt;
Variables for Pipeline Schedules API
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;In GitLab 9.2 we introduced &lt;a href=&quot;&#x2F;2017&#x2F;05&#x2F;22&#x2F;gitlab-9-2-released&#x2F;#pipeline-schedules&quot;&gt;Pipeline Schedules&lt;&#x2F;a&gt;,
and in the following release we added
&lt;a href=&quot;&#x2F;2017&#x2F;06&#x2F;22&#x2F;gitlab-9-3-released&#x2F;#api-support-for-pipeline-schedules&quot;&gt;API&lt;&#x2F;a&gt; and
&lt;a href=&quot;&#x2F;2017&#x2F;07&#x2F;22&#x2F;gitlab-9-4-released&#x2F;#variables-in-pipeline-schedules&quot;&gt;variables&lt;&#x2F;a&gt; support.
In GitLab 10.0, we complete the cycle adding &lt;strong&gt;variables support&lt;&#x2F;strong&gt; also to &lt;strong&gt;API&lt;&#x2F;strong&gt; calls.
Now automatic interaction with Pipeline Schedules by third-party applications can benefit of more flexibility.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;api&#x2F;pipeline_schedules.html#pipeline-schedule-variable&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on
Variables for Pipeline Schedules API
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;share-locking-support-for-subgroups&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#share-locking-support-for-subgroups&#x27;&gt;&lt;&#x2F;a&gt;
Share Locking Support for Subgroups
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;GitLab provides the ability to share projects between different groups, giving
you even more flexibility with project structure and permissions.&lt;&#x2F;p&gt;

&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;help&#x2F;workflow&#x2F;groups.md#prevent-projects-in-this-group-from-sharing-a-project-with-another-group&quot;&gt;Share locking&lt;&#x2F;a&gt;
provides the ability to restrict projects in particular groups from being shared, to enforce
centralized security and policy.&lt;&#x2F;p&gt;

&lt;p&gt;Share locking has now been extended to subgroups, allowing subgroups to either
inherit or override share locking from the parent group, giving more granular
control over how projects can be distributed.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;group&#x2F;index.html#share-with-group-lock&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on share locking
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;dedicated-page-for-service-desk-issues&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#dedicated-page-for-service-desk-issues&#x27;&gt;&lt;&#x2F;a&gt;
Dedicated Page for Service Desk Issues
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Previously, managing Service Desk issues required searching for issues authored by
the Support Bot on a project’s issue page. We now have a dedicated page accessible in the
navigation that does that for you automatically. We also display the support email
address itself on the page, allowing you to share it easily with anyone who you want
to send in support requests with Service Desk.&lt;&#x2F;p&gt;

&lt;img alt=&#x27;Dedicated Page for Service Desk Issues&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_0&#x2F;service_desk_page.png&#x27; &#x2F;&gt;
&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;service_desk.html&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on Service Desk
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;group-merge-requests-search-and-filter-bar&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#group-merge-requests-search-and-filter-bar&#x27;&gt;&lt;&#x2F;a&gt;
Group Merge Requests Search and Filter Bar
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;We have updated the group merge requests list page with the latest
search and filter bar UI. This allows you to narrow down the
merge requests you care about quickly, by author, assignee, milestone, label,
or weight, similarly to what you’ve been able to do for a few releases now
on the issue side.&lt;&#x2F;p&gt;

&lt;p&gt;Thank you &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;hiroponz&quot;&gt;Hiroyuki Sato&lt;&#x2F;a&gt; for the contribution.&lt;&#x2F;p&gt;

&lt;img alt=&#x27;Group Merge Requests Search and Filter Bar&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_0&#x2F;merge_requests_search_bar.png&#x27; &#x2F;&gt;
&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;merge_requests&#x2F;#merge-requests-per-group&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on Group Merge Requests
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;move-issues-from-the-sidebar&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#move-issues-from-the-sidebar&#x27;&gt;&lt;&#x2F;a&gt;
Move Issues from the Sidebar
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;The move issue functionality is now in the issue sidebar. This groups other
useful actions outside the main issue area, which is now focused on the title
and description only.&lt;&#x2F;p&gt;

&lt;img alt=&#x27;Move Issues from the Sidebar&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_0&#x2F;move_issue.png&#x27; &#x2F;&gt;
&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;issues&#x2F;moving_issues.html&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on Moving Issues
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;merge-request-inherits-issue-milestone-and-labels&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#merge-request-inherits-issue-milestone-and-labels&#x27;&gt;&lt;&#x2F;a&gt;
Merge Request Inherits Issue Milestone and Labels
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;If you are using milestones and labels for your merge requests, you may
often be copying these objects from the issue to an associated merge request.
Now when you create a merge request from within an issue using the dedicated
button, the milestone and labels are automatically inherited into the merge
request.&lt;&#x2F;p&gt;

&lt;p&gt;Thank you &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;haseebeqx&quot;&gt;haseeb&lt;&#x2F;a&gt; for the contribution.&lt;&#x2F;p&gt;

&lt;img alt=&#x27;Merge Request Inherits Issue Milestone and Labels&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_0&#x2F;inherit_milestone_labels.png&#x27; &#x2F;&gt;
&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;issues&#x2F;issues_functionalities.html#18-new-merge-request&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on creating new MRs from Issues
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;automatically-resolve-outdated-mr-discussions&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#automatically-resolve-outdated-mr-discussions&#x27;&gt;&lt;&#x2F;a&gt;
Automatically Resolve Outdated MR Discussions
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;For some users, resolving a merge request diff discussion means simply pushing new code to replace
the code in question. We’ve introduced a merge request setting to achieve exactly that. If the
setting is on, any diff discussions will be resolved if a push makes that diff section outdated.
Note that discussions on lines that don’t change and top-level resolvable discussions are &lt;em&gt;not&lt;&#x2F;em&gt;
automatically resolved.&lt;&#x2F;p&gt;

&lt;p&gt;Thank you &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;AshleyDumaine&quot;&gt;Ashley Dumaine&lt;&#x2F;a&gt; for the contribution.&lt;&#x2F;p&gt;

&lt;img alt=&#x27;Automatically Resolve Outdated MR Discussions&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_0&#x2F;automatically_resolve_outdated_discussions.png&#x27; &#x2F;&gt;
&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;discussions&#x2F;index.html#automatically-resolve-merge-request-diff-discussions-when-they-become-outdated&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on GitLab Discussions
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;ldap-group-sync-improvements-for-external-users&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#ldap-group-sync-improvements-for-external-users&#x27;&gt;&lt;&#x2F;a&gt;
LDAP Group Sync Improvements for External Users
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;LDAP Group Sync is available in GitLab Enterprise Edition and provides a
great hassle-free way to manage user permissions by leveraging your existing
LDAP group system and permissions.&lt;&#x2F;p&gt;

&lt;p&gt;GitLab further supports &lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;permissions.html#external-users-permissions&quot;&gt;external users&lt;&#x2F;a&gt;
allowing more restrictive control on projects on a case-by-case basis.&lt;&#x2F;p&gt;

&lt;p&gt;In GitLab 10.0 synchronizing external user permissions will happen at login, in addition
to the existing periodic synchronization. This means that any changes to permissions
in your LDAP system can be immediately available to the user after logging in and denying
access to unauthorized projects.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;administration&#x2F;auth&#x2F;ldap-ee.html#group-sync&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on LDAP Group Sync
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;new-filter-for-archived-projects&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#new-filter-for-archived-projects&#x27;&gt;&lt;&#x2F;a&gt;
New Filter for Archived Projects
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;With thanks (again!) to our community contributor &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;mehlah&quot;&gt;Mehdi Lahmam&lt;&#x2F;a&gt;
it is now possible to filter the project view to show archived projects only.&lt;&#x2F;p&gt;

&lt;p&gt;This may be useful when managing projects to see a distinct list of all archived projects
and allow for easy deletion of archived projects by administrators.&lt;&#x2F;p&gt;

&lt;img alt=&#x27;New Filter for Archived Projects&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_0&#x2F;show_archived_projects_only.png&#x27; &#x2F;&gt;
&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;search&#x2F;#projects&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on searching and filtering through GitLab
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;internationalized-project-activity-page&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#internationalized-project-activity-page&#x27;&gt;&lt;&#x2F;a&gt;
Internationalized Project Activity Page
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;As part of our &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;issues&#x2F;4012&quot;&gt;ongoing effort&lt;&#x2F;a&gt; to
translate GitLab into new languages, the  Project Activity Page has now been made ready for translating.&lt;&#x2F;p&gt;

&lt;p&gt;We have recently created a &lt;a href=&quot;http:&#x2F;&#x2F;translate.gitlab.com&quot;&gt;Translation Community on CrowdIn&lt;&#x2F;a&gt; making
it easy for anyone to help translate pages on GitLab. If you wanted to get involved, please
feel free to sign up through the community.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;http:&#x2F;&#x2F;translate.gitlab.com&#x27; target=&#x27;_blank&#x27;&gt;
Get involved translating GitLab
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;gitlab-geo-improvements&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#gitlab-geo-improvements&#x27;&gt;&lt;&#x2F;a&gt;
GitLab Geo Improvements
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Notable changes shipped with GitLab 10.0:&lt;&#x2F;p&gt;

&lt;ul&gt;
  &lt;li&gt;GitLab Geo has fully removed the use of system hooks. If you upgrade to GitLab 10.0, you MUST
&lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;gitlab-geo&#x2F;configuration.html#upgrading-geo&quot;&gt;enable SSH key lookups via the database&lt;&#x2F;a&gt;.
We highly recommend Geo installations either &lt;a href=&quot;https:&#x2F;&#x2F;lists.centos.org&#x2F;pipermail&#x2F;centos-announce&#x2F;2017-September&#x2F;022532.html&quot;&gt;upgrade to CentOS 7.4&lt;&#x2F;a&gt; or use Ubuntu 16.04 to get the required OpenSSH version.&lt;&#x2F;li&gt;
  &lt;li&gt;We &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;2796&quot;&gt;improved the Geo download scheduler&lt;&#x2F;a&gt; to skip over projects that recently failed.&lt;&#x2F;li&gt;
  &lt;li&gt;We added improvements to the admin page for monitoring the database replication lag and log cursor state under an “Advanced” toggle (see screenshot below).&lt;&#x2F;li&gt;
  &lt;li&gt;See the full list of changes &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests?scope=all&amp;amp;utf8=%E2%9C%93&amp;amp;state=merged&amp;amp;label_name[]=Geo&amp;amp;milestone_title=10.0&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;img alt=&#x27;GitLab Geo Improvements&#x27; class=&#x27;shadow&#x27; src=&#x27;&#x2F;images&#x2F;10_0&#x2F;geo_improvements.png&#x27; &#x2F;&gt;
&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;gitlab-geo&#x2F;&#x27; target=&#x27;_blank&#x27;&gt;
Read through the documentation on GitLab Geo
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;performance-improvements&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#performance-improvements&#x27;&gt;&lt;&#x2F;a&gt;
Performance Improvements
&lt;div class=&#x27;badge-container&#x27;&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Community Edition&#x27;&gt;
&lt;span class=&#x27;ce&#x27;&gt;
ce
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Starter&#x27;&gt;
&lt;span class=&#x27;ees&#x27;&gt;
ees
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;a data-placement=&#x27;top&#x27; data-toggle=&#x27;tooltip&#x27; title=&#x27;GitLab Enterprise Edition Premium&#x27;&gt;
&lt;span class=&#x27;eep&#x27;&gt;
eep
&lt;&#x2F;span&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;With every release we aim to make GitLab faster, more available, and more stable.
&lt;a href=&quot;&#x2F;handbook&#x2F;product&#x2F;#performance&quot;&gt;We’re committed&lt;&#x2F;a&gt; not only to making
individual instances of GitLab even faster, but also to greatly improving
the performance of GitLab.com, an instance that hosts 1 million users!&lt;&#x2F;p&gt;

&lt;p&gt;In GitLab 10.0 we have doubled down on this commitment and addressed more
performance issues than any other previous release.&lt;&#x2F;p&gt;

&lt;p&gt;We are addressing high memory usage issues, making numerous pages a lot
faster as well as improving the speed of creating projects and performing commits.&lt;&#x2F;p&gt;

&lt;p&gt;
&lt;i class=&#x27;fa fa-book&#x27;&gt;&lt;&#x2F;i&gt;
&lt;a href=&#x27;https:&#x2F;&#x2F;gitlab.com&#x2F;groups&#x2F;gitlab-org&#x2F;issues?scope=all&amp;amp;utf8=%E2%9C%93&amp;amp;state=closed&amp;amp;milestone_title=10.0&amp;amp;label_name[]=performance&#x27; target=&#x27;_blank&#x27;&gt;
Take a look at the performance improvements in GitLab 10.0
&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;section&gt;
&lt;!-- complementary information --&gt;
&lt;!-- deprecations --&gt;
&lt;section class=&#x27;release-post-section&#x27; id=&#x27;deprecations&#x27;&gt;
&lt;h2 class=&#x27;text-center&#x27; id=&#x27;release-deprecations&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#release-deprecations&#x27;&gt;&lt;&#x2F;a&gt;
Deprecations
&lt;&#x2F;h2&gt;
&lt;h3 id=&#x27;postgresql-9.2-support&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#postgresql-9.2-support&#x27;&gt;&lt;&#x2F;a&gt;
PostgreSQL 9.2 Support
&lt;&#x2F;h3&gt;
&lt;p&gt;With the release of GitLab 10.0 on September 22nd, support for Postgres 9.2
will end and it will be removed from the &lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;omnibus&#x2F;README.html&quot;&gt;Omnibus GitLab package&lt;&#x2F;a&gt;.
For deployments using packaged Postgres, upgrading to GitLab 10.0 requires
the database to already be running version 9.6.&lt;&#x2F;p&gt;

&lt;p&gt;If you are upgrading from at least GitLab 9.0, your database is already running
version 9.6. If you are running a version older than 9.0, please
&lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;omnibus&#x2F;settings&#x2F;database.html#upgrade-packaged-postgresql-server&quot;&gt;upgrade your database&lt;&#x2F;a&gt;
to prepare for GitLab 10.&lt;&#x2F;p&gt;

&lt;p&gt;PostgreSQL 9.2 is &lt;a href=&quot;https:&#x2F;&#x2F;www.postgresql.org&#x2F;support&#x2F;versioning&#x2F;&quot;&gt;end of life&lt;&#x2F;a&gt; in September,
five years after it was first released.&lt;&#x2F;p&gt;

&lt;p&gt;
Due:
&lt;strong&gt;September 22nd, 2017.&lt;&#x2F;strong&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;api-v3&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#api-v3&#x27;&gt;&lt;&#x2F;a&gt;
API V3
&lt;&#x2F;h3&gt;
&lt;p&gt;In GitLab 8.17 we &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;2017&#x2F;02&#x2F;22&#x2F;gitlab-8-17-released&#x2F;&quot;&gt;announced&lt;&#x2F;a&gt; the deprecation of API v3.&lt;&#x2F;p&gt;

&lt;p&gt;We are still seeing a high volume of traffic on GitLab.com using API v3
requests.&lt;&#x2F;p&gt;

&lt;p&gt;API v3 will be removed in GitLab 11 and we just wanted to ensure that developers
were migrating to API v4. Please refer to our &lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;api&#x2F;v3_to_v4.html&quot;&gt;documentation&lt;&#x2F;a&gt; that shows changes
between the two API versions.&lt;&#x2F;p&gt;

&lt;p&gt;
Due:
&lt;strong&gt;GitLab 11.0&lt;&#x2F;strong&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;koding-integration&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#koding-integration&#x27;&gt;&lt;&#x2F;a&gt;
Koding Integration
&lt;&#x2F;h3&gt;
&lt;p&gt;The GitLab Koding integration is being removed as we continue to enhance
GitLab’s in-line editing capabilities.&lt;&#x2F;p&gt;

&lt;p&gt;From GitLab 10.0 it will no longer be possible to activate Koding integration.
Existing installations that are currently using Koding may continue to do so
until GitLab 11.0 when this functionality will be completely removed.&lt;&#x2F;p&gt;

&lt;p&gt;
Due:
&lt;strong&gt;GitLab 11.0&lt;&#x2F;strong&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;tlsv1-no-longer-accepted-by-default&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#tlsv1-no-longer-accepted-by-default&#x27;&gt;&lt;&#x2F;a&gt;
TLSv1 no Longer Accepted by Default
&lt;&#x2F;h3&gt;
&lt;p&gt;GitLab 10 will no longer accept TLSv1 by default. If you would like to
continue to accept TLSv1 connections, it can be added back to the list of
supported protocols by editing the &lt;code&gt;nginx[&#x27;ssl_protocols&#x27;]&lt;&#x2F;code&gt; field in &lt;code&gt;gitlab.rb&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;
Due:
&lt;strong&gt;September 22nd, 2017.&lt;&#x2F;strong&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;gitlab-git-http-server-configuration-support-removed&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#gitlab-git-http-server-configuration-support-removed&#x27;&gt;&lt;&#x2F;a&gt;
GitLab Git HTTP Server Configuration Support Removed
&lt;&#x2F;h3&gt;
&lt;p&gt;Since GitLab 8.2, we have used &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-workhorse&quot;&gt;gitlab-workhorse&lt;&#x2F;a&gt;
to process Git HTTP traffic. Earlier versions of GitLab used
&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-git-http-server&quot;&gt;gitlab-git-http-server&lt;&#x2F;a&gt;, and configuration
entries for it have been ignored. With GitLab 10, we will be removing the code to recognize the
long-deprecated configuration parameters for gitlab-git-http-server. In the event your &lt;code&gt;gitlab.rb&lt;&#x2F;code&gt;
configuration file contains these entries, they should be removed or GitLab configuration will fail.&lt;&#x2F;p&gt;

&lt;p&gt;
Due:
&lt;strong&gt;September 22nd, 2017.&lt;&#x2F;strong&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;private-tokens&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#private-tokens&#x27;&gt;&lt;&#x2F;a&gt;
Private Tokens
&lt;&#x2F;h3&gt;
&lt;p&gt;Private tokens allow a mechanism to access the API with a token unique to your
user account.&lt;&#x2F;p&gt;

&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;profile&#x2F;personal_access_tokens.html&quot;&gt;Personal Access Tokens&lt;&#x2F;a&gt;
provide more granular access to GitLab via the API and are recommended over
using Private Tokens.&lt;&#x2F;p&gt;

&lt;p&gt;Private Token support will be removed in GitLab 10.2 as we feel they are less
secure that Personal Access Tokens.&lt;&#x2F;p&gt;

&lt;p&gt;
Due:
&lt;strong&gt;September 22nd, 2017.&lt;&#x2F;strong&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;ldap-config-&quot;verify_certificates&quot;-defaults-to-secure&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#ldap-config-&quot;verify_certificates&quot;-defaults-to-secure&#x27;&gt;&lt;&#x2F;a&gt;
LDAP Config &quot;verify_certificates&quot; Defaults to Secure
&lt;&#x2F;h3&gt;
&lt;p&gt;The LDAP config option &lt;code&gt;verify_certificates&lt;&#x2F;code&gt; now defaults to true for security.
This option was added in 9.4.2 but defaulted to false for backwards-compatibility.&lt;&#x2F;p&gt;

&lt;p&gt;Installations that are using &lt;code&gt;start_tls&lt;&#x2F;code&gt; or &lt;code&gt;simple_tls&lt;&#x2F;code&gt; for the encryption
parameter and that unknowingly do not have SSL configured properly between the
LDAP server and the GitLab server, may break if the LDAP server’s SSL
certificate cannot be verified by the GitLab server.&lt;&#x2F;p&gt;

&lt;p&gt;
Due:
&lt;strong&gt;September 22nd, 2017.&lt;&#x2F;strong&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;custom-ssh-client-configuration-for-the-git-user&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#custom-ssh-client-configuration-for-the-git-user&#x27;&gt;&lt;&#x2F;a&gt;
Custom SSH Client Configuration for the Git User
&lt;&#x2F;h3&gt;
&lt;p&gt;Currently, the Git user on a GitLab server can have custom SSH client configuration
placed into &lt;code&gt;~git&#x2F;.ssh&#x2F;config&lt;&#x2F;code&gt; &lt;code&gt;.id_rsa&lt;&#x2F;code&gt; and other configuration files are also picked up automatically.&lt;&#x2F;p&gt;

&lt;p&gt;This custom manual configuration is automatically picked up and used in a number of places.
However, it’s insecure as there are no per-gitlab-user access controls on use of the key.&lt;&#x2F;p&gt;

&lt;p&gt;
Due:
&lt;strong&gt;September 22nd, 2018.&lt;&#x2F;strong&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;drop-support-of-legacy-git-storage-configuration&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#drop-support-of-legacy-git-storage-configuration&#x27;&gt;&lt;&#x2F;a&gt;
Drop Support of Legacy Git Storage Configuration
&lt;&#x2F;h3&gt;
&lt;p&gt;With the release of GitLab 9.0, we changed how to
&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;omnibus-gitlab&#x2F;merge_requests&#x2F;1363&quot;&gt;configure an alternate Git storage directory&lt;&#x2F;a&gt;
in order to support multiple directories. Backwards compatibility was maintained for the
older formats to ease the upgrade process. In a future release of GitLab, we will no longer support the
older configuration parameter, and users should modify their &lt;code&gt;gitlab.rb&lt;&#x2F;code&gt; to support the
current &lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;omnibus&#x2F;settings&#x2F;configuration.html#storing-git-data-in-an-alternative-directory&quot;&gt;&lt;code&gt;git_data_dirs&lt;&#x2F;code&gt; format&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;For example if your &lt;code&gt;gitlab.rb&lt;&#x2F;code&gt; contains &lt;code&gt;git_data_dirs({ &quot;default&quot; =&amp;gt; &quot;&#x2F;var&#x2F;opt&#x2F;gitlab&#x2F;git-data&quot; })&lt;&#x2F;code&gt;
it should be changed to &lt;code&gt;git_data_dirs({ &quot;default&quot; =&amp;gt; { &quot;path&quot; =&amp;gt; &quot;&#x2F;var&#x2F;opt&#x2F;gitlab&#x2F;git-data&quot; } })&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;
Due:
&lt;strong&gt;March 22nd, 2018.&lt;&#x2F;strong&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&quot;keyword-&#x27;types&#x27;-in-&#x27;.gitlab-ci.yml&#x27;&quot;&gt;
&lt;a class=&#x27;header-link&#x27; href=&quot;#keyword-&#x27;types&#x27;-in-&#x27;.gitlab-ci.yml&#x27;&quot;&gt;&lt;&#x2F;a&gt;
Keyword &#x27;types&#x27; in &#x27;.gitlab-ci.yml&#x27;
&lt;&#x2F;h3&gt;
&lt;p&gt;The &lt;code&gt;types&lt;&#x2F;code&gt; keyword, that has been replaced by &lt;code&gt;stages&lt;&#x2F;code&gt; long time ago,
is deprecated and will be removed in a future release of GitLab.&lt;&#x2F;p&gt;

&lt;p&gt;
Due:
&lt;strong&gt;March 22nd, 2018.&lt;&#x2F;strong&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;build-badges&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#build-badges&#x27;&gt;&lt;&#x2F;a&gt;
Build Badges
&lt;&#x2F;h3&gt;
&lt;p&gt;Old badges paths for &lt;strong&gt;builds&lt;&#x2F;strong&gt; are now deprecated in favor of &lt;strong&gt;pipeline&lt;&#x2F;strong&gt;
badges, and will be removed in a future release of GitLab.&lt;&#x2F;p&gt;

&lt;p&gt;
Due:
&lt;strong&gt;March 22nd, 2018.&lt;&#x2F;strong&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;auto-deploy&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#auto-deploy&#x27;&gt;&lt;&#x2F;a&gt;
Auto Deploy
&lt;&#x2F;h3&gt;
&lt;p&gt;Auto Deploy is now part of Auto DevOps, and no longer needs to have standalone templates.
With the incorporation in Auto DevOps, it has been improved with Helm Charts support
and persistent database instances, to make deployments even more usable for production.&lt;&#x2F;p&gt;

&lt;p&gt;
Due:
&lt;strong&gt;November 22nd, 2017.&lt;&#x2F;strong&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&#x27;legacy-triggers&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#legacy-triggers&#x27;&gt;&lt;&#x2F;a&gt;
Legacy Triggers
&lt;&#x2F;h3&gt;
&lt;p&gt;Triggers with the legacy label do not have an associated user and only have
access to the current project. You are advised to take ownership of any legacy triggers.&lt;&#x2F;p&gt;

&lt;p&gt;
Due:
&lt;strong&gt;January 22nd, 2018.&lt;&#x2F;strong&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&quot;code-quality-&#x27;codeclimate&#x27;-job-name&quot;&gt;
&lt;a class=&#x27;header-link&#x27; href=&quot;#code-quality-&#x27;codeclimate&#x27;-job-name&quot;&gt;&lt;&#x2F;a&gt;
Code Quality &#x27;codeclimate&#x27; Job Name
&lt;&#x2F;h3&gt;
&lt;p&gt;In the first iteration of GitLab Code Quality, we hardcoded detection of the job by &lt;code&gt;codeclimate&lt;&#x2F;code&gt;.
We now officially look for &lt;code&gt;codequality&lt;&#x2F;code&gt; jobs, even if the old &lt;code&gt;codeclimate&lt;&#x2F;code&gt; is still working.&lt;&#x2F;p&gt;

&lt;p&gt;
Due:
&lt;strong&gt;March 22nd, 2018.&lt;&#x2F;strong&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&quot;runner&#x27;s-&#x27;docker-ssh&#x27;-and-&#x27;docker-ssh+machine&#x27;-executors&quot;&gt;
&lt;a class=&#x27;header-link&#x27; href=&quot;#runner&#x27;s-&#x27;docker-ssh&#x27;-and-&#x27;docker-ssh+machine&#x27;-executors&quot;&gt;&lt;&#x2F;a&gt;
Runner&#x27;s &#x27;docker-ssh&#x27; and &#x27;docker-ssh+machine&#x27; executors
&lt;&#x2F;h3&gt;
&lt;p&gt;Two GitLab Runner’s executors – &lt;code&gt;docker-ssh&lt;&#x2F;code&gt; and &lt;code&gt;docker-ssh+machine&lt;&#x2F;code&gt; – are now deprecated.
They will be removed in one of the upcoming releases.&lt;&#x2F;p&gt;

&lt;p&gt;You can read more about the decision &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-runner&#x2F;issues&#x2F;2732&quot;&gt;in the issue&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;
Due:
&lt;strong&gt;March 22nd, 2018.&lt;&#x2F;strong&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&quot;runner&#x27;s-exec-and-service-related-commands&quot;&gt;
&lt;a class=&#x27;header-link&#x27; href=&quot;#runner&#x27;s-exec-and-service-related-commands&quot;&gt;&lt;&#x2F;a&gt;
Runner&#x27;s exec and service-related commands
&lt;&#x2F;h3&gt;
&lt;p&gt;We’re also deprecating all service-management-related commands
(&lt;code&gt;stop&lt;&#x2F;code&gt;, &lt;code&gt;start&lt;&#x2F;code&gt;, &lt;code&gt;restart&lt;&#x2F;code&gt;, &lt;code&gt;status&lt;&#x2F;code&gt;, &lt;code&gt;install&lt;&#x2F;code&gt;, &lt;code&gt;uninstall&lt;&#x2F;code&gt;). They will be removed in one of the upcoming releases.&lt;&#x2F;p&gt;

&lt;p&gt;You can read more about the decision &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-runner&#x2F;issues&#x2F;2710&quot;&gt;in the issue&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;
Due:
&lt;strong&gt;March 22nd, 2018.&lt;&#x2F;strong&gt;
&lt;&#x2F;p&gt;
&lt;&#x2F;section&gt;
&lt;!-- Updgrade barometer --&gt;
&lt;section class=&#x27;release-post-section&#x27; id=&#x27;upgrade-barometer&#x27;&gt;
&lt;h2 class=&#x27;text-center&#x27; id=&#x27;barometer&#x27;&gt;
&lt;a class=&#x27;header-link&#x27; href=&#x27;#barometer&#x27;&gt;&lt;&#x2F;a&gt;
Upgrade barometer
&lt;&#x2F;h2&gt;

&lt;p&gt;To upgrade to GitLab 10.0 from the latest 9.5 version, no downtime is required.
To upgrade without downtime, please consult the
&lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;update&#x2F;README.html#upgrading-without-downtime&quot;&gt;documentation on downtimeless upgrades&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;If you are upgrading from a version prior to 9.5, migrations will take a
significant amount of time based on the size of your database. For example on GitLab.com,
the set of migrations would take over 24 hours. For larger deployments, we recommend
upgrading to 9.5 first and allowing background migrations to run. Once completed,
then continue and upgrade to GitLab 10.0.&lt;&#x2F;p&gt;

&lt;p&gt;You can check the status of background migrations by running this command from the Rails console:
&lt;code&gt;Sidekiq::Queue.new(&#x27;background_migration&#x27;).size&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;

&lt;p&gt;For this release we have migrations and post-deploy migrations.&lt;&#x2F;p&gt;

&lt;p&gt;GitLab.com migrations took approximately five minutes and post-deploy
migrations amounted for a total of around 15 minutes.&lt;&#x2F;p&gt;

&lt;p&gt;GitLab Geo users, please consult the documentation on &lt;a href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;gitlab-geo&#x2F;configuration.html#upgrading-geo&quot;&gt;upgrading Geo&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;&#x2F;section&gt;

</content>
</entry>
<entry>
<title>GitLab&#x27;s Functional Group Updates: September 19th - September 22nd</title>
<link href='https://about.gitlab.com/2017/09/22/functional-group-updates/' rel='alternate' />
<id>https://about.gitlab.com/2017/09/22/functional-group-updates/</id>
<published>2017-09-22T00:00:00+00:00</published>
<updated>2017-09-22T00:00:00+00:00</updated>
<author>
<name>Chloe Whitestone</name>
</author>
<content type='html'>&lt;!-- beginning of the intro - leave it as is --&gt;

&lt;p&gt;Every day from Monday to Thursday, right before our &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;handbook&#x2F;#team-call&quot;&gt;GitLab Team call&lt;&#x2F;a&gt;, a different Functional Group gives an &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;handbook&#x2F;people-operations&#x2F;functional-group-updates&#x2F;&quot;&gt;update&lt;&#x2F;a&gt; to our team.&lt;&#x2F;p&gt;

&lt;p&gt;The format of these calls is simple and short where they can either give a presentation or quickly walk the team through their agenda.&lt;&#x2F;p&gt;



&lt;!-- end of the intro --&gt;

&lt;!-- beginning of the FG block - repeat as many times as necessary (copy and paste the entire block) --&gt;

&lt;hr &#x2F;&gt;

&lt;h3 id=&quot;engineering-team&quot;&gt;Engineering Team&lt;&#x2F;h3&gt;

&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;a&#x2F;gitlab.com&#x2F;presentation&#x2F;d&#x2F;1jR436tBPeoWI94xVn65hZDdKOwj57bR-3psNpxWkvts&#x2F;edit?usp=sharing&quot;&gt;Presentation slides&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;figure class=&quot;video_container&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;V4ho9SPL6ps&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;figure&gt;

&lt;!-- end of the FG block --&gt;

&lt;!-- beginning of the FG block - repeat as many times as necessary (copy and paste the entire block) --&gt;

&lt;hr &#x2F;&gt;

&lt;h3 id=&quot;prometheus-team&quot;&gt;Prometheus Team&lt;&#x2F;h3&gt;

&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;presentation&#x2F;d&#x2F;1CQDMPr85hf9f8ixFgPrPmzpgGc7Svj8VfOeugPWRFKY&#x2F;edit&quot;&gt;Presentation slides&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;figure class=&quot;video_container&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;3Qn4i5Y-dAw&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt; &lt;&#x2F;iframe&gt;
&lt;&#x2F;figure&gt;

&lt;!-- end of the FG block --&gt;

&lt;!-- beginning of the FG block - repeat as many times as necessary (copy and paste the entire block) --&gt;

&lt;hr &#x2F;&gt;

&lt;h3 id=&quot;frontend-team&quot;&gt;Frontend Team&lt;&#x2F;h3&gt;

&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;drive.google.com&#x2F;file&#x2F;d&#x2F;0B6SrD3vaBHUeYWNIYTh6TURpZlk&#x2F;view&quot;&gt;Presentation slides&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;figure class=&quot;video_container&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;m6DfA_wTybY&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt; &lt;&#x2F;iframe&gt;
&lt;&#x2F;figure&gt;

&lt;!-- end of the FG block --&gt;

&lt;!-- beginning of the FG block - repeat as many times as necessary (copy and paste the entire block) --&gt;

&lt;hr &#x2F;&gt;

&lt;h3 id=&quot;ux-team&quot;&gt;UX Team&lt;&#x2F;h3&gt;

&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;presentation&#x2F;d&#x2F;1XZk4y1_gf3Pk2bkT0QPZJXR46qp3jpE5MpqyTED0oAc&#x2F;edit?usp=sharing&quot;&gt;Presentation slides&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;figure class=&quot;video_container&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;GXaW7Mn0pgk&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt; &lt;&#x2F;iframe&gt;
&lt;&#x2F;figure&gt;

&lt;!-- end of the FG block --&gt;

&lt;!-- beginning of the FG block - repeat as many times as necessary (copy and paste the entire block) --&gt;

&lt;hr &#x2F;&gt;

&lt;p&gt;Questions? Leave a comment below or tweet &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;gitlab&quot;&gt;@GitLab&lt;&#x2F;a&gt;! Would you like to join us? Check out our &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;jobs&#x2F;&quot;&gt;job openings&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;img src=&#x27;https:&#x2F;&#x2F;about.gitlab.com&#x2F;images&#x2F;blogimages&#x2F;functional-group-update-blog-cover.jpg&#x27; class=&#x27;webfeedsFeaturedVisual&#x27; style=&#x27;display: none;&#x27; &#x2F;&gt;</content>
</entry>
<entry>
<title>How to create a CI&#x2F;CD pipeline with Auto Deploy to Kubernetes using GitLab and Helm</title>
<link href='https://about.gitlab.com/2017/09/21/how-to-create-ci-cd-pipeline-with-autodeploy-to-kubernetes-using-gitlab-and-helm/' rel='alternate' />
<id>https://about.gitlab.com/2017/09/21/how-to-create-ci-cd-pipeline-with-autodeploy-to-kubernetes-using-gitlab-and-helm/</id>
<published>2017-09-21T00:00:00+00:00</published>
<updated>2017-09-21T00:00:00+00:00</updated>
<author>
<name>Sergey Nuzhdin</name>
</author>
<content type='html'>
&lt;p&gt;Recently, I started working on a few Golang microservices. I decided to try GitLab’s caching and split the job into multiple steps for better feedback in the UI.&lt;&#x2F;p&gt;



&lt;p&gt;Since my previous posts[&lt;a href=&quot;http:&#x2F;&#x2F;blog.lwolf.org&#x2F;post&#x2F;how-to-build-tiny-golang-docker-images-with-gitlab-ci&#x2F;&quot;&gt;1&lt;&#x2F;a&gt;][&lt;a href=&quot;http:&#x2F;&#x2F;blog.lwolf.org&#x2F;post&#x2F;continuous-deployment-to-kubernetes-from-gitlab-ci&#x2F;&quot;&gt;2&lt;&#x2F;a&gt;] about CI&#x2F;CD, a lot has changed. I started using Helm for packaging applications, and stopped using docker-in-docker in gitlab-runner.&lt;&#x2F;p&gt;

&lt;p&gt;Here are a few of the main changes to my &lt;code&gt;.gitlab-ci.yaml&lt;&#x2F;code&gt; file since my previous post:&lt;&#x2F;p&gt;

&lt;ul&gt;
  &lt;li&gt;no docker-in-docker&lt;&#x2F;li&gt;
  &lt;li&gt;using cache for packages instead of a prebuilt image with dependencies&lt;&#x2F;li&gt;
  &lt;li&gt;splitting everything into multiple steps&lt;&#x2F;li&gt;
  &lt;li&gt;autodeploy to staging environment using Helm&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;h3 id=&quot;building-golang-image&quot;&gt;Building Golang image&lt;&#x2F;h3&gt;

&lt;p&gt;Since Golang is very strict about the location of the project, we need to do some adjustments to CI job. This is done in the &lt;code&gt;before_script&lt;&#x2F;code&gt; block. Simply create needed directories and link source code in there. Assuming that the official repository of the project is &lt;code&gt;gitlab.example.com&#x2F;librerio&#x2F;libr_files&lt;&#x2F;code&gt; it should look like this.&lt;&#x2F;p&gt;

&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;variables:
  APP_PATH: &#x2F;go&#x2F;src&#x2F;gitlab.example.com&#x2F;librerio&#x2F;libr_files

before_script:
  - mkdir -p &#x2F;go&#x2F;src&#x2F;gitlab.example.com&#x2F;librerio&#x2F;
  - ln -s $PWD ${APP_PATH}
  - mkdir -p ${APP_PATH}&#x2F;vendor
  - cd ${APP_PATH}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;With this in place, we can install dependencies and build our binaries. To avoid the download of all packages on each build we need to configure caching. Due to the strange caching rules of GitLab, we need to add vendor directory to both cache and artifacts. Cache will give us an ability to use it between build jobs and artifacts will allow us to use it inside the same job.&lt;&#x2F;p&gt;

&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;
cache:
  untracked: true
  key: &quot;$CI_BUILD_REF_NAME&quot;
  paths:
    - vendor&#x2F;

setup:
  stage: setup
  image: lwolf&#x2F;golang-glide:0.12.3
  script:
    - glide install -v
  artifacts:
    paths:
     - vendor&#x2F;

&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Build step didn’t change, it’s still about building the binary. I add binary to artifacts.&lt;&#x2F;p&gt;

&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;build:
  stage: build
  image: lwolf&#x2F;golang-glide:0.12.3
  script:
    - cd ${APP_PATH}
    - GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o release&#x2F;app -ldflags &#x27;-w -s&#x27;
    - cd release
  artifacts:
    paths:
     - release&#x2F;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;test-stage&quot;&gt;Test stage&lt;&#x2F;h3&gt;

&lt;p&gt;To run golang tests with coverage reports I’m using the variation of &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mlafeldt&#x2F;chef-runner&#x2F;blob&#x2F;v0.7.0&#x2F;script&#x2F;coverage&quot;&gt;this shell script&lt;&#x2F;a&gt;. It runs all tests in project subdirectories and creates a coverage report. I changed it a bit before putting into a gist. I exclude vendor directory from tests.&lt;&#x2F;p&gt;

&lt;ul&gt;
  &lt;li&gt;coverage regexp for gitlab-ci: &lt;code&gt;^total:\s*\(statements\)\s*(\d+.\d+\%)&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;h3 id=&quot;deploy-stage&quot;&gt;Deploy stage&lt;&#x2F;h3&gt;

&lt;p&gt;I don’t use native GitLab’s integration with Kubernetes.&lt;&#x2F;p&gt;

&lt;p&gt;First I thought about creating Kubernetes secrets and mounting it to the gitlab-runner pod. But it’s very complicated. You need to upgrade deployment every time you want to add new cluster configuration. So I’m using GitLab’s CI&#x2F;CD variables with base64 encoded Kubernetes config. Each project can have any number of configurations. The process is easy – create base64 string from the config and copy it to the clipboard. After this, put it into &lt;code&gt;kube_config&lt;&#x2F;code&gt; variable (name it whatever you like).&lt;&#x2F;p&gt;

&lt;p&gt;&lt;code&gt;cat ~&#x2F;.kube&#x2F;config | base64 | pbcopy&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;

&lt;p&gt;If you do not own a full GitLab installation, consider creating a Kubernetes user with restricted permissions.&lt;&#x2F;p&gt;

&lt;p&gt;Then on the deploy stage, we can decode this variable back into the file and use it with kubectl.&lt;&#x2F;p&gt;

&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;variables:
  KUBECONFIG: &#x2F;etc&#x2F;deploy&#x2F;config

deploy:
  ...
  before_script:
    - mkdir -p &#x2F;etc&#x2F;deploy
    - echo ${kube_config} | base64 -d &amp;gt; ${KUBECONFIG}
    - kubectl config use-context homekube
    - helm init --client-only
    - helm repo add stable https:&#x2F;&#x2F;kubernetes-charts.storage.googleapis.com&#x2F;
    - helm repo add incubator https:&#x2F;&#x2F;kubernetes-charts-incubator.storage.googleapis.com&#x2F;
    - helm repo update
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Deploy stage also covers the case when you have several versions of the same application.&lt;&#x2F;p&gt;

&lt;p&gt;For example, you have two versions of API: v1.0 and v1.1. All you need to do is set &lt;code&gt;appVersion&lt;&#x2F;code&gt; in Chart.yaml file. Build system will check API version and either deploy or upgrade needed release.&lt;&#x2F;p&gt;

&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;- export API_VERSION=&quot;$(grep &quot;appVersion&quot; Chart.yaml | cut -d&quot; &quot; -f2)&quot;
- export RELEASE_NAME=&quot;libr-files-v${API_VERSION&#x2F;.&#x2F;-}&quot;
- export DEPLOYS=$(helm ls | grep $RELEASE_NAME | wc -l)
- if [ ${DEPLOYS}  -eq 0 ]; then helm install --name=${RELEASE_NAME} . --namespace=${STAGING_NAMESPACE}; else helm upgrade ${RELEASE_NAME} . --namespace=${STAGING_NAMESPACE}; fi
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;tldr&quot;&gt;tl;dr&lt;&#x2F;h3&gt;

&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;Here is complete `.gitlab-ci.yaml` file for reference.

cache:
  untracked: true
  key: &quot;$CI_BUILD_REF_NAME&quot;
  paths:
    - vendor&#x2F;

before_script:
  - mkdir -p &#x2F;go&#x2F;src&#x2F;gitlab.example.com&#x2F;librerio&#x2F;
  - ln -s $PWD ${APP_PATH}
  - mkdir -p ${APP_PATH}&#x2F;vendor
  - cd ${APP_PATH}

stages:
  - setup
  - test
  - build
  - release
  - deploy

variables:
  CONTAINER_IMAGE: ${CI_REGISTRY}&#x2F;${CI_PROJECT_PATH}:${CI_BUILD_REF_NAME}_${CI_BUILD_REF}
  CONTAINER_IMAGE_LATEST: ${CI_REGISTRY}&#x2F;${CI_PROJECT_PATH}:latest
  DOCKER_DRIVER: overlay2

  KUBECONFIG: &#x2F;etc&#x2F;deploy&#x2F;config
  STAGING_NAMESPACE: app-stage
  PRODUCTION_NAMESPACE: app-prod

  APP_PATH: &#x2F;go&#x2F;src&#x2F;gitlab.example.com&#x2F;librerio&#x2F;libr_files
  POSTGRES_USER: gorma
  POSTGRES_DB: test-${CI_BUILD_REF}
  POSTGRES_PASSWORD: gorma

setup:
  stage: setup
  image: lwolf&#x2F;golang-glide:0.12.3
  script:
    - glide install -v
  artifacts:
    paths:
     - vendor&#x2F;

build:
  stage: build
  image: lwolf&#x2F;golang-glide:0.12.3
  script:
    - cd ${APP_PATH}
    - GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o release&#x2F;app -ldflags &#x27;-w -s&#x27;
    - cd release
  artifacts:
    paths:
     - release&#x2F;

release:
  stage: release
  image: docker:latest
  script:
    - cd ${APP_PATH}&#x2F;release
    - docker login -u gitlab-ci-token -p ${CI_BUILD_TOKEN} ${CI_REGISTRY}
    - docker build -t ${CONTAINER_IMAGE} .
    - docker tag ${CONTAINER_IMAGE} ${CONTAINER_IMAGE_LATEST}
    - docker push ${CONTAINER_IMAGE}
    - docker push ${CONTAINER_IMAGE_LATEST}

test:
  stage: test
  image: lwolf&#x2F;golang-glide:0.12.3
  services:
    - postgres:9.6
  script:
    - cd ${APP_PATH}
    - curl -o coverage.sh https:&#x2F;&#x2F;gist.githubusercontent.com&#x2F;lwolf&#x2F;3764a3b6cd08387e80aa6ca3b9534b8a&#x2F;raw
    - sh coverage.sh

deploy_staging:
  stage: deploy
  image: lwolf&#x2F;helm-kubectl-docker:v152_213
  before_script:
    - mkdir -p &#x2F;etc&#x2F;deploy
    - echo ${kube_config} | base64 -d &amp;gt; ${KUBECONFIG}
    - kubectl config use-context homekube
    - helm init --client-only
    - helm repo add stable https:&#x2F;&#x2F;kubernetes-charts.storage.googleapis.com&#x2F;
    - helm repo add incubator https:&#x2F;&#x2F;kubernetes-charts-incubator.storage.googleapis.com&#x2F;
    - helm repo update
  script:
    - cd deploy&#x2F;libr-files
    - helm dep build
    - export API_VERSION=&quot;$(grep &quot;appVersion&quot; Chart.yaml | cut -d&quot; &quot; -f2)&quot;
    - export RELEASE_NAME=&quot;libr-files-v${API_VERSION&#x2F;.&#x2F;-}&quot;
    - export DEPLOYS=$(helm ls | grep $RELEASE_NAME | wc -l)
    - if [ ${DEPLOYS}  -eq 0 ]; then helm install --name=${RELEASE_NAME} . --namespace=${STAGING_NAMESPACE}; else helm upgrade ${RELEASE_NAME} . --namespace=${STAGING_NAMESPACE}; fi
  environment:
    name: staging
    url: https:&#x2F;&#x2F;librerio.example.com
  only:
  - master

&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;em&gt;&lt;a href=&quot;http:&#x2F;&#x2F;blog.lwolf.org&#x2F;post&#x2F;how-to-create-ci-cd-pipeline-with-autodeploy-k8s-gitlab-helm&#x2F;&quot;&gt;How to create a CI&#x2F;CD pipeline with Auto Deploy to Kubernetes using GitLab and Helm&lt;&#x2F;a&gt; was originally published on Lwolfs Blog.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;

&lt;p class=&quot;note&quot;&gt;Photo by &lt;a href=&quot;https:&#x2F;&#x2F;unsplash.com&#x2F;@cchpmn&quot;&gt;C Chapman&lt;&#x2F;a&gt; on &lt;a href=&quot;https:&#x2F;&#x2F;unsplash.com&#x2F;photos&#x2F;nRdcqrQ74gU&quot;&gt;Unsplash&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;img src=&#x27;https:&#x2F;&#x2F;about.gitlab.com&#x2F;images&#x2F;blogimages&#x2F;how-to-create-ci-cd-pipeline-with-autodeploy-to-kubernetes-using-gitlab-and-helm.jpg&#x27; class=&#x27;webfeedsFeaturedVisual&#x27; style=&#x27;display: none;&#x27; &#x2F;&gt;</content>
</entry>
<entry>
<title>GitLab Patch Release: 9.5.5</title>
<link href='https://about.gitlab.com/2017/09/18/gitlab-9-dot-5-dot-5-released/' rel='alternate' />
<id>https://about.gitlab.com/2017/09/18/gitlab-9-dot-5-dot-5-released/</id>
<published>2017-09-18T00:00:00+00:00</published>
<updated>2017-09-18T00:00:00+00:00</updated>
<author>
<name>Simon Knox</name>
</author>
<content type='html'>&lt;p&gt;Today we are releasing version 9.5.5 for GitLab Community Edition (CE) and Enterprise Edition (EE).&lt;&#x2F;p&gt;

&lt;p&gt;This version resolves a number of regressions and bugs in
&lt;a href=&quot;&#x2F;2017&#x2F;09&#x2F;07&#x2F;gitlab-9-dot-5-dot-4-security-release&#x2F;&quot;&gt;this month&#x27;s 9.5.4 release&lt;&#x2F;a&gt; and
prior versions.&lt;&#x2F;p&gt;

&lt;p&gt;It includes the following fixes:&lt;&#x2F;p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Better prefilled description for issue created from failed job. (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;13790&quot;&gt;!13790&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Fix 500 errors caused by a race condition in GPG&#x27;s tmp directory handling (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14194&quot;&gt;!14194&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Fix project feature being deleted when updating project with invalid visibility level (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14235&quot;&gt;!14235&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Fix Pipeline Triggers to show triggered label and predefined variables (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14244&quot;&gt;!14244&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Don&#x27;t show Pages settings when not available (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;13888&quot;&gt;!13888&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Check that GPG signature and commit are created by the same user (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;13771&quot;&gt;!13771&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Better nav layout at small screen sizes (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;13967&quot;&gt;!13967&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Fix merge request widget button height differences (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14000&quot;&gt;!14000&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Fix Mark as Resolved icon (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14042&quot;&gt;!14042&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Fix X-Gitlab-Event header when testing webhook (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14108&quot;&gt;!14108&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Fix collapsed sidebar project title scroll issue (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;13777&quot;&gt;!13777&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Disable GitLab Project Import button if source disabled (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;13789&quot;&gt;!13789&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Fix divide-by-zero error for new projects (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;13803&quot;&gt;!13803&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Normalize styles in New Issue&#x2F;MR combo button (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;13647&quot;&gt;!13647&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Speed up creation of new Merge Requests (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;13685&quot;&gt;!13685&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;CE&#x2F;EE&lt;&#x2F;strong&gt; Increase storage timeout default (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ce&#x2F;merge_requests&#x2F;14023&quot;&gt;!14023&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE&lt;&#x2F;strong&gt; Fix activation of project mirror when project is created (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;2756&quot;&gt;!2756&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE&lt;&#x2F;strong&gt; Fix bug where mirror trigger builds is nil at project create (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;2797&quot;&gt;!2797&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE&lt;&#x2F;strong&gt; Ensure routing setting is available before calling it (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;2908&quot;&gt;!2908&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE&lt;&#x2F;strong&gt; Allow pushing without a branch name (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;2879&quot;&gt;!2879&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE&lt;&#x2F;strong&gt; Fix branch name regex not being saved on admin push_rule page (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;2877&quot;&gt;!2877&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE&lt;&#x2F;strong&gt; Fix issue with projects with an empty import URL (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;2824&quot;&gt;!2824&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE&lt;&#x2F;strong&gt; Geo - Whitelist LFS requests to download objects on a secondary node (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;2758&quot;&gt;!2758&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE&lt;&#x2F;strong&gt; Fix unsetting credentials data for pull mirrors (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;2810&quot;&gt;!2810&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE&lt;&#x2F;strong&gt; Fix merges not working when project is not licensed for squash (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;2817&quot;&gt;!2817&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE&lt;&#x2F;strong&gt; Fix approver icon spacing on Merge Request widget (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;2825&quot;&gt;!2825&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE&lt;&#x2F;strong&gt; Fix 500 error on SSH host keys action (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;2827&quot;&gt;!2827&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE&lt;&#x2F;strong&gt; Set Deploy boards to collapse by default (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;2834&quot;&gt;!2834&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;EE&lt;&#x2F;strong&gt; Don&#x27;t put password in SSH remote for public key authentication (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-ee&#x2F;merge_requests&#x2F;2837&quot;&gt;!2837&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;Omnibus CE&#x2F;EE&lt;&#x2F;strong&gt; Update pgb-notify template (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;omnibus-gitlab&#x2F;merge_requests&#x2F;1873&quot;&gt;!1873&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;Omnibus CE&#x2F;EE&lt;&#x2F;strong&gt; Increase storage timeout default (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;omnibus-gitlab&#x2F;merge_requests&#x2F;1906&quot;&gt;!1906&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;Omnibus CE&#x2F;EE&lt;&#x2F;strong&gt; Add more options to repmgr.conf template (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;omnibus-gitlab&#x2F;merge_requests&#x2F;1893&quot;&gt;!1893&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;Omnibus CE&#x2F;EE&lt;&#x2F;strong&gt; Update pgbouncer to use one style of logging  (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;omnibus-gitlab&#x2F;merge_requests&#x2F;1918&quot;&gt;!1918&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;Omnibus CE&#x2F;EE&lt;&#x2F;strong&gt; Upgrade ruby version to 2.3.5 (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;omnibus-gitlab&#x2F;merge_requests&#x2F;1930&quot;&gt;!1930&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;strong&gt;Omnibus CE&#x2F;EE&lt;&#x2F;strong&gt; Upgrade libyaml version to 0.1.7&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;h2 id=&quot;upgrade-barometer&quot;&gt;Upgrade barometer&lt;&#x2F;h2&gt;

&lt;p&gt;This version includes some new migrations, but does not require any
downtime.&lt;&#x2F;p&gt;

&lt;p&gt;Please be aware that by default the Omnibus packages will stop, run migrations,
and start again, no matter how “big” or “small” the upgrade is. This behavior
can be changed by adding a &lt;a href=&quot;http:&#x2F;&#x2F;doc.gitlab.com&#x2F;omnibus&#x2F;update&#x2F;README.html&quot;&gt;&lt;code&gt;&#x2F;etc&#x2F;gitlab&#x2F;skip-auto-migrations&lt;&#x2F;code&gt;
file&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;updating&quot;&gt;Updating&lt;&#x2F;h2&gt;

&lt;p&gt;To update, check out our &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;update&#x2F;&quot;&gt;update page&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;h2 id=&quot;enterprise-edition&quot;&gt;Enterprise Edition&lt;&#x2F;h2&gt;

&lt;p&gt;Interested in GitLab Enterprise Edition? Check out the &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;gitlab-ee&#x2F;&quot;&gt;features exclusive to
EE&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;p&gt;Access to GitLab Enterprise Edition is granted by a &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;products&#x2F;&quot;&gt;subscription&lt;&#x2F;a&gt;.
No time to upgrade GitLab yourself? Subscribers receive upgrade and installation
services.&lt;&#x2F;p&gt;
&lt;img src=&#x27;https:&#x2F;&#x2F;about.gitlab.com&#x2F;images&#x2F;default-blog-image.png&#x27; class=&#x27;webfeedsFeaturedVisual&#x27; style=&#x27;display: none;&#x27; &#x2F;&gt;</content>
</entry>
<entry>
<title>GitLab&#x27;s Functional Group Updates: September 4th - September 15th</title>
<link href='https://about.gitlab.com/2017/09/15/functional-group-updates/' rel='alternate' />
<id>https://about.gitlab.com/2017/09/15/functional-group-updates/</id>
<published>2017-09-15T00:00:00+00:00</published>
<updated>2017-09-15T00:00:00+00:00</updated>
<author>
<name>Chloe Whitestone</name>
</author>
<content type='html'>&lt;!-- beginning of the intro - leave it as is --&gt;

&lt;p&gt;Every day from Monday to Thursday, right before our &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;handbook&#x2F;#team-call&quot;&gt;GitLab Team call&lt;&#x2F;a&gt;, a different Functional Group gives an &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;handbook&#x2F;people-operations&#x2F;functional-group-updates&#x2F;&quot;&gt;update&lt;&#x2F;a&gt; to our team.&lt;&#x2F;p&gt;

&lt;p&gt;The format of these calls is simple and short where they can either give a presentation or quickly walk the team through their agenda.&lt;&#x2F;p&gt;



&lt;!-- end of the intro --&gt;

&lt;!-- beginning of the FG block - repeat as many times as necessary (copy and paste the entire block) --&gt;

&lt;hr &#x2F;&gt;

&lt;h3 id=&quot;backend-team&quot;&gt;Backend Team&lt;&#x2F;h3&gt;

&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;presentation&#x2F;d&#x2F;1C484YbbT6R29oSR9fzkH9v2-h5uE5w0M0BElBnFAL78&#x2F;edit&quot;&gt;Presentation slides&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;figure class=&quot;video_container&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;WPZZH0BxYWo&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;figure&gt;

&lt;!-- end of the FG block --&gt;

&lt;!-- beginning of the FG block - repeat as many times as necessary (copy and paste the entire block) --&gt;

&lt;hr &#x2F;&gt;

&lt;h3 id=&quot;cicd-team&quot;&gt;CI&#x2F;CD Team&lt;&#x2F;h3&gt;

&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;presentation&#x2F;d&#x2F;1TEfBqlop2h2OOAZMrt5gkzt6quL6x_OsQtza0FyBWLw&#x2F;edit&quot;&gt;Presentation slides&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;figure class=&quot;video_container&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;c7XPbVQQx0I&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt; &lt;&#x2F;iframe&gt;
&lt;&#x2F;figure&gt;

&lt;!-- end of the FG block --&gt;

&lt;!-- beginning of the FG block - repeat as many times as necessary (copy and paste the entire block) --&gt;

&lt;hr &#x2F;&gt;

&lt;h3 id=&quot;build-team&quot;&gt;Build Team&lt;&#x2F;h3&gt;

&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;a&#x2F;gitlab.com&#x2F;presentation&#x2F;d&#x2F;1ocFPjAGsCuY-BJW-X1z79G043tIAaxHaBf7E2A3466k&#x2F;present&quot;&gt;Presentation slides&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;figure class=&quot;video_container&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;iOkeJBkUbBA&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt; &lt;&#x2F;iframe&gt;
&lt;&#x2F;figure&gt;

&lt;!-- end of the FG block --&gt;

&lt;!-- beginning of the FG block - repeat as many times as necessary (copy and paste the entire block) --&gt;

&lt;hr &#x2F;&gt;

&lt;h3 id=&quot;support-team&quot;&gt;Support Team&lt;&#x2F;h3&gt;

&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;presentation&#x2F;d&#x2F;1EizMPiTJFYm7R7Av6J7DguR_Crgo_t8pufLYKoGC5sU&#x2F;&quot;&gt;Presentation slides&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;figure class=&quot;video_container&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;aD4LsqgB7mE&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt; &lt;&#x2F;iframe&gt;
&lt;&#x2F;figure&gt;

&lt;!-- end of the FG block --&gt;

&lt;!-- beginning of the FG block - repeat as many times as necessary (copy and paste the entire block) --&gt;

&lt;hr &#x2F;&gt;

&lt;h3 id=&quot;infrastructure-team&quot;&gt;Infrastructure Team&lt;&#x2F;h3&gt;

&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;a&#x2F;gitlab.com&#x2F;presentation&#x2F;d&#x2F;1HuQNwe__Bc2L4rqHXOTyWvf3nhdgAU3fT12gQdJstiQ&#x2F;edit?usp=sharing&quot;&gt;Presentation slides&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;figure class=&quot;video_container&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;pnuphOmnotY&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt; &lt;&#x2F;iframe&gt;
&lt;&#x2F;figure&gt;

&lt;!-- end of the FG block --&gt;

&lt;!-- beginning of the FG block - repeat as many times as necessary (copy and paste the entire block) --&gt;

&lt;hr &#x2F;&gt;

&lt;p&gt;Questions? Leave a comment below or tweet &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;gitlab&quot;&gt;@GitLab&lt;&#x2F;a&gt;! Would you like to join us? Check out our &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;jobs&#x2F;&quot;&gt;job openings&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;img src=&#x27;https:&#x2F;&#x2F;about.gitlab.com&#x2F;images&#x2F;blogimages&#x2F;functional-group-update-blog-cover.jpg&#x27; class=&#x27;webfeedsFeaturedVisual&#x27; style=&#x27;display: none;&#x27; &#x2F;&gt;</content>
</entry>
</feed>
