<!-- 
RSS generated by JIRA (1001.0.0-SNAPSHOT#100246-sha1:7a5c50119eb0633d306e14180817ddef5e80c75d) at Thu Feb 08 23:18:27 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary add field=key&field=summary to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>FOLIO Jira</title>
    <link>https://folio-org.atlassian.net</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>1001.0.0-SNAPSHOT</version>
        <build-number>100246</build-number>
        <build-date>07-02-2024</build-date>
    </build-info>

<item>
            <title>[FOLIO-2131] SPIKE: how to deploy containers based on feature branches</title>
                <link>https://folio-org.atlassian.net/browse/FOLIO-2131</link>
                <project id="10290" key="FOLIO">FOLIO</project>
                    <description>&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5c706fbb47a54a6728e59df2&quot; class=&quot;user-hover&quot; rel=&quot;5c706fbb47a54a6728e59df2&quot; data-account-id=&quot;5c706fbb47a54a6728e59df2&quot; accountid=&quot;5c706fbb47a54a6728e59df2&quot; rel=&quot;noreferrer&quot;&gt;Wayne Schneider&lt;/a&gt; &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5f9abc1eb45b2e007453f423&quot; class=&quot;user-hover&quot; rel=&quot;5f9abc1eb45b2e007453f423&quot; data-account-id=&quot;5f9abc1eb45b2e007453f423&quot; accountid=&quot;5f9abc1eb45b2e007453f423&quot; rel=&quot;noreferrer&quot;&gt;John Malconian&lt;/a&gt; &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5fca8bef7cc1030069d4f186&quot; class=&quot;user-hover&quot; rel=&quot;5fca8bef7cc1030069d4f186&quot; data-account-id=&quot;5fca8bef7cc1030069d4f186&quot; accountid=&quot;5fca8bef7cc1030069d4f186&quot; rel=&quot;noreferrer&quot;&gt;mark.stacy&lt;/a&gt; &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5cd423bebc70090d6ce241b1&quot; class=&quot;user-hover&quot; rel=&quot;5cd423bebc70090d6ce241b1&quot; data-account-id=&quot;5cd423bebc70090d6ce241b1&quot; accountid=&quot;5cd423bebc70090d6ce241b1&quot; rel=&quot;noreferrer&quot;&gt;Ian Hardy&lt;/a&gt; let&apos;s provide steps here and consider how/where to upload descriptors for feature builds.&lt;/p&gt;</description>
                <environment></environment>
        <key id="81349">FOLIO-2131</key>
            <summary>SPIKE: how to deploy containers based on feature branches</summary>
                <type id="10003" iconUrl="https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium">Task</type>
                                            <priority id="10002" iconUrl="https://dev.folio.org/assets/jira-priority/jira-p3.svg">P3</priority>
                        <status id="6" iconUrl="https://folio-org.atlassian.net/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="green"/>
                                    <resolution id="10003">Done</resolution>
                                                        <assignee accountid="5f9abc1eb45b2e007453f423">John Malconian</assignee>
                                                                <reporter accountid="557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d">Jakub Skoczen</reporter>
                                    <labels>
                            <label>platform-backlog</label>
                    </labels>
                <created>Mon, 1 Jul 2019 13:54:48 +0000</created>
                <updated>Wed, 3 Jun 2020 16:39:57 +0000</updated>
                            <resolved>Wed, 7 Aug 2019 13:34:02 +0000</resolved>
                                                                        <due></due>
                            <votes>0</votes>
                                    <watches>3</watches>
                                                                <comments>
                                                            <comment id="196133" author="5c706fbb47a54a6728e59df2" created="Mon, 1 Jul 2019 17:32:28 +0000"  >&lt;p&gt;One possible approach for each PR that includes a backend dependency based on a feature branch (leaving out how to figure that out for now):&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;Build feature branch and deploy container. Service name should be the same as the module ID (build and deploy from CI, without first posting image to Docker Hub?)&lt;/li&gt;
	&lt;li&gt;Stand up an Okapi instance (needn&apos;t necessarily be a cluster)&lt;/li&gt;
	&lt;li&gt;Pull module descriptors from upstream repository&lt;/li&gt;
	&lt;li&gt;Post module descriptor from feature branch (note that module ID must be unique to this Okapi instance)&lt;/li&gt;
	&lt;li&gt;Post deployment descriptor to Okapi &lt;tt&gt;/&amp;#95;/discovery/modules&lt;/tt&gt; API&lt;/li&gt;
	&lt;li&gt;Create tenant&lt;/li&gt;
	&lt;li&gt;Post install.json for tenant that includes the module ID of the module under development&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;What is the scope of this issue? Is this &lt;em&gt;only&lt;/em&gt; for feature branches of backend modules? That is, can a front-end module feature branch request one (or more) feature branches of backend modules?&lt;/p&gt;</comment>
                                                            <comment id="196134" author="557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d" created="Tue, 2 Jul 2019 08:51:44 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5c706fbb47a54a6728e59df2&quot; class=&quot;user-hover&quot; rel=&quot;5c706fbb47a54a6728e59df2&quot; data-account-id=&quot;5c706fbb47a54a6728e59df2&quot; accountid=&quot;5c706fbb47a54a6728e59df2&quot; rel=&quot;noreferrer&quot;&gt;Wayne Schneider&lt;/a&gt; I think we could make creating tenants and installing the module optional in this pipeline and rely on the front-end  pipeline to do this.&lt;/p&gt;</comment>
                                                            <comment id="196135" author="557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d" created="Tue, 2 Jul 2019 09:10:22 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5c706fbb47a54a6728e59df2&quot; class=&quot;user-hover&quot; rel=&quot;5c706fbb47a54a6728e59df2&quot; data-account-id=&quot;5c706fbb47a54a6728e59df2&quot; accountid=&quot;5c706fbb47a54a6728e59df2&quot; rel=&quot;noreferrer&quot;&gt;Wayne Schneider&lt;/a&gt; &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5f9abc1eb45b2e007453f423&quot; class=&quot;user-hover&quot; rel=&quot;5f9abc1eb45b2e007453f423&quot; data-account-id=&quot;5f9abc1eb45b2e007453f423&quot; accountid=&quot;5f9abc1eb45b2e007453f423&quot; rel=&quot;noreferrer&quot;&gt;John Malconian&lt;/a&gt; &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5f8314dfbdef80006f6f572d&quot; class=&quot;user-hover&quot; rel=&quot;5f8314dfbdef80006f6f572d&quot; data-account-id=&quot;5f8314dfbdef80006f6f572d&quot; accountid=&quot;5f8314dfbdef80006f6f572d&quot; rel=&quot;noreferrer&quot;&gt;Adam Dickmeiss&lt;/a&gt; Since there could be potentially MANY feature branches at any given point it would be good if the CI deployment were opt-in through a setting in a configuration file (Jenkinsfile?) and off by default. E.g something like:&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;ciDeploy = &quot;never&quot; | &quot;pr&quot; | &quot;commit&quot;&lt;/tt&gt;&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;pr&lt;/tt&gt; would deploy the branch when a PR is issued from the branch, &lt;tt&gt;commit&lt;/tt&gt; would (re)deploy on any commit to the branch.&lt;/p&gt;

&lt;p&gt;we may also consider adding:&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;ciDeployPRTarget= name-of-the-target-pr-branch&lt;/tt&gt;&lt;/p&gt;

&lt;p&gt;to constrain deployment only to PRs issued against a specific branch, defaulting to master probably makes sense.&lt;/p&gt;</comment>
                                                            <comment id="196136" author="5c706fbb47a54a6728e59df2" created="Mon, 8 Jul 2019 13:54:38 +0000"  >&lt;p&gt;One issue with multiple Okapis using the same set of running modules is that unless we can guarantee that the tenant ID is unique, we will run into storage conflicts.&lt;/p&gt;</comment>
                                                            <comment id="196137" author="5f9abc1eb45b2e007453f423" created="Thu, 25 Jul 2019 19:36:58 +0000"  >&lt;p&gt;&apos;ciDeployPRTarget= name-of-the-target-pr-branch&apos; is a good idea.  I&apos;m not sure about &apos;ciDeploy&apos;.    We need to be clear that &lt;b&gt;only&lt;/b&gt; PRs issued against a particular branch will create a preview environment and deploy a container for that branch.   This will not work with any other branch build.   We need the PR for various reasons.  There is no need to do anything special for additional commits against the branch that has an open PR.  Any new commits to this branch will redeploy a new container into the same preview environment.  Not sure of the mechanics of this yet, but that&apos;s how it should work.  &lt;/p&gt;

&lt;p&gt;Here&apos;s how I envision this on the kubernetes side:     When a PR is created,  a new namespace is created in the cluster.  A docker image is built and container deployed to the namespace in the cluster as part of the build pipeline.  We&apos;ll probably want a local docker repo in the cluster and not use Docker Hub for these images.   For the PR preview, we can either deploy a local okapi instance to the PR namespace or use an okapi running in the primary folio namespace.   Either way,  we&apos;ll need to create virtual service definitions that allow us to access services in other namespaces using the &apos;ExternalName&apos; service type which is essentially a local namespace alias to a service that resides in a different namespace.    If we use a local okapi instance, then we would need to create a service definition for each module that resides in the primary folio namespace so that the local namespace okapi can access each module running outside the PR preview namespace.  The service alias would be used by Okapi&apos;s discovery.    &lt;/p&gt;

&lt;p&gt;Advantages to using a local namespace okapi: &lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Any temporary module descriptors that are posted to Okapi, PR-based tenants,  and so forth will be destroyed when the namespace is destroyed.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Disadvantages:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;We may need to provision a dedicated DB in the PR preview namespace?&lt;/li&gt;
	&lt;li&gt;We need to create service aliases in the preview namespace for each module we are enabling.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;On the other hand,  we could create a service alias in the preview namespace that points to a dedicated okapi instance in the primary folio namespace instead.     &lt;/p&gt;

&lt;p&gt;The advantages of this approach would be:&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Fewer service alias definitions would need to be created.  We would only need two total - one in the preview namespace for okapi and one for the branch module that would need to be added to the primary folio namespace so that the folio namespace okapi can access the branch module in the preview namespace.   We would need to remove this service definition from the folio namespace as part of the cleanup process.&lt;/li&gt;
&lt;/ul&gt;


&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;One DB&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Disadvantages: &lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;We&apos;d need to clean up each tenant when the PR is closed as well as the module descriptor(s) that are posted to okapi.&lt;/li&gt;
	&lt;li&gt;Mixing PR module descriptors may cause unpredictable results when Okapi is doing dependency resolution for other tenants.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;When the PR is closed the namespace all associated services associated with that namespace are destroyed. &lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10000">
                    <name>Blocks</name>
                                            <outwardlinks description="blocks">
                                        <issuelink>
            <issuekey id="10721">UXPROD-1827</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10003">
                    <name>Relates</name>
                                            <outwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="11293">UXPROD-2066</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="81268">FOLIO-2055</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10000" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummarycf">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10057" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Development Team</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10144"><![CDATA[Core: Platform]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10019" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|hzx6hr:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10020" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue id="1780">CP: sprint 69</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10044" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Story Points</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>5.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10024" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>[CHART] Date of First Response</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Mon, 1 Jul 2019 17:32:28 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10025" key="com.atlassian.jira.ext.charting:timeinstatus">
                        <customfieldname>[CHART] Time in Status</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                    </customfields>
    </item>
</channel>
</rss>