►
From YouTube: Hands-On GitLab CI Workshop - AMER
Description
Watch the playback for a hands-on CI workshop, in which you will learn how to build simple GitLab pipelines and work up to more advanced pipeline structures and workflows, including security scanning and compliance enforcement.
A
A
All
right,
let's
go
ahead
and
get
started
today.
I
just
need
to
take
care
of
a
couple
housekeeping
things
real
quickly.
Here
we
have
both
a
chat
today
and
we
have
a
question
and
answer
functionality.
A
Please
use
the
chat
for
commentary,
but
if
you
have
a
question,
we're
actually
tracking
those
in
the
question
and
answer
and
I've
got
two
of
my
peers.
In
the
session
today,
Chris
geithart
Rasheed
babatunde
they're,
both
customer
success,
Engineers
like
I,
am
and
they're
ready
to
help
answer
questions.
So
please
do
put
questions
into
the
Q
a
and
if
you
have
just
a
comment,
please
put
that
in
the
chat.
A
Roberto,
we
can
hang
out
for
just
another
minute
here,
but
we're
going
to
need
to
get
going
pretty
quickly.
A
Great
Roberto,
just
an
FYI,
my
peers
are
ready
to
start
pacing
instant
notes
Here
into
our
chat.
So
if,
if
your
people
come
in
late,
we
should
be
able
to
catch
them
up,
and
just
let
me
make
a
quick
note
here.
A
A
Okay,
all
right
today
we're
going
to
be
setting
up
a
workshop
so
that
you'll
get
a
actual
environment
of
your
own
by
the
way
and
I
think
you
already
know
this,
but
you'll
be
getting
an
environment
of
your
own
at
gitlab.com
to
go
ahead
and
set
up
and
do
the
follow
through
the
instructions
that
we're
going
to
be
going
through
today
to
introduce
yourselves
to
gitlab,
CI
and
there's
some
optional
work
too.
Just
for
awareness,
we
typically
provision
these
Workshop
subgroups
that
you're
going
to
get
provisioned
to
you
for
two
days.
A
This
particular
one
we
provisioned
for
four
days
because
there's
some
optional
content
that
we're
hoping
that
you'll
get
a
chance
to
go
through
you're,
going
to
get
an
ultimate
subgroup
under
our
git
lab
learning,
Labs
namespace
at
gitlab.com,
so
Let's,
let's
go
ahead
and
just
start
working
through
the
instructions
here
and
by
the
way
you're
going
to
need
to
have
a
gitlab.com
user.
A
So
if
you
haven't
done
that
yet,
if
you
haven't
registered
at
gitlab.com,
please
take
the
time
to
go
there
and
register
real
quickly
so
that
we
have
a
user.
We
won't
be
able
to
provision
you
a
subgroup
there
and
by
the
way
it
to
reiterate
this
is
an
ultimate
subgroup,
so
you're
going
to
get
gitlab's
ultimate
or
top
level
subscription
subgroup
that
you
can
use
to
play
around
and
just
kind
of
try.
Some
things
out
so
I
set
that
to
the
host
panelists.
Sorry.
A
So
Jim,
if
it's
from
a
private
instance
of
gitlab,
no,
it
won't
work.
You'll
need
to
register
gitlab.com,
follow
the
follow
the
URL
that
I
put
into
chat.
A
A
A
A
If
you
need
to
do
it,
we're
not
going
to
walk
through
actually
doing
that
and
Jennifer
the
recordings
Workshop
will
be
provided
we're
going
to
be
sending
out
an
email
tomorrow
that
will
have
a
link
to
this
deck
and
it'll
also
have
a
link
to
a
recording
and
it'll
also
have
some
links
to
some
optional
material
that
we're
hoping
you'll
find
the
time
to
go
through.
A
All
right
time
to
dive
in
so
today
this
is
our.
This
is
our
scenario
today,
you're
officially
part
of
a
brand
new
startup,
that's
creating
a
public
leader
board
for
the
hit
new
racing
game,
Tanuki
racing
your
company
has
recently
swept
over
to
using
gitlab
for
CI
and
CD
and
just
test
you
with
learning
about
the
different
pipeline
capabilities.
A
Now,
don't
miss
out
on
the
next
steps.
As
a
group,
you
request
is
going
to
have
access
to
all
of
our
new
AI
features
for
the
next
four
days
and
if
you
want
to
dive
into
those
and
play
with
them
a
little
bit,
you're
welcome
to
do
it,
but
you'll
need
to
go
to
getlabdemo.com
and
let
me
paste
in
a
couple
things
in
chat.
A
Oh
good
Chris,
you
already
did
it
super.
Thank
you
all
right.
So
you're
gonna
need
to
go
to
getlabdamil.com
and
you
don't
need
to
create
an
account
here.
You
can
just
redeem
the
invitation
code,
you're
going
to
click
on
the
redeem
invitation
code
when
you
get
there
and
you're
going
to
put
the
code
that
I've
got
pasted
in
there
and
that
Chris
put
into
our
chat.
A
So
let's
go
ahead
and
proceed
on
from
here
then
you're
going
to
get
this,
and
this
is
where
you
can
actually
put
in
the
invitation
code.
Get
it
paste
it
in
there.
You
know
copy
it
paste
it
in
there,
then
you're
going
to
need
to
know
your
username
and
it's
real
important
that
you
get
this
from
gitlive.com,
not
from
a
private
instance.
A
So
if
you
go
to
gitlab.com
click
on
your
Avatar,
whatever
that
might
be
you'll,
be
able
to
see
your
username
just
below
that
now
we
need
everything
except
for
the
symbol.
Don't
include
yet
symbol!
A
You
want
to
catch
capture,
everything
that
follows
yet
symbol,
you're
going
to
put
that
into
the
username
here
and
you're,
going
to
click
on
provision,
training,
environment
and
that's
going
to
create
an
ultimate
subgroup
under
gitlab
learn
Labs
that
you're
going
to
be
the
owner
of,
but
then
you're
going
to
come
to
a
screen
that
looks
like
this
and
real
important
here
on
this
particular
screen.
A
You're
going
to
want
to
grab
that
gitlab
URL
in
either
bookmark
it
or
add
it
to
a
notes
document
somewhere
that
you're
taking
is
as
we
go
along
and
then
you
can
click
on
my
group
to
go
to
your
group
and
you'll
end
up
with
a
group
that
looks
like
this
I
have
a
different
group
ID,
the
part.
That's
my
test
group
Dash!
A
A
You
can
see
that
I'm
largely
already
there
so
and
what
you
see
on
the
left
screen
by
the
way
is
the
for
the
project
that
we're
going
to
be
forking
today
and
I'm,
using
a
split
train
split
screen,
because
we're
going
to
have
to
keep
that
that
source
project
open
and
looking
at
the
issues
where
our
instructions
are
going
to
be
and
we're
going
to
be
working
in
the
right
screen.
A
So
hopefully,
you've
got
a
monitor
with
you
know,
that's
big
enough
that
you
can
Prim
you're
going
to
have
to
go
and
actually
sign
up
at
gitlab.com
Chris.
Can
you
post
in
paste
in
that
URL
again
to
the
gitlab
user,
sign
up?
Thank
you
so
Prime.
If
you'll
go
there
and
sign
up,
create
a
user
there,
you'll
be
able
to
follow
through
on
this
all
right.
A
This
is
where
you're
going
to
put
in
your
gitlab
username
again
without
the
foreign
symbol,
you
get
a
click
on
provision,
training,
environment
and
you're
going
to
get
this
page.
Now
again,
you
want
to
capture
this
in
either
bookmark
it
or
put
it
into
a
notes
document
somewhere,
so
you
can
get
back
to
it
quickly
and
easily
and
then,
if
you
click
on
my
group,
it's
going
to
take
you
right
to
your
group.
A
If
it
is
it,
there
might
be
a
delay
based
on
that
I
haven't
gone
through
that
process
in
quite
a
few
years
now.
So
forgive
me
if
that's
the
case.
A
Joe,
if
you
click,
if
you
go
to
getlab.com
and
click
on
your
user
Avatar
at
the
top
you'll
see
what
your
username
is
when
you're
logged
in
and
you'll,
you
need
to
capture
everything.
That's
after
the
at
symbol
that
username
so
you're
going
to
end
up
with
a
group
that
looks
like
this
again,
it's
going
to
have
a
different.
It's
going
to
have
a
different
hash
up
here
at
the
top.
That's
unique
to
you!
A
Okay,
it
should
be
at
the
top
top
left
top
right,
depending
on
whether
or
not
using
the
new
navigation
or
the
old
one.
A
So
I'll
tell
you
what
let's
walk
through
that
thing
quickly.
A
A
Right
up
here
at
the
top,
and
if
you
click
on
that,
you
can
see
that
my
username
is
right
here,
underneath
now,
if
I
click
on
my
username,
it's
going
to
take
me
to
my
profile
page.
So
just
be
aware
of
that,
and
you
can
change
your
navigation
from
here
and
you
can
see
the
navigation.
This
is
the
old
navigation.
Now.
So,
if
you're,
seeing
this
again,
you
click
on
your
avatar.
You
can
see
your
username
underneath
I'm,
going
to
change
back
to
the
new
navigation.
A
A
You
might
have
put
in
the
symbol
from
your
username
and
by
the
way
you
can
go
through
this
one
more
time
you
go
back
to
gitlab
demo.com,
put
in
the
invitation
code
that
we've
shared
with
you,
not
the
one
that
shows
at
the
top
in
the
in
the
image
there,
but
the
one
that's
down
at
the
bottom,
put
in
the
invitation
code
put
in
your
username
again
in
provision
training
environment
now,
just
for
awareness,
if
you
by
chance,
lose
track
of
your
gitlab
URL,
and
you
can't
find
your
way
back
there.
A
If
you
come
back
to
gitlab
demo.com
and
you
go
through
this
process
again,
it's
not
going
to
provision
a
new
Ultimate
subgroup
for
you,
it's
going
to
be
exactly
the
same
one.
So
you'll
end
up
going
to
exactly
the
same
one
again.
It'll
just
show
it
to
you
again,
so
it's
a
good
way
to
get
back
there.
If
you
need
to
and
then
again
you
should
be
at
a
group
that
looks
a
lot
like
this.
A
So
we're
going
to
talk
about
setting
up
this
real
simple
pipeline.
This
is
basic
stuff,
but
there's
some
good
good
information
in
here.
A
So
before
pulling
fully
pushing
out
the
application,
your
team
wants
to
test
a
few
different
types
of
pipelines
to
see
what
fits
their
needs
best.
The
first
task
your
product
manager
gives
you
is
to
create
a
simple
pipeline
that
builds
and
tests
the
racing
application
now
you're
going
to
need
to
navigate
to
this
project
and
Chris.
Would
you
mind
Chris
or
Rasheed?
Would
you
mind
putting
in
that
project
URL,
please
into
our
chat,
begin
to
navigate
to
this
project
and
you're
going
to
go
to
the
issues
from
the
left
menu
and
in
separate
tab.
A
So
you
can
keep
that
open.
Thank
you,
Chris!
Oh
that's!
Taking
you
right
to
new
issues
so
again,
I'm
going
to
be
working
in
split
screen
style,
but
hopefully
you've
got
a
larger
Monitor
and
you
can
kind
of
spread
things
around
or
if
you
just
want
to
keep
them
in
separate
tabs.
You
can
absolutely
do
that,
but
we
need
to
keep
our
source
project
on
the
left
in
our
Fork
project
on
the
right
so
that
we
can
follow
through
with
the
instructions
that
are
in
the
source
project
when
you
Fork
this
project.
A
By
the
way,
it
will
not
bring
the
issues
with
it,
it
just
brings
the
code,
so
the
fork
project
and
the
source
project
source
project
will
have
our
instructions
in
it
before
project.
Is
we're
going
to
be
doing
our
work
at
so
we're
going
to
go
to
this
project
that
we're
going
to
afford
and
we're
going
to
click
on
Fork
at
the
top?
A
A
So
as
soon
as
you
Fork
this
project,
we
definitely
want
to
remove
the
14
relationship,
because
gitlab
keeps
these
two
projects
related
until
you
remove
that
forking
relationship.
So
this
is
under
the
settings
for
your
project
after
you
Fork
it
you'll
go
to
settings
in
general
and
then
scroll
down
and
expand
the
advanced
section
and
then
find
and
click
on,
remove
Fork
relationship.
A
A
All
jobs
in
this
stage
must
complete
successfully
before
proceeding
to
the
next
stage,
so
the
build
has
got
to
finish
before
the
test
is
going
to
start
and
then
both
test
jobs
have
got
to
finish
between
the
deploys
before
the
deploy
is
going
to
start
and
just
for
awareness,
jobs
that
are
in
a
single
stage
have
the
ability
to
run
parallel
and
there's
ways
to
subvert
that
ordering
that
we're
going
to
get
into
today.
A
So
job
statements,
what
the
job
is
going
to
be
accomplishing
is
put
together
in
the
script
section,
and
then
you
have
a
before
script,
which
typically
is
being
used
to
pull
in
libraries
or
something
along
those
lines
or
set
up
your
environment.
However,
if
you're
pulling
in
libraries,
gitlab
is
optimized
for
a
workflow
that
will
allow
you
to
create
custom
doctors.
A
A
A
If
the
after
script
has
an
error
in
it
of
some
kind
and
by
the
way
anything
in
the
script,
you
can
see
that
there's
individual
commands,
Happening
Here
in
the
scripts
section
npm
install
npm,
run
deploy
if
any
of
those
commands
returns
an
exit
code
other
than
xero,
which
just
means
they
were
successful.
If
they
have
an
error,
that's
going
to
fail
the
job
and
in
the
before
script.
The
same
thing
is
true,
so
in
the
before
script,
if
any
of
those
individual
commands
return
an
xcode
other
than
zero,
that's
going
to
fail!
A
So
get
lab
Runners,
they
read
all
the
jobs
you
defined
in
a
pipeline.
They
can
be
Tagged,
so
you
can
build
specific
Runners
if
you
want
to.
If
you
want
to
create
a
specialized
Runner
with
all
your
libraries
pre-loaded,
maybe
it's
a
shell
Runner
or
something
along
those
lines.
That's
got
access
to
some
extraordinary
things.
You
can.
A
You
can
create
a
tag
Runner
and
then
you
can
actually
associate
that
tag
with
the
runner
in
your
in
your
code
for
your
jobs
and
then
those
jobs
will
run
on
that
Runner,
specifically
job
duration
can
take.
You
know
whatever
time
it
takes,
but
the
jobs
are
typically
picked
up
within
about
five
seconds.
As
long
as
there's
Runners
available,
the
runners
are
frequently
checking
in
and
trying
to
see
if
there's
something
in
the
runner
queue
that
they
can
pick
up.
A
Now
we're
gonna
have
to
pick
a
namespace
put
it
into
and
I
have
access
to
so
many,
it's
just
ridiculous,
so
I'm
going
to
go
ahead
and
paste
in
that
particular
cash.
That's
in
my
test
group
so
that
I
can
get
to
this
quickly
and
then
you
can
go
ahead
and
Fork
the
project
you
can
get.
It
leave
everything
else.
Just
exactly
like
it
is.
A
This
is
going
to
take
just
a
minute,
or
so
it's
not
going
to
take
real
long,
but
it'll
take
a
minute
or
so
forget
that
to
get
the
new
project
set
up
for
you,
you
know
real
important
as
our
instructions
gave
us.
We
want
to
go
to
settings
General
and
then
scroll
down
to
Advanced
and
expand
that
out,
and
then
we
want
to
remove
the
fork
relationship.
A
A
If
you
want
to
play
around
with
some
merge
requests
or
anything
like
that,
there's
going
to
be
some
confusion,
you
could
end
up
submitting
merge
requests
back
to
the
original
project,
so
make
sure
to
take
the
time
to
do
that,
just
to
remove
that
coupling.
A
This
is
telling
us
how
to
Fork
here,
which
we
just
went
through,
so
we're
going
to
create
a
simple
pipeline
and
of
course
you
can
click
the
project
overview
in
the
top
left
of
the
screen
which,
by
the
way,
it's
not
available
here
because
I'm
not
using
an
open
enough
window.
If
I
slide
the
window
out,
it'll
tend
to
stay
open,
but
I'm
not
going
to
do
that.
Well,
I'm,
going
to
do
it
just
a
little
bit
here.
A
You
can
just
click
on
the
project
name
and
it'll.
Go
back
to
the
main
page
for
the
project
notice
that
we
have
a
simple
pipeline
already
defined.
Let's
go
ahead
and
take
a
quick
look
at
that.
It's
got
a
build
and
test
stage.
It's
got
an
image
specified
and
it
you
know
the
cash
is
a
global
setting
and
then
we've
got
a
build
app
job
and
we've
got
a
unit
test
job
and
also
notice
that
they're
delineating
their
stages.
A
A
Now,
in
this
particular
case,
in
the
unit
test
job,
we
want
to
use
the
after
script
keyword
to
Echo
out
that
the
build
was
completed
now.
This
is
kind
of
an
interesting
use
of
after
script,
but
it's
just
to
demonstrate
that
that
it
is
going
to
do
what
we
think
it's
going
to
do.
A
And
then
we
just
want
to
make
sure
our
spacing
is
Right
indent
spacing
for
gitlab's
yml
files
is
two
spaces
per
indent
and
I
can
see
that
everything
else
looks
good
there
after
I
adjust
so
now
our
unit
job.
Should
our
unit
test
should
look
like
this,
which
it
does
now
we're
going
to
go
ahead
and
click
on
Commit
changes.
A
If
you
have
a
problem
with
the
yml,
it's
going
to
tell
you
that
right
at
the
top,
where
you
see
pipeline
syntax,
is
correct,
it's
going
to
tell
you
that
there
was
a
problem
with
the
syntax
but
notice
it's
also
starting
a
pipeline
up.
For
me.
Let's
take
a
quick,
quick
look
at
the
pipeline
and
you
can
see
the
build
app
is
running
right
now,
but
again,
the
unit
test
can't
run
until
the
build
app
is
done.
Stages
are
sequential
in
serial
in
nature,.
A
If
you
want
to
to
see
what
it's
doing
now,
the
unit
test
is
going
to
take
a
little
while
to
run
because
Joshua
the
instructions
to
the
left
are
in
the
source
project
that
you've
worked
from,
which
we're
recommending
you
keep
open
in
a
separate
window,
so
the
project
that
was
sourced
and
Chris
put
in
the
URL
to
them.
A
Thank
you.
Chris
I
appreciate
that.
So
you
have
a
way
to
get
there
very
quickly,
but
you
just
want
to
keep
this
open
in
a
separate
window,
so
you
can
go
through
your
instructions
that
you
need
to.
A
A
So
next
we're
going
to
talk
about
Job
execution
order
and
directed
to
cyclic
graphs,
which
I'm
just
going
to
call
dags
from
now
on.
But
that
means
it's
directed
a
cyclic
graph.
So
we're
at
this
point
in
our
agenda
today.
A
But
after
showing
off
your
simple
pipeline
to
the
team,
they
loved
it
but
they're
wondering
if
you
could
speed
up
the
process
a
little
bit.
You
decide
you're
going
to
show
off
your
skills
and
show
how
you
create
a
pipeline
with
different
execution
orders,
as
well
as
the
large
directed
acyclic
graph,
to
show
what
is
really
possible.
A
Now
execution
order
default,
Behavior,
again,
jobs
in
each
stage
are
going
to
run
sequentially
after
the
previous
stage
runs.
That's
just
a
default
way
to
get
lab
runs,
but
you
can
subvert
that
with
some
settings
where
we're
going
to
be
going
through.
A
So
you
can
adjust
the
execution
order
from
pipeline
efficiency,
but
you
but
notice
that
during
pipeline
execute
execution,
these
great
jobs
here
with
the
data
and
mean
that
they're
waiting
for
dependent
jobs
to
complete
so
job
in
the
test
stage
executed.
After
all,
jobs
in
the
build
stage
are
completed,
but
we
want
to
add
the
code
quality
testing
and
it
does
not
need
the
results
built
it
can
execute
in
parallel.
A
A
Now,
we
can
do
this
with
the
needs
keyword
and
by
the
way
this
is
job
code
up
here
for
code
quality.
We
can
do
this
with
the
needs,
keyword
and
needs
with
the
two
brackets
in
it
means
empty
array.
Needs
is
ordinarily,
an
array.
Then
we
can
delineate
jobs
that
were
dependent
upon
and
if
we
don't
need
any
jobs
at
all,
then
this
this
job
is
going
to
be
eligible
to
run
immediately.
And
what
we'll
see
is
that,
when
we're
building
the
app
code,
quality
app
is
going
to
fire
up.
At
the
same
time,.
A
So
needs
can
be
very
Advanced,
and
this
is
how
we
start
to
get
into
it,
directed
acyclic
graphs,
which
are
literally
what
you're,
seeing
in
the
bottom
left
there
we're
looking
at
the
dependency
trains,
and
so,
in
this
particular
case
we're
putting
all
these
jobs
in
and
we're
about
to
do
this
by
the
way.
A
It's
actually
possible
to
build
stages,
pipelines
now.
I,
don't
like
to
do
this
I
like
to
keep
my
jobs
delineated
in
stages
that
you
know
clearly
describe
What
that
particular
job
is
going
to
be
doing
like
tests,
but
you
can
actually
build
the
stages
pipeline.
If
you
want
to
do
it,
you'd
have
to
make
sure
that
all
jobs
had
their
needs,
that
they
needed
and
then
they'll
be
able
to
run
without
any
stages
being
put
into
your
pipeline.
A
But
again,
it's
not
something
I
like
to
do,
but
it
does
putting
needs
into
all
your
jobs
does
make
your
pipeline
extraordinarily
efficient.
It's
able
to
just
each
job
in
there
is,
it
knows
as
soon
as
it
can
run
and
it
becomes
operational
and
that
makes
your
pipelines
use
less
time.
So
it's
definitely
worth
looking
into
and
spending
a
little
time
on.
A
With
the
execution
order
index
rob
you
don't
have
to
create
a
runner
we've
already
gotten
provisioned
for
the
group
that
you're
going
to
get
today
so
no
need
to
create
a
runner,
but
that's
a
very
good
topic
for
you
to
learn
about
if
you're
going
to
host
your
own
git
lab
and
you're
not
going
to
be
at
gitlab.com
using
our
shared
runners.
So
that's
definitely
something
we're
diving
into
at
some
point.
But
it's
out
of
scope
for
the
discussion
today,
because
the
runner
is
very
provisioned
and
ready
to
go.
A
A
A
A
A
A
A
A
Let
me
go
ahead
and
oh,
it
just
started
running
for
the
cow.
A
Okay,
just
took
the
runners
a
while
to
check
in
but
notice
that
all
of
our
jobs
code,
quality
is
already
done
and
unit
test
is
running
current
with
build
apps.
So
now,
using
the
needs
keyword,
we've
been
able
to
subvert
the
the
order
of
operations
that
would
be
normally
assigned
here,
foreign.
So
now
we're
going
to
set
up
a
directive
cyclic
graph.
So
you
can
just
understand
what
that
looks
like
we're
going
to
copy
all
this
code.
A
A
A
If
you
didn't
do
that,
and
it's
in
another
space,
if
you
need
to
go
back
and
work
it
again
and
move
it
into
that
special
test
group
that
we
set
up
for
you
today,
that
already
has
runners
provisioned
so
again,
characteristic
graph
just
gives
us
a
way
to
you
know,
see
the
dependency
trees
for
ourselves.
A
Let's
go
ahead
and
Commit
This.
We
have
to
go
back
to
edit
to
do
that.
A
And
they,
let
me
go
through
that
pipelines
direct
instead
of
waiting
for
it
to
tell
me
what
started
there.
Oh
I
see
the
same
things
happening
again
all
right,
there's
something
going
on
with
Runners,
again
I'll
dive
into
this
after
the
meeting
today
and
see
if
we
can
get
it
figured
out
real,
quick
just
so
that
you
all
can
proceed.
But
what
I
want
you
to
notice
here
is:
if
we
go
to
needs.
A
A
A
So,
as
you
come
back
to
the
team
and
show
them
your
new
pipeline,
you
notice
that
one
of
your
test
jobs
is
failing.
After
taking
a
look
into
the
job,
it's
a
term
that
you
don't
actually
need
to
enforce
it
passing,
but
still
want
to
see
the
results
which,
by
the
way
again
is
in
the
job
log.
So
when
you're
looking
at
that
pipeline,
if
you
click
on
an
individual
job,
it's
going
to
take
you
to
the
job
page,
where
you're
going
to
see
the
job
log.
A
So
in
this
particular
job,
it's
using
the
keyword,
allow
failure,
colon
true
and
so
that
keyword
in
a
job
means
that
that
job's
allowed
to
fail.
But
it's
going
to
show
you
that
it
failed,
but
it's
not
going
to
stop
the
pipeline,
and
you
can
see
that
over
here
in
our
unit
test.
A
So
when
is
the
job
created
in
a
pipeline
so
just
realize
the
job
defaults
are
right
on
success
and
allow
failure
equals
false.
So
if
you
use
the,
if
you
don't
use
these
keywords
at
all,
these
are
the
defaults
on
success.
Just
simply
means
as
long
as
every
job
brand
and
didn't
fail
before
me.
I'm
allowed
to
run
and
allow
failure.
A
A
So
evaluating
for
when
the
job
runs
in
this
particular
case,
we're
showing
you
a
rule
here,
it's
a
very
simple
test:
it's
if
the
pipeline
source
is
webbed
and
by
the
way
web
is
the
manual
pipelines
page.
So
if
you
go
to
the
pipelines
page
in
a
project
you're
going
to
have
a
run
pipeline
button,
you
can
click
on
and
that's
what
this
particular
web
sources
for
the
CI
pipeline
source.
A
A
So
if
statements
can
reference
a,
we
have
a
large
large
pack
of
predefined
variables
at
gitlab
that
that
you
can
lean
into
in
pipeline
CI
pipeline
source
is
one
of
the
big
ones
just
to
determine
where
it
came
from,
but
you
can
also
look
at
things
like
the
branch
name
and
whether
or
not
the
branch
that
you're
on
is
the
default
Branch
for
the
project.
Things
along
those
lines,
there's
there's
a
pretty
good
list.
A
So,
let's
talk
about
rule
syntax,
real
quickly,
rules
can
start
with.
If
and
they
can
incorporate
changes
and
exists.
Changes
just
means
it's
going
to
look
for
changes
in
a
single
file
or
in
files
listed
under
in
a
subdirectory
and
a
receptor
tree,
and
if
this
is
just
going
to
look
for
a
file
to
be
present
in
their
Repository
The
Operators
are
what
you
would
expect
to
see
in
programming.
Just
generally
equals
equals
is,
of
course
you
know
if
the
two
things
you're
trying
to
compare
are
the
same
thing
not
equals.
A
A
You
can
actually
scan
the
commit
message
that
the
developer
put
in
and
look
for
a
keyword,
and
if
that
keywords
there,
you
can
trigger
a
pipeline
form
if
you
want
to
and
then
dot
equals
and
not
till
D
is
of
course,
making
sure
that
something's
not
in
in
a
variable
that
you're
testing
against
and
then
the
end
and
the
or
operators.
Just
allow
you
to
combine
different
tests
right,
we
can
compare.
A
We
can
look
for
a
value
in
one
variable
on
the
left
and
then
we
could
put
an
end
in
and
then
we
can
put.
We
could
look
for
a
value
in
another
variable
on
the
right
and
then
those
both
have
to
be
true
for
the
rule
to
evaluate
to
true
and
then
the
or
operator
is
you
know
the
inverse
of
that
if
either
one
of
those
two
tests
is
true,
the
test
evaluates
the
true
one.
So
job
attributes
we
have
the
win
Clause.
A
We
have
allow
failure
and
start
in
now,
starting
as
a
special
use
case
that
if
you're
job
uses
a
when
delayed
clause
and
start
until
the
job
tells
git
lab
how
long
to
wait
before
starting
that
job,
and
it
could
be.
You
know
it's
it's
going
to
start
that
timer.
At
the
moment
the
child
becomes
eligible.
A
A
Quinn
always
just
means.
You
know
always
right.
If
my
role
of
value
is
the
truth
or
if
you
put
it
in
the
job
itself,
just
as
a
standalone
Clause,
it's
always
going
to
run
now
notice
that
this
is
not
when
on
success.
It
just
spreads
unconditionally.
So
if
something
fails
in
the
pipeline
that
job's
gonna
run
no
matter
what,
then
there's
a
wind
ever
and
that's
an
example
of
how
we
could
do
negative
matching
on
rules.
A
So
if
we
test
for
this
variable
being
a
certain
value
we
want
to
put
whenever
and
now
that
rule
is
going
to
keep
that
job
from
running,
then
there's
women
on
success,
which
just
means
as
long
as
all
the
jobs
that
are
previous
to
this
job,
have
completed
successfully.
That
jobs
now
eligible
to
learn
on
failure
is
a
special
use
case.
A
So
on
failures,
as
you
know
case
where
something's
failed
and
you
want
to
run
a
job,
that's
going
to
do
some
inspection
or
look
through
some
artifacts
or
whatever
you
need
to
do
to
try
to
figure
out
what
went
wrong
manual
is
also
a
special
use
case.
So
if
we
put
a
win,
Clause
of
manual
manual
is
going
to
present
a
little
play
button
in
our
Pipeline,
and
somebody
will
have
to
click
that
it'll
need
to
be
a
developer
or
higher
enroll
unless
they're
working
on
protected
branches.
A
A
So
when
is
the
job
not
creating
a
pipeline
and
by
the
way,
look
at
this
code
on
the
right
side,
you'll
notice
that
there's
two
win
Clause
two
ifs
notice
that
there's
dashes
each
Dash
is
an
independent
array
element
in
independent
rule,
so
the
one
at
the
bottom
is
just
as
simply
when
on
success,
which
just
means
you
know
always
run
this
as
long
as
everything
that
came
before
this
job
was
successful,
but
notice
that
the
two
above
it
FCA
pipeline
Source
equals
merger
Quest
event
this
particular
job.
A
It
should
not
run
in
that
circumstance
and
if
it's
a
scheduled
job,
it's
possible
to
schedule
pipelines
in
gitlab's
UI,
and
this
will
gives
you
a
way
to
identify
scheduled
pipelines
and
it
shouldn't
run
for
that
pipeline
either.
So
the
way
that
the
rules
work
in
gitlab
is
they
go
sequentially
from
top
to
bottom,
first
rule
that
matches
wins
and
it
won't
evaluate
any
of
the
other
ones.
After
that.
A
So
this
is
a
an
example
of
configuring
for
wind
manual
over
on
the
right.
You
can
see
the
deploy
jobs
got
a
play
button
in
it
and
that
allows
somebody
to
play
it
now.
The
play
button
will
be
available
for
users
who
are
developers
and
higher
for
a
standard
branch
and
then
on
a
protected
branch.
Of
course
they
have
to
be
somebody
allowed
to
merge,
or
somebody
allowed
to
push
and
then
again,
test
B
is
being
allowed
to
failure
allowed
to
fail
here
with
yellow
failure.
A
So
more
rules,
examples
if
we
have
multiple
rules,
notice
that
these
don't
have
wind
Clauses.
That
means
they
default
to
win
on
success.
A
A
A
So
this
is
two
examples
here
that
you
can
see
at
the
top.
These
are
negative
rules.
So
again,
if
the
CI
pipeline
source
is
a
merge
request
event,
we
don't
ever
want
that
pipeline
to
run
and
if
that
matches
that
that's
going
to
be
the
first
rule
that
matches
in
the
job
and
it's
not
going
to
evaluate
the
ones
that
follow
it,
so
FCI
pipeline
Source
equals
schedule
again.
A
That's
never
so
this
job
will
execute
any
pipeline
or
the
CI
populate
source
is
not
set
to
merge,
request
or
schedule,
and
then
the
win
on
success
tells
the
job
to
execute
assuming
previous
job
success.
So
this
is
our
default
rule
just
simply
win
on
success
without
a
test.
So
as
long
as
it
doesn't
match
either
one
of
these
two
rules
that
would
keep
this
job
from
being
included
in
the
pipeline.
Then
it's
going
to
run.
A
So
this
is
an
example
of
using
changes,
so
we're
testing
some
variable
right,
we're
making
sure
it
matches
some
string.
It
could
be
CI
pipeline
source
and
we're
looking
for
changes
in
the
docker
file
files
specifically
and
we're
also
looking
for
anything
that
might
have
changed
in
the
docker
scripts
directory
and
in
that
particular
case
now
notice
that
it's
a
win
manual.
So
now
this
is
going
to
be
a
manual
job
that
somebody's
going
to
have
to
click
on
so
to
conjoin.
A
If
changes
and
exist
Clauses
with
an
and
use
them
in
the
same
rule,
which
we
can
do
so
there's
nothing.
Stopping
us
from
putting
in
exist
clause
in
here
as
well
and
it'll
just
be
added
on
to
the
changes,
and
then,
if
you
know
this
variable
that
we're
testing
again,
maybe
it's
CI
pipeline
source
in
the
docker
file
or
any
file
of
Docker
scripts
is
changed
in
the
job
runs
manually.
A
So,
let's
talk
about
variables,
processing
order,
real
quickly
by
the
way
you're
going
to
be
getting
a
copy
of
these
slides
tomorrow
in
an
email.
So
this
is
a
good.
This
is
a
good
one
to
keep
somewhere.
As
a
you
know,
Cliff
node,
if
you
need
to
later
on
the
order
of
Precedence
for
variables,
is
this-
is
going
in
the
bottom.
I
have
got
the
lowest
precedence.
The
topic
got
the
highest
precedence
here,
so
predefined,
environment
variables.
A
You
know
these.
Can
these
can
be
something
that
get
loud.
Actually
they
are
they're
what
GitHub
creates
and
sets
up
automatically.
Then
you
have
deployment
variables
that
are
in
a
you
know,
potentially
in
a
deployment
job,
and
then
you
have
yellow
defined
Global
variables
and
you'll
be
able
to
find
job
level
variables.
So
you
can
Define
variables
that
are
Global
for
all
jobs
in
all
jobs
will
observe
them,
but
you
can
also
put
them
in
the
job
itself
that
specific
job
needs
to
have
a
variable.
A
Then
you
have
inherited
environment
variables,
instance
level,
variables
or
protected
variables.
So
you,
if
you're
on
a
self-hosted
instance
of
gitlab,
your
admins,
can
actually
create
variables
that
are
instance
wide.
They
have
a
low
priority
compared
to
group
level
variables
and
project
variables.
You
can
see
listed
just
above
it,
so
those
either
one
of
those
if
they're
the
same
name
variable
same
key.
It's
going
to
overwrite,
what's
coming
in
from
Below
and
then
CRF
CI
CD
pipeline
trigger
variables.
These
were
in
a
trigger
job.
A
A
A
First,
we
want
to
reset
our
existing
pipeline
from
the
previous
track
and
remove
all
the
temporary
DAC
jobs.
Let's
make
sure
you're
still
in
your
cicc
CD
adoption
workshop
and
by
the
way
now
we
can
see
our
full
pipeline
I
apologize
for
the
runners
being
so
slow
today,
I,
don't
again
I'll
have
to
dive
into
this
after
the
workshop
today,
but
we're
going
to
remove
the
code
that
matches
the
code
block
below.
So,
let's
go
back
to
our
pipeline
editor.
A
A
A
A
A
So
yeah,
yes,
you're
going
to
get
the
recording
to
the
session
as
well,
but
if
we
click
through
to
the
job
log,
so
let's
do
that
again.
We
just
want
to
look
and
see
why
it
failed.
We
can
go
to
the
job
log.
This
is
the
output
of
every
single
command
that
was
issued
in
the
script
section
notice
that
there's
an
exit
one
now,
so
that's
telling
get
that
brother
that
this
failed
and
by
the
way
for
those
of
you
who
don't
want
to
learn,
work
in
Linux
any
X
coder
than
zeros
of
failure.
A
A
A
Whether
you're
on
gitlab.com
or
whether
you're
self-hosted,
this
SAS
testing
is
available
to
you
right
now
and
to
enable
SAS
you
have
to
include
the
file
that
includes
the
job.
A
Okay,
yeah.
Thank
you
Chris,
so
to
enable
SAS,
you've
got
to
include
this
file
that
will
bring
in
the
SAS
job
definition.
And
you
can
you
see
that
where
this
is
out
in
the
global
section
of
our
yml
file,
it's
not
in
a
job
itself
right.
So
we
can
just
put
this
Standalone
include
statement
out
there,
and
then
we
put
this
array
element
of
template
in
there,
and
template
means
something
that
shipped
with
gitlab.
You
have
the
ability
to
create
your
own
template
repositories
if
you
want
to,
but
they
use
a
different
sequence.
A
They
use
a
different
to
syntax,
then
template
so
just
be
aware.
A
So
what
is
the
template?
It's
where
this
way
to
share
cncd
capabilities
with
other
teams
in
your
org,
the
way
to
consume
Co,
CD
capabilities
from
other
teams
in
your
org
and
the
way
that
gitlab
engineering
provides
capabilities
via
templates.
We
ship
within
a
lot
of
devops
dsci.yml
file
that
you
can
actually
enable
in
your
projects.
It's
just
kind
of
a
one-size-fits-all
type
of
scenario,
so
just
be
aware
that
that's
also
available
there
and
since
we
are
open
core,
which
means
you
can
go,
look
at
our
code.
A
The
code
is
available
for
review
out
on
in
our
Repository,
so
be
aware,
that
templates
have
nothing
magical,
there's
no
special
code
in
there.
That
runs
when
we
run
our
templates,
our
templates,
everything
is
programmed
in
the
job,
yml
files,
and
so
once
you
get
to
those
you
can
read
through
them
and
you
can
actually
determine
for
yourself
what
they're
doing
and
have
a
pretty
good
interpretation
to
review
so
temperature
always
executed
into
a
gitlab
cicd
pipeline
through
an
include
statement
in
the
projects.
A
A
You
know
in
your
organization,
you
would
use
the
include
file,
which
is
actually
include
project,
as
you
can
see
delineated
below,
but
it
has
filed
below
that.
So
we
would
put
the
path
into
the
project.
Then
we
would
put
the
path
in
the
project
itself
to
the
file
and
then
that's
going
to
get
included
from
that
project.
Now
the
thing
to
realize
about
that
is,
if
you're
going
to
create
these
template
repositories
and
share
them
with
other
people
in
your
organization.
A
Is
anybody
who
can
run
a
pipeline
has
to
have
read
access
to
that
repository
for
that
template
file
to
work?
Now
it's
also
possible.
If
you
want
to
do
this
and
I
do
this
fairly
frequently,
you
know,
maybe
your
gitlab.ci.yml
file
is
going
to
get
long
and
really
complicated
and
hard
to
debug
and
work
through
and
stuff
like
that
as
a
single
file,
and
so
it's
not
uncommon
to
separate
out
components
of
your
pipelines
into
separate
files.
If
you
want
to
do
that,
I
use
a
pipelines
directory.
A
It's
just
my
personal
way
of
moving
forward
with
that.
But
anything
under
my
puppets
directory
is
a
file
that
I'm
going
to
include
under
some
condition,
and
also
so
be
aware
that
you
know
if
your
project
has
very
complex
pipelines,
you
can
definitely
split
it
up
into
different
pipeline
files.
If
you
want
to
do
that
and
then
the
include
remote
is
a
special
circumstance.
A
I,
don't
know
that
I
would
trust
this
very
much,
but
I
would
trust
it
in
the
case
of
gitlab
with
the
stuff
that
we're
publicly
publishing
and
making
available
there,
but
you're
going
to
reference
a
yml
file
located
in
a
publicly
available
public
repository,
there's
no
way
to
authenticate.
A
A
So
just
be
aware,
you
can
see
variables
listed
here
in
this
code
on
the
bottom
right:
insecure,
analyzers,
prefix,
secure,
analyzer
version,
sequence,
detection
paths
excluded.
Those
are
you
know
variables
that
can
modify
the
behavior
of
this
particular
this
particular
kind
of
job,
and
you
could
do
this
to
replace
the
default
Behavior,
but
also
be
aware
that
when
you
import
that
job,
if
you
just
put
that
to
declare
that
job
in
your
yml
you
can
over,
you
can
also
override
any
properties
of
that
job.
If
you
need
to.
A
So
understanding
the
include
SAS
jobs
default,
Behavior,
look
in
the
gitlab
SAS
documentation
to
understand
what
variables
and
by
the
way
that
is
a
real
link.
So
when
you
get
this
slide,
deck
you'll
be
able
to
follow
it.
If
you
want
to
to
understand
what
variables
are
available
to
override
different
properties
obsessed-
and
you
may
also
look
at
the
SAS
template
itself
and
see
how
the
job
is
defined,
so
let's
go
ahead
and
move
on
from
there.
A
So
by
default,
yes,
it's
going
to
use
pattern
matching
to
decide
what
languages
scanner
to
execute.
We
know
our
app
is
node.js,
so
let's
just
tell
the
job
we
normally
we
use
node.js
by
excluding
all
the
rest.
The
SAS
template
defines
what
language
scanners,
to
avoid
in
SAS,
excluded,
analyzers
and
and
I
can
set
the
exact
same
scanners
to
be
excluded
by
defining
this
variable
in
my
gitlab.ci
DOT
ymo
SAS
job.
A
All
right,
so,
let's
talk
about
artifacts
real
quickly.
You
might
have
artifacts
as
a
result
of
running
a
job.
By
the
way
all
security
scanners
leave
report
artifacts
of
one
kind
or
another,
but
you
might
have
a
build
job
and
you
might
need
to
store
that
artifact
for
Downstream
jobs
to
be
able
to
use
things
along
those
lines
and
artifacts
by
default
will
pass
to
every
single
subsequent
job.
But
you
can
change
that
with
the
needs
configuration
the
needs.
A
So
if
you
go
to
download
artifacts
in
the
gitlab
UI
there's
a
couple
different
places,
you
can
do
it.
If
you
go
to
the
pipelines,
page
you'll
see
a
download
icon
and
if
you
click
on
that
you're
going
to
get
an
archive
file
that
has
all
the
artifacts
from
all
the
different
jobs
that
run
in
this
archive
file.
A
If
you
go
to
the
jobs
page
you'll
see
the
same
thing
for
individual
jobs
and
if
a
job
leaves
multiple
artifacts
they're
going
to
be
archived
up,
so
you're
going
to
get
an
archive
file
again
and
then,
if
you
go
to
the
specific
job
page,
you
have
the
ability
to
download
from
that
job.
So
we
click
on
the
job.
In
the
pipeline,
we
go
to
look
at
its
job
log
we'll
have
this
download
button
in
the
upper
right
and
there's
also
a
browse.
A
So
it's
a
good
idea
to
just
be
thinking
about
how
to
manage
these
artifacts
in
advance
and
you
have
the
ability
when
you
create
an
artifact.
So
when
you
use
the
artifact
keyword
in
a
job,
you
can
actually
tell
it
when
to
expire
that
artifact.
You
know
it
can
be
in
an
hour.
It
can
be
two
hours
three
hours,
just
whatever
works
for
you
and
if
you
in
that
way,
get
lab
will
just
delete
that
artifact
for
you.
You
don't
have
to
worry
about.
A
A
A
By
the
way,
the
images
that
you
can
see
when
I'm
in
the
slideshow
only
go
through,
if
you,
you
know,
number
five
transfer
project,
but,
as
you
can
see,
we've
got
two
optional
ones
here
at
the
top,
so
just
be
aware,
those
are
there
and
please
review
them.
When
you
get
a
chance,
this
one
is
optional
security
and
compliance.
That's
going
to
walk
you
through
the
security
and
compliance
tooling.
A
That
gitlab
has
available
it's
highly
highly
recommended,
and
then
this
one
at
the
very
top
number
seven
is
just
an
example
project
that
gives
you
a
way
of
defining
multiple,
independent
pipelines
that
run
in
a
single
project,
so
that
particular
project
has
about
six
or
seven
pipelines
to
find
that
are
all
mutually
exclusive.
So
just
be
aware
that
those
are
there
probably
worth
reviewing
in
this
optional
security
and
compliance.
You
should
definitely
take
the
time
to
go
through
all
right,
so
we're
going
to
go
to
sasting
artifacts.
A
And
remember
that
template
means
it's
shipped
with
Git
lab.
So
in
this
particular
case,
gitlab
knows
exactly
where
to
get
this
job
from
so
to
take
a
look
at
the
template
we
just
added,
but
at
the
top
of
the
edit
page
next
to
where
you
can
select
the
branch.
By
the
way
you
can
select
the
branch,
if
you
want
to
edit
your
pipeline
files
in
a
different
branch,
you
can
just
change
branches
here,
but
we're
sticking
with
main
today.
A
A
A
Now
also
notice
that
we've,
if
we
both
configuration,
which
is
showing
in
step
five
view
merged
yaml,
is
full
configuration,
we
can
actually
see
the
full
merged
yaml
that
would
be
brought
in
between
this
file,
including
or
our
native
gitlab.ci.orgmail.
You
can
scroll
through
down
through
it
just
check
it
all
out.
If
you
want
to
so
just
be
aware
that
that's
there.
A
A
All
right
so
notice
that
our
SAS
job
added
two
more
jobs,
no
jskn,
SAS
and
Sam
grips
zest
in
just
for
awareness.
These
actually
don't
have
any
requirements
on
a
build.
They
run
against
static
codes.
Just
be
aware
of
that.
A
A
A
A
They
would
run
immediately
because
they
have
needs
requirements
that
depend
upon
I,
think
so,
unfortunately,
I'm
not
going
to
be
able
to
oh
look
at
that,
they
all
fired
up
at
the
same
time.
So
again,
they're
not
waiting
on
build
that
or
test
the
test
stage
to
complete
they're
firing
up
right
away
because
they
have
their
needs
declared,
is
not
needing
anything.
A
Now,
unfortunately,
it's
going
to
take
a
very
long
time.
It's
going
to
take
quite
a
while,
for
this
build
up
to
finish
up
or
I
would
go
through
and
show
you
where
you
could
download
the
errors
back,
but
I
really
encourage
you
to
go
through
that.
A
A
So
we're
right
at
the
very
end
now
the
last
thing
we're
going
to
talk
about
is
transferring
the
project
so
only
transfer
when
you're
done.
You
want
to
stay
there
in
this
provision,
gitlab
Ultima
group
that
has
Runners
provision
for
it.
It's
ready
to
go
for
you
by
the
way.
We
encourage
you
to
play
around
a
little
bit.
Try
some
things
out
that
you
want
to
try
and
please
do
take
the
time
to
go
through
the
optional
content,
at
least
step
number,
six,
the
security
and
Appliance.
That's
a
very
important
one.
A
So
when
you
transfer
your
project,
if
you
do
not
have
an
ultimate
license
to
wherever
you're
going
to
take
this
and
by
the
way,
you
can
only
transfer
a
project
from
one
space
on
getlove.com
to
another.
So
if
you
were
to
move
it
to
your
personal
names,
basic
gitlab
and
you
don't
have
any
subscription
associated
with
that
you're
going
to
lose
both
premium
and
ultimate
features.
So
just
be
aware
of
that,
and
then
that's
in
the
final
step.
A
Well,
not
the
last
step,
but
number
five
you'll
have
the
instructions
there
and
you
can
go
through
those
if
you
want
to
do
them
so
we're
at
our
conclusion.
Now
any
questions
before
we
wrap
up
or
just
a
couple
minutes
over
and
I
apologize
for
that
all
right
good.
So
we
don't
have
any
questions
all
right.
A
Everybody
thank
you
for
taking
the
time
to
join
us
today
and
we
look
forward
to
hearing
from
you
and
by
the
way,
please
feel
free
once
you
get
in
and
start
playing
with
this
a
real
good
enablement
session,
two
request
is
one
called
Advanced,
CI
and
CD,
which
is
presented
as
a
luncheon
layer.
It's
not
a
workshop!
It's
about
an
hour's
worth
of
content.
If
you
haven't
assigned
customer
success
manager,
please
reach
out
to
them
and
let
them
know
you'd
like
to
take
the
advanced,
CI
and
CD.
A
A
But
again
only
if
you
don't
have
an
assigned
customer
success
manager
and
then
you
can
request
an
engagement
with
us
and
we
come
in
and
share
that
lunch
and
learn
lunch
and
learn
with
you
as
well.
So
I
think.
That's
it
and
I
appreciate
everybody's
time
today
and
oh
yeah
look
for
the
email
tomorrow
and
we'll
just
kind
of
give
you
a
chance
to
play
around
here
a
little
bit.