►
From YouTube: Scalable Multiplayer Game Design with OpenShift (E8)
Description
This monthly series explores what it takes to design a scale-out multiplayer video game architecture using containers and OpenShift. There will be live coding, philosophical design discussion, and everything in between.
In this episode we'll try to get the container build of the game server running on OpenShift. We'll also deploy the web client. And, if time allows, we'll try to apply some GitOps principles to automating all of it.
Host:
Erik Jacobs
Guests:
* Derek Reese
* Michael Clayton
* Roderick Kieley
* Jared Sprague
A
Today
we
are
joined
by
the
usual
cadre
of
jared
sprague,
hi,
yeah,
roddy,
kiley,
hey
folks,
and
we've
also
got
jafar
today,
he's
going
to
be
off
camera
because
he's
got
the
child
duty
in
the
background
going
on,
but
we're
kind
of
switching
gears
a
little
bit
away
from
some
of
the
low
level
c
and
c
plus
and
game
design,
stuff
and
pivoting
to
kind
of
try
and
do
some
things
directly
on
openshift,
and
so
what
we're
going
to
try
and
do
today
is
actually
get
the
application
built
both
the
game,
server
and
the
game,
the
web
client
and
then
maybe
deploy
the
broker
and
do
a
couple
other
things.
A
So
thanks
again
for
joining-
and
I
guess
we'll
get
rolling
here.
What
I
should
probably
do
is
move
some
things
around
on
my
desktop
so
that
we
are
keeping
the
good
things
good
and
the
bad
things
away.
Okay,
one
more
thing:
I
don't
need
this!
Okay
great.
A
Yes,
jerry,
give
me
a
thumbs
up.
Okay,
so
roddy
and
jafar
had
done
a
little
bit
of
pre-work
behind
the
scenes
to
figure
out
how
to
get
the
game
server,
built
and
deployed
using
openshift
pipelines
and
in
this
environment.
Actually,
don't
even
have
pipelines
installed
so
jafar.
If
I
remember
correctly,
I
need
to
go
to
operator
hub
and
just
install
the
pipelines
operator.
B
A
And
so
operator
hub
for
those
who
may
not
have
seen
it
before.
This
is
kind
of
our
convenient
user
interface
into
a
catalog
and
marketplace
of
certified
and
community
operators.
And,
if
you
don't
remember,
an
operator
is
just
a
piece
of
software
that
is
a
kubernetes
control
loop,
that
sort
of
makes
sure
that
something
is
running
in
a
kubernetes
environment
as
you
define
it
in
the
case
of
openshift
pipelines.
A
This
is
a
operator
that
provides
the
openshift
pipelines
feature
which
is
based
on
the
upstream
tecton
community
project,
and
so
installing
this
operator
is
going
to
add
the
tecton
features
into
this
openshift
environment.
So
I
will
go
ahead
and
click
the
install
button
here.
I
guess
I
want
stable.
We
want
pipelines
to
be
available
everywhere.
A
Approval
strategy
has
to
do
with
when
or
how
the
operator
gets
updated
if
there
are
updates
available
and
here's
all
the
apis
that
are
provided
by
it.
Unsurprisingly,
the
pipelines
operator
provides
a
pipeline
object
or
api
endpoint,
so
we
click,
install
and
what's
happening
under
the
covers
is
operator.
Lifecycle
manager
is
potentially
creating
a
namespace
and
it
is
deploying
the
operator
into
that
namespace
and
adding
some
artifacts
into
that
space.
And
so,
let's
see
oc,
get
project
grep
pipe,
I'm
using
a
pipe
to
pipe
into
grep.
To
look
for
a
pipe.
A
A
Oh,
I
was
asking
about
the
project
where
pipelines
lands,
but
I
guess
I
was
just
a
little
too
early.
Let's
see
you
get
pod
in
the
pipelines
project
we
see
there's
an
operator
and
then
there's
the
pipelines,
controller
and
the
pipeline's
web
hook,
which
I
guess
is
an
admission
controller
or
something
like
that.
And
now,
if
we
hard
refresh
the
openshift
user
interface,
we
actually
pick
up
this
new
pipelines,
tab
which
lets
us
look
at
the
pipeline
objects
in
our
various
projects
and
other
stuff.
A
D
B
Yeah,
so
you'll
have
to
make
a
a
small
change
to
your
docker
file
because,
okay,
if
you
look
at
the
the
server
the
way
it's
built,
you
are
mounting
the
the
servers,
the
source
code
as
a
volume
when
you
are
doing
the
the
build
yes,
so
the
problem,
if
you
do
that,
is
that
if
you
do
a
build
within
openshift
like
a
docker
file,
build,
it's
not
gonna,
find
the
source
code
yep.
B
B
D
B
D
D
B
C
A
But
either
either
way,
it's
still
basically
doing
the
same
thing.
So
the
worker
is
going
to
be
this
temp
srt.
D
B
Because
the
when
you
are
going
to
do
the
git
clone
so
basically,
when
you
generate
the
pipeline
you're
going
to
have
three
tasks:
you're
going
to
have
the
git
fetch
source
code-
okay,
okay,
and
it's
going
to
clone
the
code
in
the
working
there
like
it's
going
to
be
in
the
cloud
in
the
code
where
it
clones
your
your
your
source,
then
if
it's
going
to
do
the
docker
build
from
that
folder.
So
if
you
copy
that
the
the
dot
folder
to
slash
tmp
game
server,
it's
gonna
copy.
The
whole
git
ring.
A
B
A
A
B
A
This
one
should
work
exactly
yeah
all
right,
so
create
pipeline.
A
Console
go
to
the
dev
console,
let's
go
and.
B
B
A
A
We
don't
need
a
route
to
this
application
because
it's
not
directly
public.
Oh
actually,
we
will
need
a
route,
but
no
it's
because
it's
udp
so
that
it's
going
to
get
real
ugly,
real
fast,
because
the
game
client
talks.
No,
the
game
client
talks
to
the
broker.
A
Anyway,
so
we
don't
need
a
route
to
the
server
great
things
and
stuff
all
right
pipeline.
B
What
you
can
do
now
is
like
hit
the
edit
like
actions
edit
pipeline.
B
B
It
relies
on
some
parameters
that
have
been
automatically
filled
by
the
by
the
console
ui.
So
basically,
it's
going
to
use
a
git
clone.
Well,
it's
going
to
get
cloned
the
repo
using
whatever.
B
A
Cool,
so
here's
where
it
did
so,
I'm
looking
at
the
actual
run
of
the
pipeline,
which
is
happening
right
now.
This
is
where
it
does
the
clone.
If
I
remember
correctly,
when
we
use
pipelines,
it
gives
us
a
pvc.
Yes.
A
A
B
Just
hover
the
build
image
that
you
see
there.
B
Yeah
just
hover
over
the
you
know
the
two
arrows
that
you
see
there
on
the
so
I
think
this
was
a
cool
audition
that
they
added
like
you,
can
see
the
status.
A
Yeah,
I
wanted
to
see
the
actual
pod
where
the
the
list
of
the
pods,
where
the
things
are
happening.
So
what
we
see
here
is
the
game.
Server
is
trying
to
be
deployed
and
it's
failing,
because
we
don't
actually
have
an
image
yet
so
the
reason
it's
pulling
the
reason
it's
backing
off
from
trying
to
pull
the
image
is
because
it's
failing
to
pull
the
image
because
there
isn't
an
image
because
we're
in
the
process
of
building
the
image.
A
B
D
A
A
Here's
all
the
crazy
volumes
that
get
attached,
wow,
there's
a
lot
of
volumes
holy
crap
so
anyway
back
to
our
pipeline,
so
here's
the
build
which
hasn't
exploded
yet
so
that's
a
good
sign.
So
it's
using
fedora
33,
it's
installing
a
bunch
of
packages,
blah
blah
blah
that
takes
forever
looks
like
the
package.
Build
stuff
was
successful,
sorry
package
install
which
is
good.
A
Oh
then
it
does
more
package.
Installs
jeez.
F
F
B
We
that's.
A
A
E
A
B
F
A
A
But
it
actually
was
not
bad.
It
fixed
the
problem
that
we
were
going
to
have,
which
is
kind
of
cool.
F
B
A
Well,
it's
not
oh
fatal
error,
killed
signal,
terminated
program
cc,
one
plus
oops
error.
C
A
B
I
have
to
say
that
I
had
64
gigs
notes,
so
I
didn't
get
that
error.
C
A
A
A
Okay,
so
I'm
going
to
add
some
more
nodes
to
my
cluster
so
that,
hopefully
I
have
space
to
run
this
workload
because
I'm
sure
elasticsearch
is
being
hog
and
eating
all
my
ram.
I
guess
I
could
kill
logging,
but
that's
less
fun
jared.
Are
you?
Have
you
made
any
progress
or
do
we
want
to
just
do
it?
Live.
G
D
A
No,
I
guess
I
could
deploy
the
broker
because
we're
gonna
need
that.
So
let's
go
to
operators
operator
hub
roddy.
What
do
I
want
here?
Do
I.
A
C
So,
in
actual
fact,
we
just
have
a
release
in
the
works
at
the
moment
that
makes
those
operator
hub
panels
more
descriptive,
because
for
exactly
this
reason.
C
D
A
Oh,
that's
a
good
question:
they're
running
open
shift,
four
seven.
A
A
What
that
means
is
that
when
I
say
cluster
wide,
there
would
be
one
instance
of
the
operator
pod
running
in
its
own
namespace,
say
amq
broker
operator
or
something
like
that,
and
it
would
pay
attention
to
all
crds
all
broker
related
crds
in
the
cluster
anywhere,
and
if
a
user
creates
an
instance
in
their
own
namespace,
the
single
operator
would
handle
that
today,
it's
a
single
namespace
operator,
so
we
end
up
deploying
the
operator
into
our
namespace,
and
it
only
pays
attention
to
crs
in
our
namespace.
A
A
Okay,
so
we've
got
our
broker,
we
get
some
provided
apis
from
the
broker.
We
get
sorry
from
the
operator.
We
get
a
broker,
we
get
a
broker
address
and
we
get
a
broker
scale
down,
which
I
actually.
C
Yes,
yeah,
so
basically,
there's
broker
deployments,
which
is
the
amq
broker.
Crd
there
are
broker
addresses
so
that
people
can
define
their
cues
and
topics
and
amq
addresses
mqp
addresses
that
they
want
to
deploy
across
their
broker
cluster,
and
there
is
a
scaled-down
controller.
So
the
architecture
of
the
operator
is
such
that
there's,
actually
three
independent
controllers
inside
the
operator,
one
for
each
crd
makes.
A
C
The
scale
down
controller,
in
particular,
watches
just
for
pod
discrepancies
to
see
whether
or
not
the
size
you
have
specified
matches
the
number
of
pods
and
when
there's
a
discrepancy
it
starts
up
and
if
configured
to
do
so,
it'll
go
get
your
messages
from
the
pod
that
just
scaled
down
and
moved
those
messages
to
somewhere.
That's
still
available.
C
E
C
C
C
A
A
C
A
C
B
So,
just
for
the
user
and
admin
password
in
the
application,
I
think
it
was
admin
admin
is
it
does
it
need
to
be
the
same
or
it
doesn't
matter.
A
A
C
No,
no
in
the
so
the
definition
itself.
If
I
can
find
the
right
window
here,
to
put
it
out
to
all
you.
A
And
twitter
I've
done
this.
I've
done
this
rodeo
before
red
hat,
open
shift.
D
C
D
C
A
C
Yeah,
so
it's
the
reverse,
so
protocols
should
be
amqp
and
the
enabled
protocol
should
be
removed,
but
that
still
doesn't
explain
where
the
boolean
value
comes
from.
D
F
E
A
A
Jafar.
Are
you
still
with
us.
B
B
So
what
are
you
trying
to
achieve
for
for
deploying
a
specific
deployment
or
something.
B
A
That's
not
good.
We
need
to
figure
out
if
that's
a
thing,
because
we
may
end
up
with
the
same
problem
if
we
land
on
the
same
node.
Let's
look
at
the
ammo
for
the
pipeline.
A
A
Yeah,
so
in
the
build
task,
it
would
be
good
if
we
could
specify
that
the
container.
A
B
To
have
a
bigger
what
what
you
can
do
if
it
works,
is,
if.
B
If,
if
you
have
a
node
that
you
are
confident,
you
know
it
has
enough
resources,
you
can
put
a
selector
on
the
whole
namespace
on
the
whole
project
and
I
think
the
build
that
happens
in
the
project
should
happen.
On
that
note,.
A
C
B
A
C
Guess
no,
it
exposes
amqp
over
tcp.
C
A
F
A
Yeah
no
there's
a
way,
I
think,
to
change
the
enable
pass-through,
redirector
or
edge
termination
or
whatever.
Let
me.
A
C
C
A
A
A
Too
much
garbage
you
end
up
with
lots
of
garbage
where
on
earth
is
that
script.
C
So,
just
as
a
note,
the
x
descriptor
in
the
openshift
gui
is
defined,
as
we
noted
as
a
boolean
switch,
and
the
matching
entry
in
the
crd
is
actually
a
string
which,
as
we
saw
in
the
custom
resource
instance
aircad
up
there
in
yaml,
you
needs
to
have
amqp
in
it,
so
the
gui
is
actually
got
a
bug
in
it.
A
F
A
To
do
this
grep
right
here,
but
whatever
there's
I
have
like
some
bashy
emily
stuff
for
how
to
modify
the
route
to
add
the
tls
passthrough
or
whatever.
I
just
need
to
find
it
arcade
arcade
sh,
look
at
that
here
we
go.
A
Tls
termination
edge
there
we
go
exactly
what
I
want.
Let's
see
get
route,
so
we
want
to
patch.
A
A
A
A
C
A
C
C
So
if
you
pop
open
the
the
other
route
that
was
opened
up
the
console
route,
you
can
go
to
the
console
and
then
tell.
C
Well,
you
can
look
at
the
acceptors
drop
down
on
the
left,
acceptors.
C
C
A
I'm
just
going
to
open
the
the
game,
client
and
then
change
the
config
file
to
point
to
that
route.
A
Right,
so
we've
got
config.js.
C
It's
already
handled
by
the
by
the
proxy.
A
Yeah
well,
look:
we
got
a
player
identity,
it
didn't
barf
and
say
that
it
couldn't
connect.
So
I'm
assuming
we're
connected.
B
E
A
A
Can
I
get
logs
on
a
pipeline
run?
That
would
be
cool
if
that
was
like
a
oc
logs.
A
D
C
B
You
know
eric
just
just
use
the
create
limit
range
from
the
admin
console.
A
All
right
so
container,
why
do
you
exist?
That's
a
good
question.
B
So,
are
you
using.
A
I'm
killed
also
there
we
go
gkn
pipeline
list,
tkn
pipeline
dash,
h,
tkn
pipeline
start
srt
game
server
value
for
param.
Why
are
you
asking
me
questions.
A
No,
no
hungry,
oh
damn,
all
right!
Well,
he's
busy
doing
stuff
all
right.
So
let's
recap
what
we've
done
so
far.
So
we
have
deployed
the
amq
operator
into
our
project
and
found
a
blog
all
right.
So
we've
got
the
amq
broker.
We've
got
our
sorry.
The
operator
we
deployed
a
broker.
We've
got
a
pipeline,
that's
in
the
process
of
doing
its
thing.
A
We
modified
the
route
for
the
broker
to
use
a
tls
edge
termination
with
the
self
sign
certificate
from
our
router,
and
then
we
locally
tested
the
game
client
talking
to
the
wss,
the
secure
websocket
for
the
broker.
So
that's
good,
so
we
validated
that
the
broker
is
doing
what
we
want.
We
fixed
our
limit
range
that
was
may
have
been
causing
us
problems
with
our
build
and
oom.
A
F
A
It
wasn't
the
default,
it
was
so
we,
the
internal
demo
system
that
we
use
to
provision
the
cluster.
I
think
there
is
a
admission
controller
that
the
demo
system
people
set
up
for
this
particular
catalog
item
that
will
automatically
create
a
default
limit
range
on
a
new
namespace.
C
B
A
So
yeah,
okay,
perfect,
so
I
had
created
this
demo
app
name
space
earlier,
not
today,
some
other
day.
Oh
look!
I
can
tell
you
exactly
when
it
was
created
on
the
on
the
7th
which
is
not
today,
and
we
got
this
core
resource
limits
thing.
There's
some
there's
some
like
limit
range
controller,
web
hook
thing.
A
A
A
So
openshift
has
a
concept
of
a
project
request.
So
if
you
use
the
default
workflow
of
clicking
new
project
in
the
user
interface,
what
actually
is
happening
under
the
covers
is
it's
doing
this
project
request
workflow,
which
says
hey?
Is
this
user
allowed
to
create
a
project?
Oh,
they
are
great
use.
This
template
object
and
instantiate
a
bunch
of
stuff,
and
what
you
see
here
is
there's
a
network.
There's
a
default
network
policy.
A
There
is
the
actual
project,
object,
there's
a
bunch
of
role,
bindings
and
service
accounts
and
other
stuff,
and
so
what
the
demo
people
did
was
they
added
this
limit
range
to
that
template,
and
so
you
can
see
that
the
pod
memory
max
is
12
gigs
and
the
default
request
for
a
container
sorry,
the
default
limit
for
a
container
is
only
1.5
gigs,
which
is
not
very
much
right.
So
that
would
explain
why
we
were
getting
blown
up
and
oom.
A
Oh
cool,
it's
even
got
this
openshift
logo.
I
have
no
idea
why
now
the
server
is
crashing,
but
I
bet
I
know
why.
If
we
go
look
at
the
logs,
what
we'll
see
is
it's
trying
to
connect
to
artemis
cloud
which
doesn't
actually
exist?
A
So
what
we
need
to
do
is
inject
a
config
file
using
config
map
into
this
go
ahead.
Jafar
eric.
A
Yeah
yeah
you
jerk
application
server,
no
configuration.
F
B
D
D
F
Wow,
in
fact,
when
you
first
started
a
open
shift
like
sandbox
or
whatever
it
gives
you
a
little
tour
and
that's
like
the
first
thing.
It
walks
you
through.
A
Man
holy
crap,
all
right,
so
here's
the
service,
the
cool
thing
about
openshift
and
and
services
and
internal
and
all
that
fun
stuff-
is
that
you
don't
need
fully
qualified
domain
names
because
we
set
the
end
dots
on
the
on
the
resolver.
So
we
can
just
go
broker
your
is
it
broker
uri
broker
uri?
We
can
set
that
to
simply
that,
oh
variety.
Do
I
need
the
tcp
or
do
we
do
that?
C
A
D
A
It's
moving,
oh
god.
I
think
we,
oh
the
default.
The
default
cycle
sleep
cycle
is
really
bizarre
anyway,
yeah,
so
so,
whatever
spaceship
moves,
we
did
it.
So
what
did
we
do?
We?
We
only
did
we
did
it
in
an
hour.
That's
like
a
new
record
for
achieving
stuff
on
this
stream.
So
what
did
we
do?
I
should.
G
G
F
B
A
Well,
so
what
happens
is
it's?
I
have
a
crappy
cpu
gpu
thanks
intel
for
for
nothing,
and
so
no
I'm
just
kidding
it's
not
it's
not
intel's
fault,
and
so,
when
I'm
running
two
displays
and
gnome
and
all
these
other
things
and
blah
blah.
A
When
I
run
phaser
games,
especially
it
just
like
heats
up
the
cpu
really
bad
and
then
it
basically
goes
to
like
thermal
throttle
and
so
the
processor
speed
will
get
throttled
down
to
like
200
megahertz
and
then
the
load
average
shoots
through
the
roof.
And
then
it's
basically
just
like
whatever
the
linux
scheduler
decides
is
important
at
that
moment,
which
usually
isn't
zoom
so
yeah
it
takes,
takes
a
few
moments
for
for
it
to
all
come
back,
but
I
think
I'm
back.
A
Okay,
so
in
a
new
record
for
this
stream,
in
about
an
hour,
we
actually
got
cool
stuff
working
and
so
to
recap
again
we
have
a
pipeline
that
builds
a
c
application
from
a
docker
file
that
speaks
amqp
over
tcp
to
the
broker
and
we
deployed
the
broker
using
the
amqp
operator.
So
that's
kind
of
cool,
it's
pretty
vanilla,
simple,
config
right,
there's,
no
redundancy,
there's
no
persistence
of
the
message
queue,
but
it
does
work
and
so
now
potentially
jared
we
could
deploy
the
web
client
for
the
game.
A
A
A
there
we
go:
okay,
okay,
jared;
yes,
now
I'm
really
ready
for
you.
I
promise.
G
G
A
D
G
So
so
we've
got
a
gulp
file
yeah,
so
I
added
a
gulp
file
added,
which
basically
adds
like
you
know
it.
It's
it's
build
tasks
basically
like
copying
stuff
to
the
dist
directory
running
running
babel,
which
running
babel
and
browser
fi,
which
takes
all
of
the
all
of
the
like
dependencies
that
are
required
in
the
javascript
and
builds
them
all
like
package
them
all
into
a
single
javascript
file
that
gets
included
at
the
got
it
at
the
top
level.
Does
a
bunch
of
magic.
G
G
So
the
top
level
we
have
like
assets,
yes,
sjs
and
let's
see
what
else
did
I
have
to
do.
I
had
in,
and
I
had
to
go
into
each
file
pretty
much
because
before
we
were
including
everything
globally
by
just
using
the
script
tag
on
the
index.html
file
and
just
every
dependency,
we
would
just
import
it
in
the
global
window
scope.
So
all
the
javascript
files
had
a
scope
into
everything.
G
So,
since
we're
not
doing
that
anymore,
I
have
to
require
those
dependencies
directly
in
the
files
themselves.
So
if
you
look
at
the
one
of
the
files
like
look
at
like
the
amqp,
client
or
or
the
main
scene
or
something
yeah
there,
we
go
yeah.
So
you
see
where,
if
I
got
protobuf
equals
require
protobuf
and
uuid
four,
you
could
require
uuid
those
those
didn't
used
to
be
there,
because
you
could
see
where
they
just
used
to
be
in
the
global
scope,
because
they
were
scripted
in
the
html
file.
G
G
Yeah,
so,
if
locally
like,
if
you're
doing
this
locally
there's
some
new
npm
targets,
now
there's
bill
dev
and
bill
prod
build
all
right.
Hang
on.
G
It
is
yeah
there
you
go
so
we
got,
we
got
build,
dev,
build
prod
start
by
default,
runs,
build
dev
when
you're,
just
running
it
locally,
and
the
only
difference
between
build
dev
and
build
prod
is
build.
Prod
will
include
minified
versions
of
the
minified
version
of
phaser,
which
is
like
like
the
unminified
version
of
phaser,
is
huge,
is
giant
is
so
yeah,
so
it
you
know,
makes
it
makes
it
smaller.
It
also
adds
like
a
global,
like
environment
variable
for
prod.
G
So
if
you
want
to
switch
on
stuff
in
the
code,
if
it's
prod
you
can
you
can
reference
that,
but
other
than
that,
oh
and
then
the
other
thing
is
the
prod.
Build,
will
include
source
maps.
So
when
you,
when
you're
needing
to
debug
something
in
prod,
even
though
like
without
a
source
map,
you
wouldn't
be
able
to
debug
it
because
everything's
just
like
c
c
dot,
one
two,
you
know
it's
like
you
can't
everything's
obfuscated
right,
but
the
source
map
lets
you
lets
you
debug
stuff,
even
if
it's
minified
it's
kind
of
weird.
G
What
would
you
like,
our
node
builder,
the
the
s2i
node
builder,
I
mean.
A
G
It
does
have
so
the
node,
the
the
seo
of
the
node
builder,
will
run
a
npm
build
command
and
whatever
you
put
in
there,
it
will
do
that.
E
A
B
B
So
can
you
have
gulp
as
a
dependency
in
the
package.
G
And
then
it's
installed
yeah.
If
you
do
an
npm
install
like,
and
I
think
the
s2i
will
do,
an
npm
install,
it
will
be
there.
The
question
is,
the
question
is
is
like
when
it
when,
if,
like
the
difference
between
the
building
and
the
running
like
it's
going
to
build
it's
going
to
output
the
stuff
to
a
disk
directory
which
is
static,
html
and
javascript
files
that
doesn't
need
to
run
under
node.js,
it
just
needs
to
run
under
apache
or
something
so
we
could.
C
A
A
So
if
we
look
at
the
node
script
for
the
build
the
s2i
image,
so
for
those
who,
who
don't
understand
some
of
these
acronyms
so
source
to
image,
is
a
feature
that
open
shift
takes
advantage
of
to
build
container
images
directly
from
source
code.
So,
instead
of
having
to
use
the
docker
file,
you
can
basically
just
point
it
at
your
gate,
repo
and
so
right.
Now,
I'm
looking
at
red
hat
software
collections
provides
a
source
to
image
container
for
node.js
and
the
build
process
that
gets
invoked
is.
Is
this
a
symbol
script?
A
And
so
I'm
looking
in
the
assemble
script,
to
see
what
happens
so
we
move
the
source.
We
do
some
permission,
z,
stuff.
We
do
some
npm
configure
stuff
if
it's
dev
mode,
we
set
that
to
false
if
node
end
is
defined,
we
set
node
end.
If
it's
production,
we
do
an
npm
install.
Otherwise
we
do
node
and
dev
npm
install
and
then
npm
run
build
so
jared.
If
we
changed
our
npm
tasks
to
make
the
default
behavior
of
build.
Do
the
gulpy
stuff.
G
G
G
A
G
It's
okay,
yeah!
It's
all
right!
So
all
I
really
need
to
do
is
make
a
new
build
target
in
the
npm
which
will
do
an
npm
run,
build
prod.
G
I
think
that's
what
we
want,
because
build
prod
will
run
the
gold
build
production.
A
Target
so
right
and
we
do
and
and
look
if
I
remember
correctly,
the
oh
man,
I
lost
my
browser
window,
so
many
browser
windows,
yeah
it'll-
do
an
npm
install
prior
to
if
it's
then
otherwise,
actually
so
we're
gonna
act.
So
here's
the
here's
the
caveat
right.
If
the
node
environment
is
not
production,
it
will
do
an
npm
install.
A
G
A
B
Yeah-
and
I
think
the
easiest
way
to
do
that
is
in
the
s2i
environment
file,
yes,
yep
and
just
like
the
s2i
slash
environment,
environment
file,
like
same
as
with
the
assemble
there's,
an
sy
that
environment
that
you
can
use.
A
B
B
Yeah,
like
the
the
the
dot
sy
slash
environment,
if
it
still
works
that
it's
used
to
work
like
that,
so
just
check
the
script
and
and
and
see
if
it
loads
a
file
if
it
does
a
source
on
the
environment
file
like.
G
B
B
Yeah,
but
does
it
say
no
okay.
A
Well,
not
really
the
documentation,
but
the
the
script
that
invokes
the
the
assemble.
B
A
B
B
G
G
A
A
I'm
looking
at
master,
which
clearly
is
never
going
to
work:
gulp,
hey,
s2i,
okay,
so
now
jafar,
I'm
assuming
we
go
to
pipeline,
create
pipeline.
No,
you
said,
go
to
add
from
source
from.
A
A
A
D
A
Builder
image
it
picked
node,
oh
node,
14.,
fancy.
A
Srt
game
server
nope,
it
is
the
srt
game,
clients,
web
client,
srt,
web
client
resources
deployment.
Add
a
pipeline
create
a
route.
Yes,
we
definitely
want
a
route,
but
we
need
to
okay,
we're
probably
going
to
have
the
same
issue
with
needing
to
enable.
B
B
A
Well
so
jafar,
once
the
build
is
theoretically
complete,
so
the
default
pipeline
is
not
going
to
be
particularly
useful
right,
but
we
couldn't.
We
take
the
output
of
the
node,
build
and
then
shove
that
into
the
pvc
for
the
pipeline
and
then
have
another
task
that
builds
an
httpd
image
and
just
copies
the
junk
from
the
from.
B
The
yeah
yeah
yeah
correct,
so
you
could
use
another
step
as
an
s2i
http
builder
that
points
to
the
to
the
this
folder
in
the
workspace.
B
A
Know
that's
doing
it's
doing
a
docker
build
anyway.
It
looks
like
this
is
weird,
so.
G
The
the
node
s2i
will,
at
the
end,
run
npm
start.
We
could
just
make
the
npm
start
just
start
the
the
nodes,
http
server
and
just
run
it
straight
into
one
image.
G
F
G
Http
server,
but
but
for
this
I
think
it's
fine.
We
can
just
run
it
straight
out
of
node.
B
G
Yeah,
yes,
yeah,
the
the
npm
start
could
just
like
start,
express
or
or
start
nodes
in.
G
Yeah,
I
can
do
that
and
I
didn't
notice
when
you
were
building
this
when
you
were
creating
this
app.
Did
you
point
it
at
the
gulp
branch.
D
A
Yeah,
so
it
clearly,
it
clearly
did
the
npm
install
here,
because
it
was
barfing
about
stuff
that
it
did.
G
A
Well,
you
can
see
where,
where
it
ran
as
to
I
assemble.
A
So
it
said
installing
application
source
right.
We
see
that
in
the
log
installing
application
source
and
then
we
see
building
your
node
application
from
source.
So
if
we
scroll
down,
we
see
building
your
node
application
from
source.
So
somehow,
oh.
A
Yeah
so
it
looks
like
we
also,
it
says:
if
noted
is
not
set
by
the
user,
then
nodem
is
determined
by
whether
the
container
is
run
in
development
mode.
So,
if
note
end
is
set
otherwise
export,
but
this
is
the
dumbest
thing
I've
seen
so
you
have
not
only
do
you
have
to
set
node
end
view.
You
also
have
to
set
dev
mode
yeah,
because.
B
So
I
think
node
m
is
d.
E
v
is
def
like.
A
B
It
needs
to
be
like
the
export
does.
Actually
I
was
I
didn't
remember
if
it
was
dev
or
development,
but
we
see
the
export
value
there.
A
A
So
if
even
if
we
didn't
set
dev
mode,
this
is
like
the
weirdest
thing.
If
we
set
node
nv
equals
anything,
it
will
do
all
the
other
stuff,
so
we
actually
didn't
even
need
to
set
dev
mode.
Like
I
do,
I
don't
understand
whoever
wrote
this,
I
I
I'm
sorry,
I
don't
understand
what
you
were
thinking,
but
this
is
just
the
I
don't
understand
here,
set
dev
mode
to
false
by
default,
export,
dev
mode.
False
then,
if
note
end
exists,
if
dead
mode
was
true,
then
set
node
end
to
development.
A
Why
not
just
honor
node
end
in
the
first
place
like
so
so
I
guess
you
can
leave
dev
mode
equals
true.
A
B
What
do
you
mean
like
when
you
commit,
and
in
previous
yeah
yeah
yeah,
you
can
add
the
trigger?
Where
do
I
do
that?
I
think
you
it
should
have
created
one
by
default,
but
let's
check
so
go
to
the
pipeline.
Srt
web
client.
B
So
yeah
go
to
edit
triggers.
E
B
B
A
Yeah,
I
don't
want
to
do
that.
I
mean
I
guess
I
can
do
it,
but.
B
B
It
yeah
yeah.
B
A
D
A
A
B
G
Okay,
okay,
I
mean
I,
I
did
just
push
that
change
for
the
note
end
equals
that.
B
So
did
you
change
anything
to
make
to
have
the
gulp
stuff
working.
G
B
And
actually
you
can
there's
a
nice.
I
think.
G
B
You
can
use
also,
which
is
in
the
assemble.
You
have
pre,
assemble
and
post
assemble
stuff
that
you
can
do
also
like.
If
you
don't
want
to
to
to
copy
the
overall
assembled
file
there.
There
are
hooks
that
you
can
use
to
do
stuff
before
or
after,
and
then
just
call
the
assemble
script
wherever
you
want.
D
D
G
G
Actually,
I
think
it
will
go
into
that
first,
one,
if
noted,
is
not
equal
to
production.
It
just
says
npm
install
so
and
that's
so
that
is
we
actually.
G
G
So
it
should
be
no
done
equals
production.
G
A
G
This
is
so
weird
like
dev
mode.
Can
you
what
is
the
what
it
will
change?
If
I,
if
it's
in
dev
mode,
does
it
change
anything
nothing?
I
guess
that
mode
doesn't
really
come
into
play
after
that?
G
A
G
A
B
F
G
A
G
A
E
B
Gonna
do
an
node
run
then.
A
B
Also,
weird,
and
actually
my
my
next
tactile
show-
is
going
to
be
exactly
on
this
topic
like
explaining
what
exactly
happened.
B
So,
basically,
you
have
stuff
that
defines
what
parameters
gets
extracted
from
the
payload
to
be
sent
to
run
the
pipeline
run
and
that's
what
we're
going
to
explain.
G
F
I'm
sitting
over
here
writing
mouse
code,
mouse
code
well
tap
and
click
and
stuff
for,
for
the
user
interface
be
able
to
direct
the
ship
around
to
translate
directional
controls
from
taps
or
whatever.
Oh.
G
G
A
A
G
B
A
F
B
B
G
B
G
Need
to
make
start,
I
need
to
think
of
like
the
best
way
of
starting
up
an
http
server,
either
through
a
command
in
in
npm.
G
Okay,
that's
a
server
yeah
yeah,
but
it's
gonna
run
on
a
random
port.
B
A
G
A
G
Gulp
surf
yep
yeah,
but
the
my
question
is:
is
it's
gonna
start
it
on
a
weird?
I
think
it's
gonna
start
on
port
three:
zero,
zero.
Two.
G
Okay,
so
let
me
let
me
change
the
package
json
to
make
npm
start
just
to
run
deserve.
That's
all
we
really
need
so.
A
We're
changing
run
but
we're
changing
it
in
our
repo.
We
don't
have
to
do
anything
to
the
existing
script.
A
B
B
A
A
A
B
A
D
A
A
G
G
File
yeah,
it's
index.html
now
in
the
disk
in
the
disk,
folder.
B
G
Let
me
see
this
works,
hey
that
works.
Okay,
I
have.
I
have.
I
have
a
very
kind
of
hacky
idea
which
all
right
man
committed,
okay,
all
right,
so
what
I
will
actually
have
to
do
is,
but
I
have
to
do
one
other
thing
before
I
do
this,
which
is
a
local
dependency
for
http
hold
on.
G
G
E
G
Is
oh,
there
will
be
a
dis
okay,
this
actually
still
might
work.
Okay,
this
might
work.
A
G
G
G
Is
going
to
use
by
default
that
service
runs
on
808.
8081
is
the
default
we'll
see?
Hopefully,
it'll
tell
us
what
it
is,
and
I
wonder
if
it
actually
yeah.
I
think
it's
just
8081
by
default.
A
So
I
can
on
npm,
js
has
node
http
server,
but
it
doesn't
have
http
server.
G
A
C
A
G
B
Server's
working
because
it's
loading,
apps
right.
B
So
eric,
I
think
now
you
need
to
change
the
like
the
broker
endpoint
in
the
config.js
file.
D
B
A
All
righty:
well,
I
guess
we'll
call
it
a
day,
then
stop
my
screen
share
here.
So
thanks
much
to
our
special
guest
jafar
for
helping
us
lose
our
sanity
with
node.js
and
pipelines
and
and
building
c,
plus
plus
applications
with
om
killer,
I
mean
with
openshift
but
yeah.
That's
it
for
this
month,
and
so
maybe
next
month
we
will
go
back
to
doing
more
sort
of
actual
game
dev
stuff.
A
What
I
was
hoping
to
get
to
today
was
to
actually
get
the
web
client
running
enough
so
that
we
could
share
it
to
have
a
bunch
of
people,
try
to
play
it
since
it'd
be
running
on
openshift.
At
that
point
we
could
all
interact
with
it,
but
we'll
have
to
save
that
for
next
month.
Yeah
we
do
a
load
test
of
like
I
will
all
of
our.