Check that stream is an object and contains relevant data:

write $isObject(httpResponse)

what data does it contain:

do httpResponse.OutputToDevice()

if it's not an object - what is it?

zwrite httpResponse

If everything is okay - stream contains what you expect it to contain, then what is the status of convert operation:

Set sc = ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject(httpResponse,,.Object,1)

write $System.Status.GetErrorText(sc)
zwrite Object

1.

SELECT
parent As Class,
Properties
FROM %Dictionary.CompiledIndex
WHERE IdKey=1

2.

SELECT
parent As Class, Name, Type
FROM %Dictionary.CompiledProperty
WHERE Type='%Library.Integer' -- Name='Property' AND parent='Class'

3.

SELECT 1 As "Exists"
FROM %Dictionary.CompiledIndex
WHERE _Unique=1 AND parent = :Class AND Properties = :Property

Generally speaking, inside Caché you must have two functions

InternalToExternal(name) As %String

ExternalToInternal(path) As %String

That translate Cache names (/app/index.csp) into filenames (i.e. C:\Temp\MyRepo\CSP\app\index.csp) and vice versa.

Your CI system should:

  1. Build git diff between target commit and environment current commit. Sample code.
  2. Separate diff into 2 parts: added/modified and deleted.
  3. Load added/modified files into Cache.
  4. Translate external names for deleted list into internal names.
  5. Delete items from deleted list.
  6. Set current environment commit equal to target commit

Here's a series of articles on building a CI/CD pipeline for InterSystems Cache.

can I deploy a container manually

Sure, to deploy a container manually it's enough to execute this command:

docker run -d
  --expose 52773
  --volume /InterSystems/durable/master:/data
  --env ISC_DATA_DIRECTORY=/data/sys
  --name iris-master
  docker.eduard.win/test/docker:master
  --log $ISC_PACKAGE_INSTALLDIR/mgr/messages.log

Alternatively, you can use GUI container management tools to configure a container you want to deploy. For example, here's Portainer web interface, you can define volumes, variables, etc there:

it also allows browsing registry and inspecting your running containers among other things:

what do I need to have on a production host initially?

First of all you need to have:

  • FQDN
  • GitLab server
  • Docker Registry
  • InterSystems IRIS container inside your Docker Registry

They could be anywhere as long as they are accessible from production host.

After that on a production host (and on every separate host you want to use), you need to have:

  • Docker
  • GitLab Runner
  • Nginx reserve proxy container

After all these conditions are met you can create Continuous Delivery configuration in GitLab and it would build and deploy your container to production host.

In that case how Durable %SYS and Application data (USER NAMESPACE) appear on the production host for the first time? 

When InterSystems IRIS container is started in Durable %SYS mode, it checks directory for durable data, if it does not exist InterSystems IRIS creates it and copies the data from inside the container. If directory already exists and contains databases/config/etc then it's used.

By default InterSystems IRIS has all configs inside.