How to render assets when building a static website with GitLab Pages and Jekyll
It appears the issue is in the URL used to access the documents in the blog post excerpt. First of all, the URL should begin with a / since the assets folder is at the root of the site project. However (and most importantly), I also had to add the baseurl to the file URL as shown below:
blog post excerpt:
&lt;ul style=&quot;list-style-type:none&quot;&gt;
    {% for duck in ducks %}
        &lt;h2&gt;{{ duck.name }}&lt;/h2&gt;
        &lt;li&gt;&lt;a href=&quot;/{{ baseurl }}/assets/v{{ version }}/{{ duck.url }}&quot;&gt;View&lt;/a&gt; | &lt;a href=&quot;/{{ baseurl }}/assets/v{{ version }}/{{ duck.url }}&quot; download&gt;Download&lt;/a&gt;&lt;/li&gt;
    {% endfor %}
&lt;/ul&gt;

If I weren't building my post entries from a template the link would actually be /{{ site.baseurl }}/assets/v{{ version }}/{{ duck.url }}, but Jinja does not understand the site.baseurl object when rendering the template. To bypass this, I read the value of the predefined GitLab CI_PROJECT_PATH variable and pass it to the template under the name baseurl when rendering.