Merge branch 'master' into skip_plugins

This commit is contained in:
Luigi Operoso 2025-03-27 23:07:51 +01:00 committed by GitHub
commit 38d7b88211
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 76 additions and 46 deletions

View File

@ -1,40 +0,0 @@
name: CI Lint
on:
push:
branches:
- master
- main
pull_request:
types: [opened, synchronize, ready_for_review, reopened]
jobs:
codespell:
name: Codespell
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Codespell
uses: codespell-project/actions-codespell@v2
with:
check_filenames: true
ignore_words_list: aks,ags,startin,NotIn
skip: "*.js,package-lock.json,*.lock,*/Font-Awesome/*,*.toml,*.svg,*assets/vendor/bootstrap*,cert-manager.crds.yaml,*/docs/*"
pre-commit:
name: PreCommit
runs-on: ubuntu-latest
steps:
- uses: actions/setup-python@v5.1.1
- uses: DeterminateSystems/nix-installer-action@v13
with:
diagnostic-endpoint: ""
- uses: DeterminateSystems/magic-nix-cache-action@v7
with:
diagnostic-endpoint: ""
- name: Checkout
uses: actions/checkout@v4
- id: files
uses: tj-actions/changed-files@v44
- name: nix checks
run: nix flake check
- name: nix pre-commit
run: nix develop . --command pre-commit run --files ${{ steps.files.outputs.all_changed_files }} --show-diff-on-failure

View File

@ -311,6 +311,7 @@ type JenkinsMaster struct {
// periodSeconds: 10 // periodSeconds: 10
// successThreshold: 1 // successThreshold: 1
// timeoutSeconds: 5 // timeoutSeconds: 5
// lifecycle: {}
// name: jenkins-master // name: jenkins-master
// readinessProbe: // readinessProbe:
// failureThreshold: 3 // failureThreshold: 3

View File

@ -134,6 +134,9 @@ spec:
{{- with .Values.jenkins.env }} {{- with .Values.jenkins.env }}
env: {{- toYaml . | nindent 8 }} env: {{- toYaml . | nindent 8 }}
{{- end }} {{- end }}
{{- with .Values.jenkins.lifecycle}}
lifecycle: {{ toYaml . | nindent 10 }}
{{- end }}
{{- with .Values.jenkins.volumeMounts }} {{- with .Values.jenkins.volumeMounts }}
volumeMounts: {{- toYaml . | nindent 8 }} volumeMounts: {{- toYaml . | nindent 8 }}
{{- end }} {{- end }}

View File

@ -44,6 +44,9 @@ jenkins:
# imagePullPolicy defines policy for pulling images # imagePullPolicy defines policy for pulling images
imagePullPolicy: Always imagePullPolicy: Always
# lifecycle is used if you want to specify lifecycle hooks for the master container
lifecycle: {}
# priorityClassName indicates the importance of a Pod relative to other Pods # priorityClassName indicates the importance of a Pod relative to other Pods
# See: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/ # See: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/
priorityClassName: "" priorityClassName: ""

View File

@ -378,6 +378,11 @@ func (r *JenkinsReconciler) setDefaults(jenkins *v1alpha2.Jenkins) (requeue bool
changed = true changed = true
jenkinsContainer.LivenessProbe = resources.NewProbe(containerProbeURI, containerProbePortName, corev1.URISchemeHTTP, 80, 5, 12) jenkinsContainer.LivenessProbe = resources.NewProbe(containerProbeURI, containerProbePortName, corev1.URISchemeHTTP, 80, 5, 12)
} }
if jenkinsContainer.Lifecycle == nil {
logger.Info("Setting default Jenkins lifecycle")
changed = true
jenkinsContainer.Lifecycle = &corev1.Lifecycle{}
}
if len(jenkinsContainer.Command) == 0 { if len(jenkinsContainer.Command) == 0 {
logger.Info("Setting default Jenkins container command") logger.Info("Setting default Jenkins container command")
changed = true changed = true

View File

@ -243,6 +243,7 @@ func NewJenkinsMasterContainer(jenkins *v1alpha2.Jenkins) corev1.Container {
Image: jenkinsContainer.Image, Image: jenkinsContainer.Image,
ImagePullPolicy: jenkinsContainer.ImagePullPolicy, ImagePullPolicy: jenkinsContainer.ImagePullPolicy,
Command: jenkinsContainer.Command, Command: jenkinsContainer.Command,
Lifecycle: jenkinsContainer.Lifecycle,
LivenessProbe: jenkinsContainer.LivenessProbe, LivenessProbe: jenkinsContainer.LivenessProbe,
ReadinessProbe: jenkinsContainer.ReadinessProbe, ReadinessProbe: jenkinsContainer.ReadinessProbe,
Ports: []corev1.ContainerPort{ Ports: []corev1.ContainerPort{

View File

@ -105,6 +105,7 @@ setup() {
--set jenkins.nodeSelector.batstest=yep \ --set jenkins.nodeSelector.batstest=yep \
--set jenkins.image="jenkins/jenkins:2.462.3-lts" \ --set jenkins.image="jenkins/jenkins:2.462.3-lts" \
--set jenkins.imagePullPolicy="IfNotPresent" \ --set jenkins.imagePullPolicy="IfNotPresent" \
--set jenkins.lifecycle.preStop.exec.command="{echo bats-test}" \
--set jenkins.backup.makeBackupBeforePodDeletion=false \ --set jenkins.backup.makeBackupBeforePodDeletion=false \
--set jenkins.backup.image=quay.io/jenkins-kubernetes-operator/backup-pvc:e2e-test \ --set jenkins.backup.image=quay.io/jenkins-kubernetes-operator/backup-pvc:e2e-test \
chart/jenkins-operator --wait chart/jenkins-operator --wait
@ -138,7 +139,15 @@ setup() {
} }
#bats test_tags=phase:helm,scenario:more-options #bats test_tags=phase:helm,scenario:more-options
@test "2.12 Helm: check node selector again" { @test "2.12 Helm: check lifecycle hook injection" {
[[ ! -f "chart/jenkins-operator/deploy.tmp" ]] && skip "Jenkins helm chart have not been deployed correctly"
run try "at most 20 times every 10s to get pods named 'jenkins-jenkins' and verify that '.spec.containers[?(@.name==\"jenkins-master\")].lifecycle.preStop.exec.command[0]' is 'echo bats-test'"
assert_success
}
#bats test_tags=phase:helm,scenario:more-options
@test "2.13 Helm: check node selector again" {
[[ ! -f "chart/jenkins-operator/deploy.tmp" ]] && skip "Jenkins helm chart have not been deployed correctly" [[ ! -f "chart/jenkins-operator/deploy.tmp" ]] && skip "Jenkins helm chart have not been deployed correctly"
NODENAME=$(${KUBECTL} get pod jenkins-jenkins -o jsonpath={.spec.nodeName}) NODENAME=$(${KUBECTL} get pod jenkins-jenkins -o jsonpath={.spec.nodeName})
@ -149,17 +158,32 @@ setup() {
} }
#bats test_tags=phase:helm,scenario:more-options #bats test_tags=phase:helm,scenario:more-options
@test "2.13 Helm: check jenkins-plugin-cli command again" { @test "2.14 Helm: check jenkins-plugin-cli command again" {
[[ ! -f "chart/jenkins-operator/deploy.tmp" ]] && skip "Jenkins helm chart have not been deployed correctly" [[ ! -f "chart/jenkins-operator/deploy.tmp" ]] && skip "Jenkins helm chart have not been deployed correctly"
run ${KUBECTL} logs -c jenkins-master jenkins-jenkins # Check logs for jenkins-plugin-cli command with retry.
# Retry is necessary here to reduce flakiness due to additional delays
# from reconciling and recreating jenkins pods after helm upgrade.
# We assert success only after the retry loop to reduce noise.
LOG_CMD="${KUBECTL} logs -c jenkins-master jenkins-jenkins"
EXPECTED_LOG_LINE_BASE_PLUGINS="jenkins-plugin-cli --verbose --latest true -f /var/lib/jenkins/base-plugins.txt"
retry 10 10 "${LOG_CMD} | grep -e '${EXPECTED_LOG_LINE_BASE_PLUGINS}'"
run $LOG_CMD
assert_success assert_success
assert_output --partial 'jenkins-plugin-cli --verbose --latest true -f /var/lib/jenkins/base-plugins.txt' assert_output --partial "${EXPECTED_LOG_LINE_BASE_PLUGINS}"
assert_output --partial 'jenkins-plugin-cli --verbose --latest true -f /var/lib/jenkins/user-plugins.txt'
EXPECTED_LOG_LINE_USER_PLUGINS="jenkins-plugin-cli --verbose --latest true -f /var/lib/jenkins/user-plugins.txt"
retry 10 10 "${LOG_CMD} | grep -e '${EXPECTED_LOG_LINE_USER_PLUGINS}'"
run $LOG_CMD
assert_success
assert_output --partial "${EXPECTED_LOG_LINE_USER_PLUGINS}"
} }
#bats test_tags=phase:helm,scenario:more-options #bats test_tags=phase:helm,scenario:more-options
@test "2.14 Helm: clean" { @test "2.15 Helm: clean" {
[[ ! -f "chart/jenkins-operator/deploy.tmp" ]] && skip "Jenkins helm chart have not been deployed correctly" [[ ! -f "chart/jenkins-operator/deploy.tmp" ]] && skip "Jenkins helm chart have not been deployed correctly"
run ${HELM} uninstall options --wait run ${HELM} uninstall options --wait

View File

@ -15,3 +15,36 @@ _common_setup() {
get_latest_chart_version() { get_latest_chart_version() {
helm search repo jenkins-operator/jenkins --versions | awk 'NR==2 {print $2}' | sed 's/v//' helm search repo jenkins-operator/jenkins --versions | awk 'NR==2 {print $2}' | sed 's/v//'
} }
retry() {
# based on bats-detik's try function
if [[ $# -ne 3 ]]; then
echo "[ERROR] Usage: retry <times> <delay> <command>"
return 1
fi
local times="$1"
local delay="$2"
local cmd="$3"
code=0
for ((i=1; i<=times; i++)); do
# Run the command
eval "$cmd" && code=$? || code=$?
# Break the loop prematurely?
if [[ "$code" == "0" ]]; then
break
elif [[ "$i" != "1" ]]; then
code=3
sleep "$delay"
else
code=3
fi
done
## Error code
return $code
}