Compare commits
69 Commits
v0.8.0-bet
...
master
| Author | SHA1 | Date |
|---|---|---|
|
|
08f0a74771 | |
|
|
bf040e1188 | |
|
|
b8a756909f | |
|
|
697dc1b370 | |
|
|
ac3db2fbc6 | |
|
|
ae9cb0c7f5 | |
|
|
3300775a1d | |
|
|
8a66d658eb | |
|
|
69bdd916d5 | |
|
|
132fcb22dc | |
|
|
ee191bfc4e | |
|
|
191caefbbe | |
|
|
627d3d2af2 | |
|
|
17d3c0bf4b | |
|
|
faf812a0ce | |
|
|
832debbd45 | |
|
|
4b3600ff0e | |
|
|
3b61208f2e | |
|
|
bec1c61e27 | |
|
|
2864a85364 | |
|
|
9c09db8031 | |
|
|
1ec83b9de9 | |
|
|
f0da3494ae | |
|
|
d919a2a11c | |
|
|
a4fa09b2ed | |
|
|
bb33b8ffa0 | |
|
|
7cdffbe716 | |
|
|
24eac18564 | |
|
|
3a5b7f6b4f | |
|
|
6abbd56e77 | |
|
|
b63b31a398 | |
|
|
7c6616b2bf | |
|
|
57a1b6bfb9 | |
|
|
5e962b26ae | |
|
|
0911dfe64a | |
|
|
b722ef11ae | |
|
|
5ef6c730de | |
|
|
e0f52b5bdf | |
|
|
f98b0bc5ee | |
|
|
e40032497b | |
|
|
18197e66b7 | |
|
|
061995a65c | |
|
|
25b329aa13 | |
|
|
3f036bdea7 | |
|
|
cf49a4a28f | |
|
|
6dd45eebf0 | |
|
|
1a7dc9107a | |
|
|
036b20c01b | |
|
|
48aa102342 | |
|
|
4f03cefda0 | |
|
|
cee202004d | |
|
|
be737522f0 | |
|
|
ec20bbe630 | |
|
|
81251d3ddc | |
|
|
95f0215c37 | |
|
|
bfda3c8cf9 | |
|
|
332eabe8d7 | |
|
|
2ba5334c10 | |
|
|
50c7217daa | |
|
|
8d61604b03 | |
|
|
63e8a76b95 | |
|
|
138e569841 | |
|
|
3682468b5f | |
|
|
d70f70f0f4 | |
|
|
a6e32fde98 | |
|
|
8268c1e4c5 | |
|
|
2c88fe13a8 | |
|
|
1b6e944ae6 | |
|
|
01a3990d66 |
|
|
@ -1,43 +1,63 @@
|
|||
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
|
||||
// README at: https://github.com/devcontainers/templates/tree/main/src/kubernetes-helm-minikube
|
||||
// For format details, see https://aka.ms/devcontainer.json
|
||||
{
|
||||
"name": "Kubernetes - Minikube-in-Docker",
|
||||
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
|
||||
"image": "mcr.microsoft.com/devcontainers/base:bookworm",
|
||||
"name": "Jenkins kubernetes operator devcontainer",
|
||||
"image": "mcr.microsoft.com/devcontainers/base:bookworm",
|
||||
|
||||
"features": {
|
||||
"ghcr.io/devcontainers/features/docker-in-docker:2": {
|
||||
"enableNonRootDocker": "true",
|
||||
"moby": "true"
|
||||
},
|
||||
"ghcr.io/devcontainers/features/kubectl-helm-minikube:1": {
|
||||
"version": "latest",
|
||||
"helm": "latest",
|
||||
"minikube": "latest"
|
||||
},
|
||||
"ghcr.io/devcontainers/features/go:1": {
|
||||
"version": "1.15",
|
||||
"golangciLintVersion": "1.26.0"
|
||||
},
|
||||
"ghcr.io/mpriscella/features/kind:1": {
|
||||
"version": "latest"
|
||||
},
|
||||
"ghcr.io/edouard-lopez/devcontainer-features/bats:0": {
|
||||
"version": "latest"
|
||||
}
|
||||
}
|
||||
// Use 'forwardPorts' to make a list of ports inside the container available locally.
|
||||
// "forwardPorts": [],
|
||||
"features": {
|
||||
"ghcr.io/devcontainers/features/docker-in-docker:2": {
|
||||
"enableNonRootDocker": "true",
|
||||
"moby": "true"
|
||||
},
|
||||
"ghcr.io/devcontainers/features/kubectl-helm-minikube:1": {
|
||||
"version": "latest",
|
||||
"helm": "latest",
|
||||
"minikube": "none"
|
||||
},
|
||||
"ghcr.io/devcontainers/features/go:1": {
|
||||
"version": "1.22",
|
||||
"golangciLintVersion": "1.58.2"
|
||||
},
|
||||
"ghcr.io/mpriscella/features/kind:1": {
|
||||
"version": "latest"
|
||||
},
|
||||
"ghcr.io/edouard-lopez/devcontainer-features/bats:0": {
|
||||
"version": "latest"
|
||||
},
|
||||
"ghcr.io/brokenpip3/devcontainers-bats/bats-libs:0": {
|
||||
},
|
||||
"ghcr.io/devcontainers/features/nix:1": {
|
||||
"multiUser": "false",
|
||||
"extraNixConfig": "experimental-features = nix-command flakes"
|
||||
},
|
||||
"ghcr.io/devcontainers/features/hugo:1": {
|
||||
"version": "v0.99.1"
|
||||
}
|
||||
},
|
||||
// "forwardPorts": [],
|
||||
|
||||
// Use 'postCreateCommand' to run commands after the container is created.
|
||||
// "postCreateCommand": "kubectl version",
|
||||
"postCreateCommand": "go version",
|
||||
|
||||
// Use 'postStartCommand' to run commands after the container is created like starting minikube.
|
||||
// "postStartCommand": "nohup bash -c 'minikube start &' > minikube.log 2>&1",
|
||||
// "postStartCommand": "nohup bash -c 'minikube start &' > minikube.log 2>&1",
|
||||
|
||||
// Configure tool-specific properties.
|
||||
// "customizations": {},
|
||||
// Configure tool-specific properties.
|
||||
"customizations": {
|
||||
"codespaces": {
|
||||
"openFiles": [
|
||||
"Makefile"
|
||||
]
|
||||
},
|
||||
// install some vscode extensions
|
||||
"vscode": {
|
||||
"extensions": [
|
||||
"golang.Go",
|
||||
"jetmartin.bats",
|
||||
"ms-kubernetes-tools.vscode-kubernetes-tools",
|
||||
"budparr.language-hugo-vscode",
|
||||
"GitHub.copilot",
|
||||
"GitHub.copilot-chat"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
|
||||
// "remoteUser": "root"
|
||||
// "remoteUser": "root"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,11 +4,25 @@ updates:
|
|||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
groups:
|
||||
golang:
|
||||
patterns:
|
||||
- "*"
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/website"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
groups:
|
||||
npm:
|
||||
patterns:
|
||||
- "*"
|
||||
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
interval: "daily"
|
||||
groups:
|
||||
actions:
|
||||
patterns:
|
||||
- "*"
|
||||
|
|
|
|||
|
|
@ -15,20 +15,3 @@ review them:
|
|||
- [ ] Commit messages follow [commit message best practices](https://github.com/jenkinsci/kubernetes-operator/blob/master/CONTRIBUTING.md#commit-messages)
|
||||
|
||||
_See [the contribution guide](https://github.com/jenkinsci/kubernetes-operator/blob/master/CONTRIBUTING.md) for more details._
|
||||
|
||||
|
||||
## Reviewer Notes
|
||||
|
||||
If API changes are included, additive changes must be approved by at least two [OWNERS](https://github.com/jenkinsci/kubernetes-operator/blob/master/OWNERS) and backwards incompatible changes must be approved by [more than 50% of the OWNERS](https://github.com/jenkinsci/kubernetes-operator/blob/master/OWNERS).
|
||||
|
||||
# Release Notes
|
||||
|
||||
```
|
||||
Describe any user facing changes here, or delete this block.
|
||||
|
||||
Examples of user facing changes:
|
||||
- API changes
|
||||
- Bug fixes
|
||||
- Any changes in behavior
|
||||
|
||||
```
|
||||
|
|
|
|||
|
|
@ -1,21 +0,0 @@
|
|||
name: codespell
|
||||
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@v3
|
||||
- name: Codespell
|
||||
uses: codespell-project/actions-codespell@v1
|
||||
with:
|
||||
check_filenames: true
|
||||
ignore_words_list: aks,ags,startin
|
||||
skip: "*.js,package-lock.json,*.lock,*/Font-Awesome/*,*.toml,*.svg,*assets/vendor/bootstrap*,cert-manager.crds.yaml"
|
||||
|
|
@ -1,86 +1,99 @@
|
|||
name: auto-generate-docs
|
||||
name: Website
|
||||
|
||||
# Run this workflow every time a new commit pushed to your repository
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'docs/**'
|
||||
- 'website/**'
|
||||
- 'assets/**'
|
||||
pull_request:
|
||||
types: [opened, synchronize, ready_for_review, reopened]
|
||||
paths:
|
||||
- 'website/**'
|
||||
- 'assets/**'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
concurrency:
|
||||
group: "website"
|
||||
cancel-in-progress: false
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
jobs:
|
||||
# Set the job key. The key is displayed as the job name
|
||||
# when a job name is not provided
|
||||
docs:
|
||||
# Name the Job
|
||||
name: auto-generate-docs
|
||||
# Set the type of machine to run on
|
||||
update-date:
|
||||
name: Auto update dates
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
if: github.event_name == 'pull_request' || (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master')
|
||||
steps:
|
||||
# Checks out a copy of your repository on the ubuntu-latest machine
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
- uses: DeterminateSystems/nix-installer-action@e50d5f73bfe71c2dd0aa4218de8f4afa59f8f81d # v16
|
||||
with:
|
||||
submodules: recursive # Fetch the Docsy theme
|
||||
fetch-depth: 0
|
||||
diagnostic-endpoint: ""
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
# Checks if the previous commit introduced any changes to website files
|
||||
- name: Check for changes
|
||||
run: |
|
||||
IS_CHANGED=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }} | grep -Ec "^website*" || :)
|
||||
[[ $IS_CHANGED -gt 0 ]] && echo "IS_CHANGED=true" >> $GITHUB_ENV || echo "IS_CHANGED=false" >> $GITHUB_ENV
|
||||
|
||||
# Sets up the appropriate version of Hugo
|
||||
- name: Setup Hugo
|
||||
if: env.IS_CHANGED == 'true'
|
||||
uses: peaceiris/actions-hugo@v2
|
||||
with:
|
||||
hugo-version: '0.113.0'
|
||||
extended: true
|
||||
|
||||
# Sets up node - required by Hugo
|
||||
- name: Setup Node
|
||||
if: env.IS_CHANGED == 'true'
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: '12.x'
|
||||
|
||||
# Installs dependencies required by docsy theme
|
||||
- name: Install docsy dependencies
|
||||
if: env.IS_CHANGED == 'true'
|
||||
run: |
|
||||
cd website
|
||||
npm install
|
||||
npm build
|
||||
sudo npm install -D --save autoprefixer
|
||||
sudo npm install -D --save postcss-cli
|
||||
cd ../
|
||||
|
||||
- name: Update last modified date in modified docs
|
||||
if: env.IS_CHANGED == 'true'
|
||||
run: |
|
||||
git diff --name-only --diff-filter=d ${{ github.event.before }} ${{ github.sha }} | grep -E "^website*" \
|
||||
| sed -e 's/\(.*\)/"\1"/' | xargs sed -i "/date:/c\date: $(date +'%Y-%m-%d')"
|
||||
|
||||
# Runs makefile goal - checks changes to /website folder and generates docs
|
||||
- name: Run Makefile goal
|
||||
if: env.IS_CHANGED == 'true'
|
||||
env:
|
||||
DEFAULT_BRANCH: master
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: make generate-docs
|
||||
|
||||
# Creates pull request with generated docs
|
||||
- name: Create Pull Request
|
||||
if: env.IS_CHANGED == 'true'
|
||||
uses: peter-evans/create-pull-request@v5
|
||||
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v6
|
||||
if: env.IS_CHANGED == 'true' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master')
|
||||
with:
|
||||
commit-message: Auto-updated docs
|
||||
branch: docs-generator
|
||||
title: Auto-generated docs update
|
||||
body: |
|
||||
Auto generated docs from master commit ${{ github.sha }}
|
||||
|
||||
website-generate:
|
||||
name: Auto generate website
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event_name == 'pull_request' || (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master')
|
||||
steps:
|
||||
- uses: DeterminateSystems/nix-installer-action@e50d5f73bfe71c2dd0aa4218de8f4afa59f8f81d # v16
|
||||
with:
|
||||
diagnostic-endpoint: ""
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
- name: nix checks
|
||||
run: nix flake check
|
||||
- name: nix build
|
||||
env:
|
||||
HUGO_ENVIRONMENT: production
|
||||
HUGO_ENV: production
|
||||
run: nix build .#website
|
||||
- name: Setup Pages
|
||||
id: pages
|
||||
uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3
|
||||
with:
|
||||
path: ./result
|
||||
|
||||
website-deploy:
|
||||
name: Deploy website
|
||||
if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master'
|
||||
environment:
|
||||
name: github-pages
|
||||
url: ${{ steps.deployment.outputs.page_url }}
|
||||
runs-on: ubuntu-latest
|
||||
needs: website-generate
|
||||
steps:
|
||||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Set up env vars
|
||||
run: |
|
||||
|
|
@ -51,7 +51,7 @@ jobs:
|
|||
cp chart/jenkins-operator/crds/jenkins-crd.yaml deploy/crds/jenkins.io_jenkins_crd.yaml
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v5
|
||||
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v6
|
||||
with:
|
||||
commit-message: Auto-updated Kubernetes Manifests
|
||||
branch: manifest-deploy-update
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ jobs:
|
|||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v8
|
||||
- uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 # v9
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
operations-per-run: 200
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
name: Run bats tests
|
||||
name: Tests BATS
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
|
|
@ -22,40 +22,46 @@ on:
|
|||
jobs:
|
||||
run-tests:
|
||||
if: github.event.pull_request.draft == false
|
||||
name: Run automated bats tests
|
||||
name: BATS test ${{ matrix.test-file }}
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
test-file: ["1-deploy", "2-deploy-with-more-options", "3-deploy-with-webhook"]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Set up env vars
|
||||
run: |
|
||||
echo "GO111MODULE=on" >> $GITHUB_ENV
|
||||
echo "GO_VERSION=v$(sed -n 's/GO_VERSION=//p' config.base.env)" >> $GITHUB_ENV
|
||||
echo "HELM_VERSION=v$(sed -n 's/HELM_VERSION=//p' config.base.env)" >> $GITHUB_ENV
|
||||
echo "KIND_CLUSTER_NAME=$(sed -n 's/KIND_CLUSTER_NAME=//p' config.base.env)" >> $GITHUB_ENV
|
||||
echo "GO_VERSION=v$(sed -n 's/GO_VERSION=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
|
||||
echo "HELM_VERSION=v$(sed -n 's/HELM_VERSION=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
|
||||
echo "KIND_CLUSTER_NAME=$(sed -n 's/KIND_CLUSTER_NAME=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
|
||||
echo "GOPATH=/home/runner/go" >> $GITHUB_ENV
|
||||
|
||||
- name: Prepare go environment
|
||||
uses: actions/setup-go@v2
|
||||
uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5
|
||||
with:
|
||||
go-version: ${{ env.GO_VERSION }}
|
||||
|
||||
- name: Ensure Golang runtime dependencies
|
||||
run: make go-dependencies
|
||||
|
||||
- name: Setup BATS
|
||||
uses: mig4/setup-bats@v1
|
||||
- name: Setup Bats and libs
|
||||
uses: bats-core/bats-action@e412797c46257a2dbf3775f6f6010b33ee6cb99f # 3.0.1
|
||||
with:
|
||||
bats-version: 1.9.0
|
||||
|
||||
- name: Setup Bats libs
|
||||
uses: brokenpip3/setup-bats-libs@0.1.0
|
||||
support-path: "${{ github.workspace }}/.bats/bats-support"
|
||||
assert-path: "${{ github.workspace }}/.bats/bats-assert"
|
||||
detik-path: "${{ github.workspace }}/.bats/bats-detik"
|
||||
file-path: "${{ github.workspace }}/.bats/bats-file"
|
||||
|
||||
- name: Kind setup
|
||||
uses: helm/kind-action@v1.5.0
|
||||
uses: helm/kind-action@a1b0e391336a6ee6713a0583f8c6240d70863de3 # v1.12.0
|
||||
with:
|
||||
cluster_name: ${{env.KIND_CLUSTER_NAME}}
|
||||
|
||||
- name: Jenkins Operator - bats tests
|
||||
run: make bats-tests
|
||||
env:
|
||||
BATS_LIB_PATH: "${{ github.workspace }}/.bats"
|
||||
run: BATS_TEST_PATH=${{matrix.test-file}}.bats make bats-tests
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
name: Run e2e tests
|
||||
name: Tests E2E
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
|
|
@ -19,31 +19,34 @@ on:
|
|||
- 'backup/**'
|
||||
- '*.md'
|
||||
|
||||
env:
|
||||
MINIKUBE_CPUS_NUMBER: 2
|
||||
MINIKUBE_MEMORY_AMOUNT: 6144
|
||||
|
||||
jobs:
|
||||
run-tests:
|
||||
if: github.event.pull_request.draft == false
|
||||
name: Run automated tests
|
||||
create-e2e-list:
|
||||
name: E2E Create tests list
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
matrix: ${{ steps.matrix.outputs.matrix }}
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
- id: matrix
|
||||
run: |
|
||||
script=$(./test/make_matrix_ginkgo.sh e2e)
|
||||
echo "matrix=${script}" >> $GITHUB_OUTPUT
|
||||
|
||||
verify-code:
|
||||
name: E2E Verify code before tests
|
||||
runs-on: ubuntu-latest
|
||||
needs: [create-e2e-list]
|
||||
steps:
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Set up env vars
|
||||
run: |
|
||||
echo "GO111MODULE=on" >> $GITHUB_ENV
|
||||
echo "CHANGE_MINIKUBE_NONE_USER=true" >> $GITHUB_ENV
|
||||
echo "MINIKUBE_WANTUPDATENOTIFICATION=false" >> $GITHUB_ENV
|
||||
echo "MINIKUBE_WANTREPORTERRORPROMPT=false" >> $GITHUB_ENV
|
||||
echo "GO_VERSION=v$(sed -n 's/GO_VERSION=//p' config.base.env)" >> $GITHUB_ENV
|
||||
echo "HELM_VERSION=v$(sed -n 's/HELM_VERSION=//p' config.base.env)" >> $GITHUB_ENV
|
||||
echo "GO_VERSION=v$(sed -n 's/GO_VERSION=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
|
||||
echo "GOPATH=/home/runner/go" >> $GITHUB_ENV
|
||||
|
||||
- name: Prepare go environment
|
||||
uses: actions/setup-go@v2
|
||||
uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5
|
||||
with:
|
||||
go-version: ${{ env.GO_VERSION }}
|
||||
|
||||
|
|
@ -53,16 +56,60 @@ jobs:
|
|||
- name: Verify code formatting
|
||||
run: make verify
|
||||
|
||||
run-e2e-tests:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [create-e2e-list, verify-code]
|
||||
if: github.event.pull_request.draft == false
|
||||
name: E2E ${{ matrix.test }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix: ${{ fromJSON(needs.create-e2e-list.outputs.matrix) }}
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Set up env vars
|
||||
run: |
|
||||
echo "GO111MODULE=on" >> $GITHUB_ENV
|
||||
echo "GO_VERSION=v$(sed -n 's/GO_VERSION=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
|
||||
echo "KIND_CLUSTER_NAME=$(sed -n 's/KIND_CLUSTER_NAME=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
|
||||
echo "GOPATH=/home/runner/go" >> $GITHUB_ENV
|
||||
|
||||
- name: Prepare go environment
|
||||
uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5
|
||||
with:
|
||||
go-version: ${{ env.GO_VERSION }}
|
||||
|
||||
- name: Ensure Golang runtime dependencies
|
||||
run: make go-dependencies
|
||||
|
||||
- name: Kind setup
|
||||
uses: helm/kind-action@a1b0e391336a6ee6713a0583f8c6240d70863de3 # v1.12.0
|
||||
with:
|
||||
cluster_name: ${{env.KIND_CLUSTER_NAME}}
|
||||
config: kind-cluster.yaml
|
||||
|
||||
- name: Prepare environment for e2e
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install socat
|
||||
sudo mkdir -p $HOME/.kube $HOME/.minikube
|
||||
sudo chown -R $USER $HOME/.kube $HOME/.minikube
|
||||
make minikube-start \
|
||||
MINIKUBE_DRIVER='docker' \
|
||||
MEMORY_AMOUNT=${{ env.MINIKUBE_MEMORY_AMOUNT }} \
|
||||
CPUS_NUMBER=${{ env.MINIKUBE_CPUS_NUMBER }}
|
||||
sudo apt-get update && sudo apt-get install -y socat
|
||||
sudo mkdir -p $HOME/.kube
|
||||
sudo chown -R $USER $HOME/.kube
|
||||
|
||||
- name: Jenkins Operator - e2e
|
||||
run: make e2e E2E_TEST_ARGS='-ginkgo.v'
|
||||
- name: Jenkins Operator - e2e Chart tests
|
||||
env:
|
||||
TNAME: ${{ matrix.test }}
|
||||
TFILE: ${{ matrix.file }}
|
||||
TLINE: ${{ matrix.line }}
|
||||
run: |
|
||||
git reset --hard
|
||||
printf "\n \n > Running test: %s from file: $s line: %s\n" "${TNAME}" "${TFILE}" "${TLINE}"
|
||||
make e2e E2E_TEST_ARGS='-ginkgo.v -ginkgo.focus="${TNAME}"'
|
||||
|
||||
- name: Debug
|
||||
if: failure()
|
||||
shell: bash
|
||||
continue-on-error: true
|
||||
run: |
|
||||
randomns=$(kubectl get ns| grep -i 'ns[0-9]\+' |cut -d ' ' -f 1)
|
||||
kubectl get pods -n ${randomns}
|
||||
kubectl get events -n ${randomns}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
name: Run Helm e2e tests
|
||||
name: Tests HELM
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
|
|
@ -19,54 +19,99 @@ on:
|
|||
- 'backup/**'
|
||||
- '*.md'
|
||||
|
||||
env:
|
||||
MINIKUBE_CPUS_NUMBER: 2
|
||||
MINIKUBE_MEMORY_AMOUNT: 6144
|
||||
|
||||
jobs:
|
||||
run-tests:
|
||||
if: github.event.pull_request.draft == false
|
||||
name: Run automated tests
|
||||
create-helm-list:
|
||||
name: HELM Create tests list
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
matrix: ${{ steps.matrix.outputs.matrix }}
|
||||
steps:
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
- id: matrix
|
||||
run: |
|
||||
script=$(./test/make_matrix_ginkgo.sh helm)
|
||||
echo "matrix=${script}" >> $GITHUB_OUTPUT
|
||||
|
||||
verify-code:
|
||||
name: HELM Verify code before tests
|
||||
runs-on: ubuntu-latest
|
||||
needs: [create-helm-list]
|
||||
steps:
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Set up env vars
|
||||
run: |
|
||||
echo "GO111MODULE=on" >> $GITHUB_ENV
|
||||
echo "GO_VERSION=v$(sed -n 's/GO_VERSION=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
|
||||
echo "GOPATH=/home/runner/go" >> $GITHUB_ENV
|
||||
|
||||
- name: Prepare go environment
|
||||
uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5
|
||||
with:
|
||||
go-version: ${{ env.GO_VERSION }}
|
||||
|
||||
- name: Ensure Golang runtime dependencies
|
||||
run: make go-dependencies
|
||||
|
||||
- name: Verify code formatting
|
||||
run: make verify
|
||||
|
||||
run-helm-tests:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [create-helm-list, verify-code]
|
||||
if: github.event.pull_request.draft == false
|
||||
name: HELM ${{ matrix.test }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix: ${{ fromJSON(needs.create-helm-list.outputs.matrix) }}
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Set up env vars
|
||||
run: |
|
||||
echo "GO111MODULE=on" >> $GITHUB_ENV
|
||||
echo "CHANGE_MINIKUBE_NONE_USER=true" >> $GITHUB_ENV
|
||||
echo "MINIKUBE_WANTUPDATENOTIFICATION=false" >> $GITHUB_ENV
|
||||
echo "MINIKUBE_WANTREPORTERRORPROMPT=false" >> $GITHUB_ENV
|
||||
echo "GO_VERSION=v$(sed -n 's/GO_VERSION=//p' config.base.env)" >> $GITHUB_ENV
|
||||
echo "HELM_VERSION=v$(sed -n 's/HELM_VERSION=//p' config.base.env)" >> $GITHUB_ENV
|
||||
echo "GO_VERSION=v$(sed -n 's/GO_VERSION=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
|
||||
echo "HELM_VERSION=v$(sed -n 's/HELM_VERSION=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
|
||||
echo "KIND_CLUSTER_NAME=$(sed -n 's/KIND_CLUSTER_NAME=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
|
||||
echo "GOPATH=/home/runner/go" >> $GITHUB_ENV
|
||||
|
||||
- name: Prepare go environment
|
||||
uses: actions/setup-go@v2
|
||||
uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5
|
||||
with:
|
||||
go-version: ${{ env.GO_VERSION }}
|
||||
|
||||
- name: Ensure Golang runtime dependencies
|
||||
run: make go-dependencies
|
||||
|
||||
- name: Verify code formatting
|
||||
run: make verify
|
||||
- name: Kind setup
|
||||
uses: helm/kind-action@a1b0e391336a6ee6713a0583f8c6240d70863de3 # v1.12.0
|
||||
with:
|
||||
cluster_name: ${{env.KIND_CLUSTER_NAME}}
|
||||
config: kind-cluster.yaml
|
||||
|
||||
- name: Prepare environment for e2e
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install socat
|
||||
sudo mkdir -p $HOME/.kube $HOME/.minikube
|
||||
sudo chown -R $USER $HOME/.kube $HOME/.minikube
|
||||
make minikube-start \
|
||||
MINIKUBE_DRIVER='docker' \
|
||||
MEMORY_AMOUNT=${{ env.MINIKUBE_MEMORY_AMOUNT }} \
|
||||
CPUS_NUMBER=${{ env.MINIKUBE_CPUS_NUMBER }}
|
||||
sudo apt-get update && sudo apt-get install -y socat
|
||||
sudo mkdir -p $HOME/.kube
|
||||
sudo chown -R $USER $HOME/.kube
|
||||
|
||||
- name: Jenkins Operator - Helm Chart tests
|
||||
env:
|
||||
TNAME: ${{ matrix.test }}
|
||||
TFILE: ${{ matrix.file }}
|
||||
TLINE: ${{ matrix.line }}
|
||||
run: |
|
||||
git reset --hard
|
||||
make helm-lint
|
||||
eval $(bin/minikube docker-env)
|
||||
make helm-e2e E2E_TEST_ARGS='-ginkgo.v'
|
||||
printf "\n \n > Running test: %s from file: $s line: %s\n" "${TNAME}" "${TFILE}" "${TLINE}"
|
||||
make helm-e2e E2E_TEST_ARGS='-ginkgo.v -ginkgo.focus="${TNAME}"'
|
||||
|
||||
- name: Debug
|
||||
if: failure()
|
||||
shell: bash
|
||||
continue-on-error: true
|
||||
run: |
|
||||
randomns=$(kubectl get ns| grep -i 'ns[0-9]\+' |cut -d ' ' -f 1)
|
||||
kubectl get pods -n ${randomns}
|
||||
kubectl get events -n ${randomns}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,72 @@
|
|||
name: auto-update-jenkins-lts
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 7 * * 0'
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
check-and-update-jenkins-lts:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
|
||||
|
||||
- name: Set up env vars
|
||||
run: |
|
||||
echo "GO111MODULE=on" >> $GITHUB_ENV
|
||||
echo "GO_VERSION=v$(sed -n 's/GO_VERSION=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
|
||||
echo "KIND_CLUSTER_NAME=$(sed -n 's/KIND_CLUSTER_NAME=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
|
||||
echo "GOPATH=/home/runner/go" >> $GITHUB_ENV
|
||||
|
||||
- name: Check if update needed
|
||||
id: check
|
||||
run: |
|
||||
CURRENT=$(sed -n 's/LATEST_LTS_VERSION=//p' config.base.env | tr -d '\n' | tr -d '"')
|
||||
LATEST=$(curl -s https://www.jenkins.io/changelog-stable/ | grep -oP 'changelog/\K\d+\.\d+\.\d+' | head -1)
|
||||
|
||||
echo "current=$CURRENT" >> $GITHUB_OUTPUT
|
||||
echo "latest=$LATEST" >> $GITHUB_OUTPUT
|
||||
|
||||
if [ "$CURRENT" != "$LATEST" ]; then
|
||||
echo "needs_update=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "needs_update=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Prepare go environment
|
||||
if: steps.check.outputs.needs_update == 'true'
|
||||
uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6
|
||||
with:
|
||||
go-version: ${{ env.GO_VERSION }}
|
||||
|
||||
- name: Ensure Golang runtime dependencies
|
||||
if: steps.check.outputs.needs_update == 'true'
|
||||
run: make go-dependencies
|
||||
|
||||
- name: Update Jenkins lts version
|
||||
if: steps.check.outputs.needs_update == 'true'
|
||||
run: make update-jenkins-lts
|
||||
|
||||
- name: Update Jenkins base plugins
|
||||
if: steps.check.outputs.needs_update == 'true'
|
||||
run: make update-plugins
|
||||
|
||||
- name: Run verify
|
||||
if: steps.check.outputs.needs_update == 'true'
|
||||
run: make verify
|
||||
|
||||
- name: Create Pull Request
|
||||
if: steps.check.outputs.needs_update == 'true'
|
||||
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
commit-message: "chore: update Jenkins lts version to ${{ steps.check.outputs.latest }}"
|
||||
title: "chore: update Jenkins lts version to ${{ steps.check.outputs.latest }}"
|
||||
body: "auto-update Jenkins lts version from ${{ steps.check.outputs.current }} to ${{ steps.check.outputs.latest }}"
|
||||
branch: auto-update-jenkins-lts-${{ steps.check.outputs.latest }}
|
||||
delete-branch: true
|
||||
|
|
@ -20,7 +20,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Check envs
|
||||
run: make -C backup/pvc check-env
|
||||
|
|
@ -46,7 +46,7 @@ jobs:
|
|||
|
||||
- name: Login to Quay.io
|
||||
if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request'
|
||||
uses: docker/login-action@v2
|
||||
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
|
||||
with:
|
||||
registry: quay.io
|
||||
username: ${{ secrets.QUAYIO_USERNAME }}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ jobs:
|
|||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Deploy Helm chart
|
||||
run: |
|
||||
|
|
@ -31,10 +31,10 @@ jobs:
|
|||
|
||||
# Creates pull request with new chart version
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v5
|
||||
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v6
|
||||
with:
|
||||
commit-message: Release Helm chart ${{ github.event.inputs.chartVersion }}
|
||||
branch: helm-chart-release-${{ github.event.inputs.chartVersion }}
|
||||
title: Release ${{ github.event.inputs.chartVersion }} Helm Chart
|
||||
body: |
|
||||
Release ${{ github.event.inputs.chartVersion }} Helm Chart
|
||||
Release ${{ github.event.inputs.chartVersion }} Helm Chart
|
||||
|
|
|
|||
|
|
@ -8,41 +8,33 @@ on:
|
|||
description: "Flag for skipping the tests. If set to true (without quotation marks), the workflow will skip tests and go straight to releasing the nightly build. Use with caution!"
|
||||
required: false
|
||||
|
||||
env:
|
||||
MINIKUBE_CPUS_NUMBER: 2
|
||||
MINIKUBE_MEMORY_AMOUNT: 6144
|
||||
|
||||
jobs:
|
||||
publish-image:
|
||||
name: Publish nightly snapshot
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Prep - check out code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Prep - Set up env vars
|
||||
run: |
|
||||
echo "GO111MODULE=on" >> $GITHUB_ENV
|
||||
echo "CHANGE_MINIKUBE_NONE_USER=true" >> $GITHUB_ENV
|
||||
echo "MINIKUBE_WANTUPDATENOTIFICATION=false" >> $GITHUB_ENV
|
||||
echo "MINIKUBE_WANTREPORTERRORPROMPT=false" >> $GITHUB_ENV
|
||||
echo "GO_VERSION=v$(sed -n 's/GO_VERSION=//p' config.base.env)" >> $GITHUB_ENV
|
||||
echo "HELM_VERSION=v$(sed -n 's/HELM_VERSION=//p' config.base.env)" >> $GITHUB_ENV
|
||||
echo "KIND_CLUSTER_NAME=$(sed -n 's/KIND_CLUSTER_NAME=//p' config.base.env)" >> $GITHUB_ENV
|
||||
echo "GO_VERSION=v$(sed -n 's/GO_VERSION=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
|
||||
echo "HELM_VERSION=v$(sed -n 's/HELM_VERSION=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
|
||||
echo "KIND_CLUSTER_NAME=$(sed -n 's/KIND_CLUSTER_NAME=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
|
||||
echo "GOPATH=/home/runner/go" >> $GITHUB_ENV
|
||||
|
||||
- name: Prep - setup BATS
|
||||
- name: Prep - setup Bats and bats libs
|
||||
if: ${{ github.event.inputs.skipTests != 'true' }}
|
||||
uses: mig4/setup-bats@v1
|
||||
uses: bats-core/bats-action@472edde1138d59aca53ff162fb8d996666d21e4a # 2.0.0
|
||||
with:
|
||||
bats-version: 1.9.0
|
||||
|
||||
- name: Prep - setup Bats libs
|
||||
if: ${{ github.event.inputs.skipTests != 'true' }}
|
||||
uses: brokenpip3/setup-bats-libs@0.1.0
|
||||
support-path: "${{ github.workspace }}/.bats/bats-support"
|
||||
assert-path: "${{ github.workspace }}/.bats/bats-assert"
|
||||
detik-path: "${{ github.workspace }}/.bats/bats-detik"
|
||||
file-path: "${{ github.workspace }}/.bats/bats-file"
|
||||
|
||||
- name: Prep - go environment
|
||||
uses: actions/setup-go@v2
|
||||
uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5
|
||||
with:
|
||||
go-version: ${{ env.GO_VERSION }}
|
||||
|
||||
|
|
@ -57,12 +49,15 @@ jobs:
|
|||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install socat
|
||||
sudo mkdir -p $HOME/.kube $HOME/.minikube
|
||||
sudo chown -R $USER $HOME/.kube $HOME/.minikube
|
||||
make minikube-start \
|
||||
MINIKUBE_DRIVER='docker' \
|
||||
MEMORY_AMOUNT=${{ env.MINIKUBE_MEMORY_AMOUNT }} \
|
||||
CPUS_NUMBER=${{ env.MINIKUBE_CPUS_NUMBER }}
|
||||
sudo mkdir -p $HOME/.kube
|
||||
sudo chown -R $USER $HOME/.kube
|
||||
|
||||
- name: Prep - Kind setup
|
||||
if: ${{ github.event.inputs.skipTests != 'true' }}
|
||||
uses: helm/kind-action@a1b0e391336a6ee6713a0583f8c6240d70863de3 # v1.12.0
|
||||
with:
|
||||
cluster_name: ${{env.KIND_CLUSTER_NAME}}
|
||||
config: kind-cluster.yaml
|
||||
|
||||
- name: Test - e2e
|
||||
if: ${{ github.event.inputs.skipTests != 'true' }}
|
||||
|
|
@ -73,26 +68,16 @@ jobs:
|
|||
run: |
|
||||
git reset --hard
|
||||
make helm-lint
|
||||
eval $(bin/minikube docker-env)
|
||||
make helm-e2e E2E_TEST_ARGS='-ginkgo.v'
|
||||
|
||||
- name: Prep - Destroy minikube
|
||||
if: ${{ github.event.inputs.skipTests != 'true' }}
|
||||
run: |
|
||||
make minikube-destroy
|
||||
|
||||
- name: Prep - Kind setup
|
||||
if: ${{ github.event.inputs.skipTests != 'true' }}
|
||||
uses: helm/kind-action@v1.5.0
|
||||
with:
|
||||
cluster_name: ${{env.KIND_CLUSTER_NAME}}
|
||||
|
||||
- name: Test - bats
|
||||
env:
|
||||
BATS_LIB_PATH: "${{ github.workspace }}/.bats"
|
||||
if: ${{ github.event.inputs.skipTests != 'true' }}
|
||||
run: make bats-tests
|
||||
|
||||
- name: Post - Login to Quay.io
|
||||
uses: docker/login-action@v2
|
||||
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
|
||||
with:
|
||||
registry: quay.io
|
||||
username: ${{ secrets.QUAYIO_USERNAME }}
|
||||
|
|
|
|||
|
|
@ -9,18 +9,18 @@ jobs:
|
|||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up env vars
|
||||
run: |
|
||||
echo "GO111MODULE=on" >> $GITHUB_ENV
|
||||
echo "GO_VERSION=v$(sed -n 's/GO_VERSION=//p' config.base.env)" >> $GITHUB_ENV
|
||||
echo "GO_VERSION=v$(sed -n 's/GO_VERSION=//p' config.base.env | tr -d '\n' | tr -d '"')" >> $GITHUB_ENV
|
||||
echo "GOPATH=/home/runner/go" >> $GITHUB_ENV
|
||||
|
||||
- name: Prepare go environment
|
||||
uses: actions/setup-go@v2
|
||||
uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5
|
||||
with:
|
||||
go-version: ${{ env.GO_VERSION }}
|
||||
|
||||
|
|
@ -40,12 +40,12 @@ jobs:
|
|||
echo "VERSION=$(cat VERSION.txt)" >> $GITHUB_ENV
|
||||
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda # v2
|
||||
with:
|
||||
tag_name: ${{ env.VERSION }}
|
||||
|
||||
- name: Login to Quay.io
|
||||
uses: docker/login-action@v2
|
||||
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
|
||||
with:
|
||||
registry: quay.io
|
||||
username: ${{ secrets.QUAYIO_USERNAME }}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,126 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../" && pwd)"
|
||||
|
||||
PLUGINS=(
|
||||
"configuration-as-code"
|
||||
"git"
|
||||
"job-dsl"
|
||||
"kubernetes"
|
||||
"kubernetes-credentials-provider"
|
||||
"workflow-aggregator"
|
||||
)
|
||||
|
||||
version_compare() {
|
||||
local ver1="$1"
|
||||
local ver2="$2"
|
||||
|
||||
ver1=$(echo "$ver1" | sed 's/\([0-9.]*\).*/\1/')
|
||||
ver2=$(echo "$ver2" | sed 's/\([0-9.]*\).*/\1/')
|
||||
|
||||
if [ "$ver1" = "$ver2" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
local sorted=$(printf '%s\n%s' "$ver1" "$ver2" | sort -V)
|
||||
local first=$(echo "$sorted" | head -n1)
|
||||
|
||||
if [ "$first" = "$ver1" ]; then
|
||||
return 1
|
||||
else
|
||||
return 2
|
||||
fi
|
||||
}
|
||||
|
||||
fetch_update_center_data() {
|
||||
local jenkins_version="$1"
|
||||
local url="https://updates.jenkins.io/update-center.actual.json?version=${jenkins_version}"
|
||||
local data=$(curl -s -L -f "$url")
|
||||
|
||||
if ! echo "$data" | jq . > /dev/null 2>&1; then
|
||||
echo "error something happened" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "$data"
|
||||
}
|
||||
|
||||
find_compatible_version() {
|
||||
local plugin_id="$1"
|
||||
local jenkins_version="$2"
|
||||
local update_data="$3"
|
||||
local plugin_data=$(echo "$update_data" | jq ".plugins[\"$plugin_id\"]")
|
||||
local plugin_version=$(echo "$plugin_data" | jq -r '.version')
|
||||
local compatible_since=$(echo "$plugin_data" | jq -r '.compatibleSinceVersion // empty')
|
||||
|
||||
if [ -n "$compatible_since" ]; then
|
||||
version_compare "$jenkins_version" "$compatible_since"
|
||||
local result=$?
|
||||
if [ $result -eq 1 ]; then
|
||||
echo "Error: Plugin '$plugin_id' requires Jenkins $compatible_since or newer" >&2
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "$plugin_version"
|
||||
}
|
||||
|
||||
update_go_file() {
|
||||
local file_path="$1"
|
||||
local plugin_id="$2"
|
||||
local new_version="$3"
|
||||
local dry_run="$4"
|
||||
|
||||
local var_name=""
|
||||
case "$plugin_id" in
|
||||
"configuration-as-code") var_name="configurationAsCodePlugin" ;;
|
||||
"git") var_name="gitPlugin" ;;
|
||||
"job-dsl") var_name="jobDslPlugin" ;;
|
||||
"kubernetes") var_name="kubernetesPlugin" ;;
|
||||
"kubernetes-credentials-provider") var_name="kubernetesCredentialsProviderPlugin" ;;
|
||||
"workflow-aggregator") var_name="workflowAggregatorPlugin" ;;
|
||||
esac
|
||||
|
||||
local relative_path=$(realpath --relative-to="$PROJECT_ROOT" "$file_path")
|
||||
local new_line=" ${var_name} = \"${plugin_id}:${new_version}\""
|
||||
|
||||
if [ "$dry_run" = "true" ]; then
|
||||
echo "$relative_path: $plugin_id:$new_version"
|
||||
else
|
||||
sed -i "s|^[[:space:]]*${var_name}[[:space:]]*=.*|${new_line}|" "$file_path"
|
||||
echo "$relative_path: $var_name -> $plugin_id:$new_version"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
if [ $# -lt 1 ]; then
|
||||
echo "usage: $0 <jenkins-version> [--dry-run]" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local jenkins_version="$1"
|
||||
local dry_run="false"
|
||||
|
||||
if [ $# -gt 1 ] && [ "$2" = "--dry-run" ]; then
|
||||
dry_run="true"
|
||||
fi
|
||||
|
||||
local update_data
|
||||
if ! update_data=$(fetch_update_center_data "$jenkins_version"); then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for plugin_id in "${PLUGINS[@]}"; do
|
||||
local compatible_version
|
||||
if compatible_version=$(find_compatible_version "$plugin_id" "$jenkins_version" "$update_data"); then
|
||||
#printf "%-35s %-30s\n" "$plugin_id" "$compatible_version"
|
||||
update_go_file "$PROJECT_ROOT/pkg/plugins/base_plugins.go" "$plugin_id" "$compatible_version" "$dry_run"
|
||||
update_go_file "$PROJECT_ROOT/test/e2e/configuration_test.go" "$plugin_id" "$compatible_version" "$dry_run"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
main "$@"
|
||||
|
|
@ -94,3 +94,11 @@ testbin/*
|
|||
|
||||
### Bats
|
||||
chart/jenkins-operator/deploy.tmp
|
||||
|
||||
### Nix
|
||||
result
|
||||
|
||||
### website
|
||||
website/node_modules
|
||||
website/public
|
||||
website/.hugo_build.lock
|
||||
|
|
|
|||
|
|
@ -1,30 +1,41 @@
|
|||
run:
|
||||
deadline: 10m
|
||||
deadline: 5m
|
||||
allow-parallel-runners: true
|
||||
skip-files:
|
||||
- api/v1alpha2/zz_generated.deepcopy.go
|
||||
linters-settings:
|
||||
errcheck:
|
||||
check-blank: false
|
||||
ignore: fmt:.*,io/ioutil:^Read.*,Write
|
||||
issues:
|
||||
exclude-use-default: false
|
||||
exclude-rules:
|
||||
- path: "internal/*"
|
||||
linters:
|
||||
- dupl
|
||||
- path: (.+)_test.go
|
||||
linters:
|
||||
- dupl
|
||||
linters:
|
||||
enable-all: true
|
||||
disable:
|
||||
- funlen
|
||||
- gocognit
|
||||
- godox
|
||||
- gomnd
|
||||
- gochecknoglobals
|
||||
- gochecknoinits
|
||||
- lll
|
||||
- prealloc
|
||||
- wsl
|
||||
- gocyclo
|
||||
- scopelint
|
||||
disable-all: true
|
||||
enable:
|
||||
- dupl
|
||||
- gosec
|
||||
- maligned
|
||||
- testpackage
|
||||
- goerr113
|
||||
- errcheck
|
||||
- exportloopref
|
||||
- goconst
|
||||
- gocyclo
|
||||
- gofmt
|
||||
- goimports
|
||||
- gosimple
|
||||
- govet
|
||||
- ineffassign
|
||||
- loggercheck
|
||||
- misspell
|
||||
- nakedret
|
||||
- nestif
|
||||
- godot
|
||||
- staticcheck
|
||||
- typecheck
|
||||
- unconvert
|
||||
- unparam
|
||||
- unused
|
||||
output:
|
||||
sort-results: true
|
||||
sort-order:
|
||||
- file
|
||||
- severity
|
||||
- linter
|
||||
|
|
|
|||
|
|
@ -1,21 +1,26 @@
|
|||
repos:
|
||||
- repo: https://github.com/sirosen/check-jsonschema
|
||||
rev: 0.22.0
|
||||
rev: a167de9d5f4e87e1cdb16cb560aa704b79b6f655 # frozen: 0.32.1
|
||||
hooks:
|
||||
- id: check-github-workflows
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v4.4.0
|
||||
rev: cef0300fd0fc4d2a87a85fa2093c6b283ea36f4b # frozen: v5.0.0
|
||||
hooks:
|
||||
- id: detect-private-key
|
||||
- id: trailing-whitespace
|
||||
- id: end-of-file-fixer
|
||||
- repo: https://github.com/gruntwork-io/pre-commit
|
||||
rev: "v0.1.19"
|
||||
rev: "d9196b3a0a6fbc530f2bacea36c11a3b0214ff13" # frozen: v0.1.28
|
||||
hooks:
|
||||
- id: helmlint
|
||||
- repo: https://github.com/norwoodj/helm-docs
|
||||
rev: "v1.11.0"
|
||||
rev: "37d3055fece566105cf8cff7c17b7b2355a01677" # frozen: v1.14.2
|
||||
hooks:
|
||||
- id: helm-docs
|
||||
args:
|
||||
- --chart-search-root=chart/jenkins-operator
|
||||
- repo: https://github.com/brokenpip3/pre-commit-hooks
|
||||
rev: dd7b3821637ba3c3a8628ad487fd84edec8006f2 # frozen: 0.0.1
|
||||
hooks:
|
||||
- id: github-actions-hash
|
||||
files: ^.github/workflows/.*\.(yml|yaml)$ # limit only to github workflows
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
* @brokenpip3
|
||||
|
|
@ -16,14 +16,14 @@ RUN go mod download
|
|||
|
||||
# Copy the go source
|
||||
COPY api/ api/
|
||||
COPY controllers/ controllers/
|
||||
COPY internal/controller/ internal/controller/
|
||||
COPY internal/ internal/
|
||||
COPY pkg/ pkg/
|
||||
COPY version/ version/
|
||||
COPY main.go main.go
|
||||
COPY cmd/main.go cmd/main.go
|
||||
|
||||
# Build
|
||||
RUN CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH GO111MODULE=on go build -ldflags "-w $CTIMEVAR" -o manager main.go
|
||||
RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} go build -a -o manager cmd/main.go
|
||||
|
||||
# Use distroless as minimal base image to package the manager binary
|
||||
# Refer to https://github.com/GoogleContainerTools/distroless for more details
|
||||
|
|
|
|||
302
Makefile
302
Makefile
|
|
@ -70,16 +70,20 @@ HAS_GOLINT := $(shell which $(PROJECT_DIR)/bin/golangci-lint)
|
|||
lint: ## Verifies `golint` passes
|
||||
@echo "+ $@"
|
||||
ifndef HAS_GOLINT
|
||||
$(call go-get-tool,$(PROJECT_DIR)/bin/golangci-lint,github.com/golangci/golangci-lint/cmd/golangci-lint@v1.26.0)
|
||||
GOBIN=$(PROJECT_DIR)/bin go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.55.0
|
||||
endif
|
||||
@bin/golangci-lint run
|
||||
|
||||
.PHONY: lint-fix
|
||||
lint-fix: golangci-lint ## Run golangci-lint linter and perform fixes
|
||||
@bin/golangci-lint run --fix
|
||||
|
||||
.PHONY: goimports
|
||||
HAS_GOIMPORTS := $(shell which $(PROJECT_DIR)/bin/goimports)
|
||||
goimports: ## Verifies `goimports` passes
|
||||
@echo "+ $@"
|
||||
ifndef HAS_GOIMPORTS
|
||||
$(call go-get-tool,$(PROJECT_DIR)/bin/goimports,golang.org/x/tools/cmd/goimports@v0.1.0)
|
||||
$(call GOBIN=$(PROJECT_DIR)/bin go install golang.org/x/tools/cmd/goimports@v0.1.0)
|
||||
endif
|
||||
@bin/goimports -l -e $(shell find . -type f -name '*.go' -not -path "./vendor/*")
|
||||
|
||||
|
|
@ -89,18 +93,64 @@ test: ## Runs the go tests
|
|||
@RUNNING_TESTS=1 go test -tags "$(BUILDTAGS) cgo" $(PACKAGES_FOR_UNIT_TESTS)
|
||||
|
||||
.PHONY: e2e
|
||||
e2e: deepcopy-gen manifests ## Runs e2e tests, you can use EXTRA_ARGS
|
||||
e2e: deepcopy-gen manifests backup-kind-load jenkins-kind-load ## Runs e2e tests, you can use EXTRA_ARGS
|
||||
@echo "+ $@"
|
||||
RUNNING_TESTS=1 go test -parallel=1 "./test/e2e/" -ginkgo.v -tags "$(BUILDTAGS) cgo" -v -timeout 60m -run "$(E2E_TEST_SELECTOR)" \
|
||||
-jenkins-api-hostname=$(JENKINS_API_HOSTNAME) -jenkins-api-port=$(JENKINS_API_PORT) -jenkins-api-use-nodeport=$(JENKINS_API_USE_NODEPORT) $(E2E_TEST_ARGS)
|
||||
|
||||
.PHONY: jenkins-kind-load
|
||||
jenkins-kind-load: ## Load the jenkins lts version in kind to speed up tests
|
||||
@echo "+ $@"
|
||||
docker pull jenkins/jenkins:$(LATEST_LTS_VERSION)
|
||||
kind load docker-image jenkins/jenkins:$(LATEST_LTS_VERSION) --name $(KIND_CLUSTER_NAME)
|
||||
|
||||
## Backup Section
|
||||
|
||||
.PHONY: backup-kind-load
|
||||
backup-kind-load: ## Load latest backup image in the cluster
|
||||
@echo "+ $@"
|
||||
make -C backup/pvc backup-kind-load
|
||||
|
||||
## HELM Section
|
||||
|
||||
.PHONY: helm
|
||||
HAS_HELM := $(shell command -v helm 2> /dev/null)
|
||||
helm: ## Download helm if it's not present, otherwise symlink
|
||||
@echo "+ $@"
|
||||
ifeq ($(strip $(HAS_HELM)),)
|
||||
mkdir -p $(PROJECT_DIR)/bin
|
||||
curl -Lo $(PROJECT_DIR)/bin/helm.tar.gz https://get.helm.sh/helm-v$(HELM_VERSION)-$(PLATFORM)-amd64.tar.gz && tar xzfv $(PROJECT_DIR)/bin/helm.tar.gz -C $(PROJECT_DIR)/bin
|
||||
mv $(PROJECT_DIR)/bin/$(PLATFORM)-amd64/helm $(PROJECT_DIR)/bin/helm
|
||||
rm -rf $(PROJECT_DIR)/bin/$(PLATFORM)-amd64
|
||||
rm -rf $(PROJECT_DIR)/bin/helm.tar.gz
|
||||
else
|
||||
mkdir -p $(PROJECT_DIR)/bin
|
||||
test -L $(PROJECT_DIR)/bin/helm || ln -sf $(shell command -v helm) $(PROJECT_DIR)/bin/helm
|
||||
endif
|
||||
|
||||
.PHONY: helm-lint
|
||||
helm-lint: helm
|
||||
bin/helm lint chart/jenkins-operator
|
||||
|
||||
.PHONY: helm-release-latest
|
||||
helm-release-latest: helm
|
||||
mkdir -p /tmp/jenkins-operator-charts
|
||||
mv chart/jenkins-operator/*.tgz /tmp/jenkins-operator-charts
|
||||
cd chart && ../bin/helm package jenkins-operator
|
||||
mv chart/jenkins-operator-*.tgz chart/jenkins-operator/
|
||||
bin/helm repo index chart/ --url https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/chart/ --merge chart/index.yaml
|
||||
mv /tmp/jenkins-operator-charts/*.tgz chart/jenkins-operator/
|
||||
|
||||
.PHONY: helm-e2e
|
||||
IMAGE_NAME := quay.io/$(QUAY_ORGANIZATION)/$(QUAY_REGISTRY):$(GITCOMMIT)-amd64
|
||||
|
||||
helm-e2e: helm container-runtime-build-amd64 ## Runs helm e2e tests, you can use EXTRA_ARGS
|
||||
helm-e2e: helm container-runtime-build-amd64 backup-kind-load ## Runs helm e2e tests, you can use EXTRA_ARGS
|
||||
kind load docker-image ${IMAGE_NAME} --name $(KIND_CLUSTER_NAME)
|
||||
@echo "+ $@"
|
||||
RUNNING_TESTS=1 go test -parallel=1 "./test/helm/" -ginkgo.v -tags "$(BUILDTAGS) cgo" -v -timeout 60m -run "$(E2E_TEST_SELECTOR)" -image-name=$(IMAGE_NAME) $(E2E_TEST_ARGS)
|
||||
|
||||
## CODE CHECKS section
|
||||
|
||||
.PHONY: vet
|
||||
vet: ## Verifies `go vet` passes
|
||||
@echo "+ $@"
|
||||
|
|
@ -112,7 +162,7 @@ staticcheck: ## Verifies `staticcheck` passes
|
|||
@echo "+ $@"
|
||||
ifndef HAS_STATICCHECK
|
||||
$(eval TMP_DIR := $(shell mktemp -d))
|
||||
wget -O $(TMP_DIR)/staticcheck_$(PLATFORM)_amd64.tar.gz https://github.com/dominikh/go-tools/releases/download/2020.1.3/staticcheck_$(PLATFORM)_amd64.tar.gz
|
||||
wget -O $(TMP_DIR)/staticcheck_$(PLATFORM)_amd64.tar.gz https://github.com/dominikh/go-tools/releases/download/2023.1.7/staticcheck_$(PLATFORM)_amd64.tar.gz
|
||||
tar zxvf $(TMP_DIR)/staticcheck_$(PLATFORM)_amd64.tar.gz -C $(TMP_DIR)
|
||||
mkdir -p $(PROJECT_DIR)/bin
|
||||
mv $(TMP_DIR)/staticcheck/staticcheck $(PROJECT_DIR)/bin
|
||||
|
|
@ -124,7 +174,8 @@ endif
|
|||
cover: ## Runs go test with coverage
|
||||
@echo "" > coverage.txt
|
||||
@for d in $(PACKAGES); do \
|
||||
IMG_RUNNING_TESTS=1 go test -race -coverprofile=profile.out -covermode=atomic "$$d"; \
|
||||
ENVTEST_K8S_VERSION = 1.26
|
||||
KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) --bin-dir $(LOCALBIN) -p path)" IMG_RUNNING_TESTS=1 go test -race -coverprofile=profile.out -covermode=atomic "$$d"; \
|
||||
if [ -f profile.out ]; then \
|
||||
cat profile.out >> coverage.txt; \
|
||||
rm profile.out; \
|
||||
|
|
@ -140,20 +191,55 @@ install: ## Installs the executable
|
|||
@echo "+ $@"
|
||||
go install -tags "$(BUILDTAGS)" ${GO_LDFLAGS} $(BUILD_PATH)
|
||||
|
||||
.PHONY: update-plugins
|
||||
update-plugins: ## Update jenkins base plugins
|
||||
@echo "+ $@"
|
||||
@JENKINS_VERSION=$$(sed -n 's/LATEST_LTS_VERSION=//p' config.base.env | tr -d '\n' | tr -d '"'); \
|
||||
echo "updating plugins for Jenkins $$JENKINS_VERSION"; \
|
||||
./.github/workflows/update-plugins.sh "$$JENKINS_VERSION"
|
||||
|
||||
.PHONY: update-plugins-dry-run
|
||||
update-plugins-dry-run: ## Update jenkins base plugin -- dry run
|
||||
@echo "+ $@"
|
||||
@JENKINS_VERSION=$$(sed -n 's/LATEST_LTS_VERSION=//p' config.base.env | tr -d '\n' | tr -d '"'); \
|
||||
echo "checking plugins for Jenkins $$JENKINS_VERSION -- dry run"; \
|
||||
./.github/workflows/update-plugins.sh "$$JENKINS_VERSION" --dry-run
|
||||
|
||||
.PHONY: update-jenkins-lts
|
||||
update-jenkins-lts: ## Fetch latest Jenkins lts version and update if necessary
|
||||
@echo "+ $@"
|
||||
@LATEST_VERSION=$$(curl -s https://www.jenkins.io/changelog-stable/ | grep -oP 'changelog/\K\d+\.\d+\.\d+' | head -1); \
|
||||
CURRENT_VERSION=$$(sed -n 's/LATEST_LTS_VERSION=//p' config.base.env | tr -d '\n' | tr -d '"'); \
|
||||
echo "current version: $$CURRENT_VERSION"; \
|
||||
echo "latest version: $$LATEST_VERSION"; \
|
||||
if [ "$$CURRENT_VERSION" != "$$LATEST_VERSION" ]; then \
|
||||
echo "updating Jenkins lts version from $$CURRENT_VERSION to $$LATEST_VERSION"; \
|
||||
sed -i "s/LATEST_LTS_VERSION=\".*\"/LATEST_LTS_VERSION=\"$$LATEST_VERSION\"/" config.base.env; \
|
||||
$(MAKE) update-lts-version LATEST_LTS_VERSION=$$LATEST_VERSION; \
|
||||
echo "updated Jenkins LTS version to $$LATEST_VERSION"; \
|
||||
else \
|
||||
echo "up to date"; \
|
||||
fi
|
||||
|
||||
.PHONY: update-lts-version
|
||||
update-lts-version: ## Update the latest lts version
|
||||
@echo "+ $@"
|
||||
echo $(LATEST_LTS_VERSION)
|
||||
sed -i 's|jenkins/jenkins:[0-9]\+.[0-9]\+.[0-9]\+|jenkins/jenkins:$(LATEST_LTS_VERSION)|g' chart/jenkins-operator/values.yaml
|
||||
sed -i 's|jenkins/jenkins:[0-9]\+.[0-9]\+.[0-9]\+|jenkins/jenkins:$(LATEST_LTS_VERSION)|g' test/e2e/test_utility.go
|
||||
sed -i 's|jenkins/jenkins:[0-9]\+.[0-9]\+.[0-9]\+|jenkins/jenkins:$(LATEST_LTS_VERSION)|g' test/helm/helm_test.go
|
||||
sed -i 's|jenkins/jenkins:[0-9]\+.[0-9]\+.[0-9]\+|jenkins/jenkins:$(LATEST_LTS_VERSION)|g' pkg/constants/constants.go
|
||||
#TODO: source the version from config.base.env for bats test, no need of hardcoded version
|
||||
sed -i 's|jenkins/jenkins:[0-9]\+.[0-9]\+.[0-9]\+|jenkins/jenkins:$(LATEST_LTS_VERSION)|g' test/bats/1-deploy.bats
|
||||
sed -i 's|jenkins/jenkins:[0-9]\+.[0-9]\+.[0-9]\+|jenkins/jenkins:$(LATEST_LTS_VERSION)|g' test/bats/2-deploy-with-more-options.bats
|
||||
sed -i 's|jenkins/jenkins:[0-9]\+.[0-9]\+.[0-9]\+|jenkins/jenkins:$(LATEST_LTS_VERSION)|g' test/bats/3-deploy-with-webhook.bats
|
||||
|
||||
.PHONY: run
|
||||
run: export WATCH_NAMESPACE = $(NAMESPACE)
|
||||
run: export OPERATOR_NAME = $(NAME)
|
||||
run: fmt vet install-crds build ## Run the executable, you can use EXTRA_ARGS
|
||||
@echo "+ $@"
|
||||
ifeq ($(KUBERNETES_PROVIDER),minikube)
|
||||
ifeq ($(KUBERNETES_PROVIDER),kind)
|
||||
kubectl config use-context $(KUBECTL_CONTEXT)
|
||||
endif
|
||||
ifeq ($(KUBERNETES_PROVIDER),crc)
|
||||
|
|
@ -282,7 +368,7 @@ container-runtime-release: container-runtime-release-version container-runtime-r
|
|||
# so that the user can send e.g. ^C through.
|
||||
INTERACTIVE := $(shell [ -t 0 ] && echo 1 || echo 0)
|
||||
ifeq ($(INTERACTIVE), 1)
|
||||
DOCKER_FLAGS += -t
|
||||
DOCKER_FLAGS += -t
|
||||
endif
|
||||
|
||||
.PHONY: container-runtime-run
|
||||
|
|
@ -292,12 +378,6 @@ container-runtime-run: ## Run the container in docker, you can use EXTRA_ARGS
|
|||
--volume $(HOME)/.kube/config:/home/jenkins-operator/.kube/config \
|
||||
quay.io/${QUAY_ORGANIZATION}/$(QUAY_REGISTRY):$(GITCOMMIT) /usr/bin/jenkins-operator $(OPERATOR_ARGS)
|
||||
|
||||
.PHONY: minikube-run
|
||||
minikube-run: export WATCH_NAMESPACE = $(NAMESPACE)
|
||||
minikube-run: export OPERATOR_NAME = $(NAME)
|
||||
minikube-run: minikube-start run ## Run the operator locally and use minikube as Kubernetes cluster, you can use OPERATOR_ARGS
|
||||
@echo "+ $@"
|
||||
|
||||
.PHONY: crc-run
|
||||
crc-run: export WATCH_NAMESPACE = $(NAMESPACE)
|
||||
crc-run: export OPERATOR_NAME = $(NAME)
|
||||
|
|
@ -320,14 +400,6 @@ ifndef HAS_GEN_CRD_API_REFERENCE_DOCS
|
|||
endif
|
||||
$(GEN_CRD_API)/$(GEN_CRD_API) -config gen-crd-api-config.json -api-dir $(PKG)/api/$(API_VERSION) -template-dir $(GEN_CRD_API)/template -out-file documentation/$(VERSION)/jenkins-$(API_VERSION)-scheme.md
|
||||
|
||||
.PHONY: check-minikube
|
||||
check-minikube: ## Checks if KUBERNETES_PROVIDER is set to minikube
|
||||
@echo "+ $@"
|
||||
@echo "KUBERNETES_PROVIDER '$(KUBERNETES_PROVIDER)'"
|
||||
ifneq ($(KUBERNETES_PROVIDER),minikube)
|
||||
$(error KUBERNETES_PROVIDER not set to 'minikube')
|
||||
endif
|
||||
|
||||
.PHONY: check-crc
|
||||
check-crc: ## Checks if KUBERNETES_PROVIDER is set to crc
|
||||
@echo "+ $@"
|
||||
|
|
@ -336,62 +408,32 @@ ifneq ($(KUBERNETES_PROVIDER),crc)
|
|||
$(error KUBERNETES_PROVIDER not set to 'crc')
|
||||
endif
|
||||
|
||||
.PHONY: helm
|
||||
HAS_HELM := $(shell which $(PROJECT_DIR)/bin/helm)
|
||||
helm: ## Download helm if it's not present
|
||||
@echo "+ $@"
|
||||
ifndef HAS_HELM
|
||||
mkdir -p $(PROJECT_DIR)/bin
|
||||
curl -Lo bin/helm.tar.gz https://get.helm.sh/helm-v$(HELM_VERSION)-$(PLATFORM)-amd64.tar.gz && tar xzfv bin/helm.tar.gz -C $(PROJECT_DIR)/bin
|
||||
mv $(PROJECT_DIR)/bin/$(PLATFORM)-amd64/helm $(PROJECT_DIR)/bin/helm
|
||||
rm -rf $(PROJECT_DIR)/bin/$(PLATFORM)-amd64
|
||||
rm -rf $(PROJECT_DIR)/bin/helm.tar.gz
|
||||
endif
|
||||
|
||||
.PHONY: minikube
|
||||
HAS_MINIKUBE := $(shell which $(PROJECT_DIR)/bin/minikube)
|
||||
minikube: ## Download minikube if it's not present
|
||||
@echo "+ $@"
|
||||
ifndef HAS_MINIKUBE
|
||||
mkdir -p $(PROJECT_DIR)/bin
|
||||
wget -O $(PROJECT_DIR)/bin/minikube https://github.com/kubernetes/minikube/releases/download/v$(MINIKUBE_VERSION)/minikube-$(PLATFORM)-amd64
|
||||
chmod +x $(PROJECT_DIR)/bin/minikube
|
||||
endif
|
||||
|
||||
.PHONY: minikube-start
|
||||
minikube-start: minikube check-minikube ## Start minikube
|
||||
@echo "+ $@"
|
||||
bin/minikube status && exit 0 || \
|
||||
bin/minikube start --kubernetes-version $(MINIKUBE_KUBERNETES_VERSION) --dns-domain=$(CLUSTER_DOMAIN) --extra-config=kubelet.cluster-domain=$(CLUSTER_DOMAIN) --driver=$(MINIKUBE_DRIVER) --memory $(MEMORY_AMOUNT) --cpus $(CPUS_NUMBER)
|
||||
|
||||
.PHONY: minikube-destroy
|
||||
minikube-destroy: ## Stop and destroy minikube
|
||||
@echo "+ $@"
|
||||
bin/minikube stop
|
||||
bin/minikube delete
|
||||
|
||||
.PHONY: kind-setup
|
||||
kind-setup: ## Setup kind cluster
|
||||
@echo "+ $@"
|
||||
kind create cluster --name $(KIND_CLUSTER_NAME)
|
||||
kind create cluster --config kind-cluster.yaml --name $(KIND_CLUSTER_NAME)
|
||||
|
||||
.PHONY: kind-clean
|
||||
kind-clean: ## Delete kind cluster
|
||||
@echo "+ $@"
|
||||
kind delete cluster --name $(KIND_CLUSTER_NAME)
|
||||
|
||||
.PHONY: bats-tests
|
||||
.PHONY: kind-revamp
|
||||
kind-revamp: kind-clean kind-setup ## Delete and recreate kind cluster
|
||||
@echo "+ $@"
|
||||
|
||||
.PHONY: bats-tests ## Run bats tests
|
||||
IMAGE_NAME := quay.io/$(QUAY_ORGANIZATION)/$(QUAY_REGISTRY):$(GITCOMMIT)-amd64
|
||||
BUILD_PRESENT := $(shell docker images |grep -q ${IMAGE_NAME})
|
||||
ifndef BUILD_PRESENT
|
||||
bats-tests: container-runtime-build-amd64 ## Run bats tests
|
||||
bats-tests: backup-kind-load container-runtime-build-amd64 ## Run bats tests
|
||||
@echo "+ $@"
|
||||
kind load docker-image ${IMAGE_NAME} --name $(KIND_CLUSTER_NAME)
|
||||
OPERATOR_IMAGE="${IMAGE_NAME}" TERM=xterm bats -T -p -x test/bats
|
||||
OPERATOR_IMAGE="${IMAGE_NAME}" TERM=xterm bats -T -p test/bats$(if $(BATS_TEST_PATH),/${BATS_TEST_PATH})
|
||||
else
|
||||
bats-tests: ## Run bats tests
|
||||
bats-tests: backup-kind-load
|
||||
@echo "+ $@"
|
||||
OPERATOR_IMAGE="${IMAGE_NAME}" TERM=xterm bats -T -p -x test/bats
|
||||
OPERATOR_IMAGE="${IMAGE_NAME}" TERM=xterm bats -T -p test/bats$(if $(BATS_TEST_PATH),/${BATS_TEST_PATH})
|
||||
endif
|
||||
|
||||
.PHONY: crc-start
|
||||
|
|
@ -455,32 +497,19 @@ ifneq ($(GITUNTRACKEDCHANGES),)
|
|||
endif
|
||||
ifneq ($(GITIGNOREDBUTTRACKEDCHANGES),)
|
||||
@echo "Ignored but tracked files:"
|
||||
@git ls-files -i -c --exclude-standard
|
||||
@git ls-files -i -o --exclude-standard
|
||||
@echo
|
||||
endif
|
||||
@echo "Dependencies:"
|
||||
go mod vendor -v
|
||||
@echo
|
||||
|
||||
.PHONY: helm-lint
|
||||
helm-lint: helm
|
||||
@echo "+ $@"
|
||||
bin/helm lint chart/jenkins-operator
|
||||
|
||||
.PHONY: helm-release-latest
|
||||
helm-release-latest: helm
|
||||
@echo "+ $@"
|
||||
mkdir -p /tmp/jenkins-operator-charts
|
||||
mv chart/jenkins-operator/*.tgz /tmp/jenkins-operator-charts
|
||||
cd chart && ../bin/helm package jenkins-operator
|
||||
mv chart/jenkins-operator-*.tgz chart/jenkins-operator/
|
||||
bin/helm repo index chart/ --url https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/chart/ --merge chart/index.yaml
|
||||
mv /tmp/jenkins-operator-charts/*.tgz chart/jenkins-operator/
|
||||
|
||||
# Download and build hugo extended locally if necessary
|
||||
HUGO_PATH = $(shell pwd)/bin/hugo
|
||||
HUGO_VERSION = v0.113.0
|
||||
HUGO_VERSION = v0.99.1
|
||||
HAS_HUGO := $(shell $(HUGO_PATH)/hugo version 2>&- | grep $(HUGO_VERSION))
|
||||
.PHONY: hugo
|
||||
hugo:
|
||||
ifeq ($(HAS_HUGO), )
|
||||
@echo "Installing Hugo $(HUGO_VERSION)"
|
||||
|
|
@ -503,59 +532,77 @@ run-docs: hugo
|
|||
|
||||
##################### FROM OPERATOR SDK ########################
|
||||
# Install CRDs into a cluster
|
||||
.PHONY: install-crds
|
||||
install-crds: manifests kustomize
|
||||
$(KUSTOMIZE) build config/crd | kubectl apply -f -
|
||||
|
||||
# Uninstall CRDs from a cluster
|
||||
ifndef ignore-not-found
|
||||
ignore-not-found = false
|
||||
endif
|
||||
.PHONY: uninstall-crds
|
||||
uninstall-crds: manifests kustomize
|
||||
$(KUSTOMIZE) build config/crd | kubectl delete -f -
|
||||
$(KUSTOMIZE) build config/crd | kubectl delete --ignore-not-found=$(ignore-not-found) -f -
|
||||
|
||||
# Deploy controller in the configured Kubernetes cluster in ~/.kube/config
|
||||
.PHONY: deploy
|
||||
deploy: manifests kustomize
|
||||
cd config/manager && $(KUSTOMIZE) edit set image controller=quay.io/$(QUAY_ORGANIZATION)/$(QUAY_REGISTRY):$(GITCOMMIT)
|
||||
$(KUSTOMIZE) build config/default | kubectl apply -f -
|
||||
|
||||
# UnDeploy controller from the configured Kubernetes cluster in ~/.kube/config
|
||||
.PHONY: undeploy
|
||||
undeploy:
|
||||
$(KUSTOMIZE) build config/default | kubectl delete -f -
|
||||
$(KUSTOMIZE) build config/default | kubectl delete --ignore-not-found=$(ignore-not-found) -f -
|
||||
|
||||
# Generate manifests e.g. CRD, RBAC etc.
|
||||
.PHONY: manifests
|
||||
manifests: controller-gen
|
||||
$(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases
|
||||
$(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases
|
||||
|
||||
# Generate code
|
||||
.PHONY: generate
|
||||
generate: controller-gen
|
||||
$(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="./..."
|
||||
|
||||
# Download controller-gen locally if necessary
|
||||
CONTROLLER_GEN = $(shell pwd)/bin/controller-gen
|
||||
controller-gen:
|
||||
$(call go-get-tool,$(CONTROLLER_GEN),sigs.k8s.io/controller-tools/cmd/controller-gen@v0.4.1)
|
||||
##@ Build Dependencies
|
||||
|
||||
# Download kustomize locally if necessary
|
||||
KUSTOMIZE = $(shell pwd)/bin/kustomize
|
||||
kustomize:
|
||||
$(call go-get-tool,$(KUSTOMIZE),sigs.k8s.io/kustomize/kustomize/v3@v3.8.7)
|
||||
## Location to install dependencies to
|
||||
LOCALBIN ?= $(shell pwd)/bin
|
||||
$(LOCALBIN):
|
||||
mkdir -p $(LOCALBIN)
|
||||
|
||||
# go-get-tool will 'go get' any package $2 and install it to $1.
|
||||
define go-get-tool
|
||||
@[ -f $(1) ] || { \
|
||||
set -e ;\
|
||||
TMP_DIR=$$(mktemp -d) ;\
|
||||
cd $$TMP_DIR ;\
|
||||
go mod init tmp ;\
|
||||
echo "Downloading $(2)" ;\
|
||||
GOBIN=$(PROJECT_DIR)/bin go get $(2) ;\
|
||||
rm -rf $$TMP_DIR ;\
|
||||
}
|
||||
endef
|
||||
## Tool Binaries
|
||||
KUSTOMIZE ?= $(LOCALBIN)/kustomize
|
||||
CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen
|
||||
ENVTEST ?= $(LOCALBIN)/setup-envtest
|
||||
|
||||
## Tool Versions
|
||||
KUSTOMIZE_VERSION ?= v5.3.0
|
||||
CONTROLLER_TOOLS_VERSION ?= v0.14.0
|
||||
|
||||
KUSTOMIZE_INSTALL_SCRIPT ?= "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh"
|
||||
.PHONY: kustomize
|
||||
kustomize: $(KUSTOMIZE) ## Download kustomize locally if necessary.
|
||||
$(KUSTOMIZE): $(LOCALBIN)
|
||||
test -s $(LOCALBIN)/kustomize || { curl -s $(KUSTOMIZE_INSTALL_SCRIPT) | bash -s -- $(subst v,,$(KUSTOMIZE_VERSION)) $(LOCALBIN); }
|
||||
|
||||
.PHONY: controller-gen
|
||||
controller-gen: $(CONTROLLER_GEN) ## Download controller-gen locally if necessary.
|
||||
$(CONTROLLER_GEN): $(LOCALBIN)
|
||||
test -s $(LOCALBIN)/controller-gen || GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-tools/cmd/controller-gen@$(CONTROLLER_TOOLS_VERSION)
|
||||
|
||||
.PHONY: envtest
|
||||
envtest: $(ENVTEST) ## Download envtest-setup locally if necessary.
|
||||
$(ENVTEST): $(LOCALBIN)
|
||||
test -s $(LOCALBIN)/setup-envtest || GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-runtime/tools/setup-envtest@release-0.17
|
||||
|
||||
.PHONY: operator-sdk
|
||||
HAS_OPERATOR_SDK := $(shell which $(PROJECT_DIR)/bin/operator-sdk)
|
||||
operator-sdk: # Download operator-sdk locally if necessary
|
||||
@echo "+ $@"
|
||||
ifndef HAS_OPERATOR_SDK
|
||||
wget -O $(PROJECT_DIR)/bin/operator-sdk https://github.com/operator-framework/operator-sdk/releases/download/v1.3.0/operator-sdk_$(PLATFORM)_amd64
|
||||
wget -O $(PROJECT_DIR)/bin/operator-sdk https://github.com/operator-framework/operator-sdk/releases/download/v${OPERATOR_SDK_VERSION}/operator-sdk_$(PLATFORM)_amd64
|
||||
chmod +x $(PROJECT_DIR)/bin/operator-sdk
|
||||
endif
|
||||
|
||||
|
|
@ -564,7 +611,7 @@ endif
|
|||
bundle: manifests operator-sdk kustomize
|
||||
bin/operator-sdk generate kustomize manifests -q
|
||||
cd config/manager && $(KUSTOMIZE) edit set image controller=quay.io/$(QUAY_ORGANIZATION)/$(QUAY_REGISTRY):$(VERSION_TAG)
|
||||
$(KUSTOMIZE) build config/manifests | bin/operator-sdk generate bundle -q --overwrite --version $(VERSION) $(BUNDLE_METADATA_OPTS)
|
||||
$(KUSTOMIZE) build config/manifests | bin/operator-sdk generate bundle $(BUNDLE_GEN_FLAGS)
|
||||
bin/operator-sdk bundle validate ./bundle
|
||||
|
||||
# Build the bundle image.
|
||||
|
|
@ -573,19 +620,64 @@ bundle-build:
|
|||
docker build -f bundle.Dockerfile -t $(BUNDLE_IMG) .
|
||||
|
||||
# Download kubebuilder
|
||||
.PHONY: kubebuilder
|
||||
kubebuilder:
|
||||
mkdir -p ${ENVTEST_ASSETS_DIR}
|
||||
test -f ${ENVTEST_ASSETS_DIR}/setup-envtest.sh || curl -sSLo ${ENVTEST_ASSETS_DIR}/setup-envtest.sh https://raw.githubusercontent.com/kubernetes-sigs/controller-runtime/v0.7.0/hack/setup-envtest.sh
|
||||
source ${ENVTEST_ASSETS_DIR}/setup-envtest.sh; fetch_envtest_tools $(ENVTEST_ASSETS_DIR); setup_envtest_env $(ENVTEST_ASSETS_DIR);
|
||||
|
||||
# install cert-manager v1.5.1
|
||||
install-cert-manager: minikube-start
|
||||
install-cert-manager: kind-setup
|
||||
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.1/cert-manager.yaml
|
||||
|
||||
uninstall-cert-manager: minikube-start
|
||||
uninstall-cert-manager: kind-setup
|
||||
kubectl delete -f https://github.com/jetstack/cert-manager/releases/download/v1.5.1/cert-manager.yaml
|
||||
|
||||
# Deploy the operator locally along with webhook using helm charts
|
||||
.PHONY: deploy-webhook
|
||||
deploy-webhook: container-runtime-build-amd64
|
||||
@echo "+ $@"
|
||||
bin/helm upgrade jenkins chart/jenkins-operator --install --set-string operator.image=${IMAGE_NAME} --set webhook.enabled=true --set jenkins.enabled=false
|
||||
|
||||
# https://sdk.operatorframework.io/docs/upgrading-sdk-version/v1.6.1/#gov2-gov3-ansiblev1-helmv1-add-opm-and-catalog-build-makefile-targets
|
||||
.PHONY: opm
|
||||
OPM = ./bin/opm
|
||||
opm:
|
||||
ifeq (,$(wildcard $(OPM)))
|
||||
ifeq (,$(shell which opm 2>/dev/null))
|
||||
@{ \
|
||||
set -e ;\
|
||||
mkdir -p $(dir $(OPM)) ;\
|
||||
curl -sSLo $(OPM) https://github.com/operator-framework/operator-registry/releases/download/v1.23.0/$${OS}-$${ARCH}-opm ;\
|
||||
chmod +x $(OPM) ;\
|
||||
}
|
||||
else
|
||||
OPM = $(shell which opm)
|
||||
endif
|
||||
endif
|
||||
BUNDLE_IMGS ?= $(BUNDLE_IMG)
|
||||
CATALOG_IMG ?= $(IMAGE_TAG_BASE)-catalog:v$(VERSION) ifneq ($(origin CATALOG_BASE_IMG), undefined) FROM_INDEX_OPT := --from-index $(CATALOG_BASE_IMG) endif
|
||||
.PHONY: catalog-build
|
||||
catalog-build: opm
|
||||
$(OPM) index add --container-tool docker --mode semver --tag $(CATALOG_IMG) --bundles $(BUNDLE_IMGS) $(FROM_INDEX_OPT)
|
||||
|
||||
.PHONY: catalog-push
|
||||
catalog-push: ## Push the catalog image.
|
||||
$(MAKE) docker-push IMG=$(CATALOG_IMG)
|
||||
|
||||
# PLATFORMS defines the target platforms for the manager image be build to provide support to multiple
|
||||
# architectures. (i.e. make docker-buildx IMG=myregistry/mypoperator:0.0.1). To use this option you need to:
|
||||
# - able to use docker buildx . More info: https://docs.docker.com/build/buildx/
|
||||
# - have enable BuildKit, More info: https://docs.docker.com/develop/develop-images/build_enhancements/
|
||||
# - be able to push the image for your registry (i.e. if you do not inform a valid value via IMG=<myregistry/image:<tag>> than the export will fail)
|
||||
# To properly provided solutions that supports more than one platform you should use this option.
|
||||
PLATFORMS ?= linux/arm64,linux/amd64,linux/s390x,linux/ppc64le
|
||||
.PHONY: docker-buildx
|
||||
docker-buildx: test ## Build and push docker image for the manager for cross-platform support
|
||||
# copy existing Dockerfile and insert --platform=${BUILDPLATFORM} into Dockerfile.cross, and preserve the original Dockerfile
|
||||
sed -e '1 s/\(^FROM\)/FROM --platform=\$$\{BUILDPLATFORM\}/; t' -e ' 1,// s//FROM --platform=\$$\{BUILDPLATFORM\}/' Dockerfile > Dockerfile.cross
|
||||
- docker buildx create --name project-v3-builder
|
||||
docker buildx use project-v3-builder
|
||||
- docker buildx build --push --platform=$(PLATFORMS) --tag ${IMG} -f Dockerfile.cross
|
||||
- docker buildx rm project-v3-builder
|
||||
rm Dockerfile.cross
|
||||
|
|
|
|||
15
PROJECT
15
PROJECT
|
|
@ -1,14 +1,21 @@
|
|||
domain: jenkins.io
|
||||
layout: go.kubebuilder.io/v3
|
||||
layout: go.kubebuilder.io/v4
|
||||
projectName: jenkins-operator
|
||||
repo: github.com/jenkinsci/kubernetes-operator
|
||||
resources:
|
||||
- crdVersion: v1
|
||||
- api:
|
||||
crdVersion: v1
|
||||
namespaced: true
|
||||
# TODO(user): Uncomment the below line if this resource implements a controller, else delete it.
|
||||
# controller: true
|
||||
domain: jenkins.io
|
||||
group: jenkins.io
|
||||
kind: Jenkins
|
||||
path: github.com/jenkinsci/kubernetes-operator/api/v1alpha2
|
||||
version: v1alpha2
|
||||
webhookVersion: v1
|
||||
version: 3-alpha
|
||||
webhooks:
|
||||
webhookVersion: v1
|
||||
version: "3"
|
||||
plugins:
|
||||
manifests.sdk.operatorframework.io/v2: {}
|
||||
scorecard.sdk.operatorframework.io/v2: {}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,16 @@
|
|||
# Jenkins Operator
|
||||
|
||||
[](https://github.com/jenkinsci/kubernetes-operator/releases/tag/v0.8.0-beta2)
|
||||
[](https://github.com/jenkinsci/kubernetes-operator/releases/tag/v0.8.0)
|
||||
[](https://github.com/jenkinsci/kubernetes-operator/actions/workflows/auto-tests-e2e.yaml)
|
||||
[](https://goreportcard.com/report/github.com/jenkinsci/kubernetes-operator)
|
||||
[](https://gitter.im/jenkinsci/kubernetes-operator)
|
||||
|
||||

|
||||
<a href="">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/assets/jenkins_gopher_wide_exp_dark.png">
|
||||
<img src="https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/assets/jenkins_gopher_wide_exp.png">
|
||||
</picture>
|
||||
</a>
|
||||
|
||||
## What's the Jenkins Operator?
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
v0.8.0-beta2
|
||||
v0.9.0-beta1
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ type JenkinsSpec struct {
|
|||
Master JenkinsMaster `json:"master"`
|
||||
|
||||
// SeedJobs defines list of Jenkins Seed Job configurations
|
||||
// More info: https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configuration#configure-seed-jobs-and-pipelines
|
||||
// More info: https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configuring-seed-jobs-and-pipelines/
|
||||
// +optional
|
||||
SeedJobs []SeedJob `json:"seedJobs,omitempty"`
|
||||
|
||||
|
|
@ -46,12 +46,12 @@ type JenkinsSpec struct {
|
|||
SlaveService Service `json:"slaveService,omitempty"`
|
||||
|
||||
// Backup defines configuration of Jenkins backup
|
||||
// More info: https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configure-backup-and-restore/
|
||||
// More info: https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configuring-backup-and-restore/
|
||||
// +optional
|
||||
Backup Backup `json:"backup,omitempty"`
|
||||
|
||||
// Backup defines configuration of Jenkins backup restore
|
||||
// More info: https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configure-backup-and-restore/
|
||||
// More info: https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configuring-backup-and-restore/
|
||||
// +optional
|
||||
Restore Restore `json:"restore,omitempty"`
|
||||
|
||||
|
|
@ -311,6 +311,7 @@ type JenkinsMaster struct {
|
|||
// periodSeconds: 10
|
||||
// successThreshold: 1
|
||||
// timeoutSeconds: 5
|
||||
// lifecycle: {}
|
||||
// name: jenkins-master
|
||||
// readinessProbe:
|
||||
// failureThreshold: 3
|
||||
|
|
@ -376,6 +377,12 @@ type JenkinsMaster struct {
|
|||
// +optional
|
||||
LatestPlugins *bool `json:"latestPlugins,omitempty"`
|
||||
|
||||
// Allow to skip installation of both BasePlugins and Plugins.
|
||||
// Requires using a custom image which includes the BasePlugins.
|
||||
// Defaults to false.
|
||||
// +optional
|
||||
SkipPlugins *bool `json:"skipPlugins,omitempty"`
|
||||
|
||||
// DisableCSRFProtection allows you to toggle CSRF Protection on Jenkins
|
||||
DisableCSRFProtection bool `json:"disableCSRFProtection"`
|
||||
|
||||
|
|
@ -386,6 +393,13 @@ type JenkinsMaster struct {
|
|||
// HostAliases for Jenkins master pod and SeedJob agent
|
||||
// +optional
|
||||
HostAliases []corev1.HostAlias `json:"hostAliases,omitempty"`
|
||||
|
||||
// The grace period is the duration in seconds after the processes running in the pod are sent
|
||||
// a termination signal and the time when the processes are forcibly halted with a kill signal.
|
||||
// Set this value longer than the expected cleanup time for your process.
|
||||
// Defaults to 30 seconds.
|
||||
// +optional
|
||||
TerminationGracePeriodSeconds *int64 `json:"terminationGracePeriodSeconds,omitempty"`
|
||||
}
|
||||
|
||||
// Service defines Kubernetes service attributes
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@ import (
|
|||
"encoding/json"
|
||||
"errors"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"os"
|
||||
"time"
|
||||
|
|
@ -34,6 +33,7 @@ import (
|
|||
ctrl "sigs.k8s.io/controller-runtime"
|
||||
logf "sigs.k8s.io/controller-runtime/pkg/log"
|
||||
"sigs.k8s.io/controller-runtime/pkg/webhook"
|
||||
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
|
||||
)
|
||||
|
||||
var (
|
||||
|
|
@ -44,11 +44,11 @@ var (
|
|||
)
|
||||
|
||||
const (
|
||||
Hosturl = "https://ci.jenkins.io/job/Infra/job/plugin-site-api/job/generate-data/lastSuccessfulBuild/artifact/plugins.json.gzip"
|
||||
CompressedFilePath = "/tmp/plugins.json.gzip"
|
||||
PluginDataFile = "/tmp/plugins.json"
|
||||
shortenedCheckingPeriod = 1 * time.Hour
|
||||
defaultCheckingPeriod = 12 * time.Minute
|
||||
Hosturl = "https://ci.jenkins.io/job/Infra/job/plugin-site-api/job/generate-data/lastSuccessfulBuild/artifact/plugins.json.gzip"
|
||||
PluginDataFileCompressedPath = "/tmp/plugins.json.gzip"
|
||||
PluginDataFile = "/tmp/plugins.json"
|
||||
shortenedCheckingPeriod = 1 * time.Hour
|
||||
defaultCheckingPeriod = 12 * time.Minute
|
||||
)
|
||||
|
||||
func (in *Jenkins) SetupWebhookWithManager(mgr ctrl.Manager) error {
|
||||
|
|
@ -58,30 +58,31 @@ func (in *Jenkins) SetupWebhookWithManager(mgr ctrl.Manager) error {
|
|||
}
|
||||
|
||||
// TODO(user): change verbs to "verbs=create;update;delete" if you want to enable deletion validation.
|
||||
// +kubebuilder:webhook:path=/validate-jenkins-io-jenkins-io-v1alpha2-jenkins,mutating=false,failurePolicy=fail,sideEffects=None,groups=jenkins.io.jenkins.io,resources=jenkins,verbs=create;update,versions=v1alpha2,name=vjenkins.kb.io,admissionReviewVersions={v1,v1beta1}
|
||||
// +kubebuilder:webhook:path=/validate-jenkins-io-jenkins-io-v1alpha2-jenkins,mutating=false,failurePolicy=fail,sideEffects=None,groups=jenkins.io.jenkins.io,resources=jenkins,verbs=create;update,versions=v1alpha2,name=vjenkins.kb.io,admissionReviewVersions={v1}
|
||||
|
||||
// ValidateCreate implements webhook.Validator so a webhook will be registered for the type
|
||||
func (in *Jenkins) ValidateCreate() error {
|
||||
func (in *Jenkins) ValidateCreate() (admission.Warnings, error) {
|
||||
if in.Spec.ValidateSecurityWarnings {
|
||||
jenkinslog.Info("validate create", "name", in.Name)
|
||||
return Validate(*in)
|
||||
err := Validate(*in)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type
|
||||
func (in *Jenkins) ValidateUpdate(old runtime.Object) error {
|
||||
func (in *Jenkins) ValidateUpdate(old runtime.Object) (admission.Warnings, error) {
|
||||
if in.Spec.ValidateSecurityWarnings {
|
||||
jenkinslog.Info("validate update", "name", in.Name)
|
||||
return Validate(*in)
|
||||
return nil, Validate(*in)
|
||||
}
|
||||
|
||||
return nil
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (in *Jenkins) ValidateDelete() error {
|
||||
return nil
|
||||
func (in *Jenkins) ValidateDelete() (admission.Warnings, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
type SecurityValidator struct {
|
||||
|
|
@ -263,11 +264,17 @@ func (in *SecurityValidator) fetchPluginData() error {
|
|||
}
|
||||
|
||||
func (in *SecurityValidator) download() error {
|
||||
out, err := os.Create(CompressedFilePath)
|
||||
pluginDataFileCompressed, err := os.Create(PluginDataFileCompressedPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer out.Close()
|
||||
|
||||
// ensure pluginDataFileCompressed is closed
|
||||
defer func() {
|
||||
if err := pluginDataFileCompressed.Close(); err != nil {
|
||||
jenkinslog.V(log.VDebug).Info("Failed to close SecurityValidator.download io", "error", err)
|
||||
}
|
||||
}()
|
||||
|
||||
req, err := http.NewRequest(http.MethodGet, Hosturl, nil)
|
||||
if err != nil {
|
||||
|
|
@ -284,30 +291,45 @@ func (in *SecurityValidator) download() error {
|
|||
return err
|
||||
}
|
||||
|
||||
defer response.Body.Close()
|
||||
defer httpResponseCloser(response)
|
||||
|
||||
_, err = io.Copy(pluginDataFileCompressed, response.Body)
|
||||
|
||||
_, err = io.Copy(out, response.Body)
|
||||
return err
|
||||
}
|
||||
|
||||
func (in *SecurityValidator) extract() error {
|
||||
reader, err := os.Open(CompressedFilePath)
|
||||
reader, err := os.Open(PluginDataFileCompressedPath)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer reader.Close()
|
||||
defer func() {
|
||||
if err := reader.Close(); err != nil {
|
||||
log.Log.Error(err, "failed to close SecurityValidator.extract.reader ")
|
||||
}
|
||||
}()
|
||||
|
||||
archive, err := gzip.NewReader(reader)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
defer archive.Close()
|
||||
defer func() {
|
||||
if err := archive.Close(); err != nil {
|
||||
log.Log.Error(err, "failed to close SecurityValidator.extract.archive ")
|
||||
}
|
||||
}()
|
||||
writer, err := os.Create(PluginDataFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer writer.Close()
|
||||
|
||||
defer func() {
|
||||
if err := writer.Close(); err != nil {
|
||||
log.Log.Error(err, "failed to close SecurityValidator.extract.writer")
|
||||
}
|
||||
}()
|
||||
|
||||
_, err = io.Copy(writer, archive)
|
||||
return err
|
||||
|
|
@ -319,8 +341,12 @@ func (in *SecurityValidator) cache() error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer jsonFile.Close()
|
||||
byteValue, err := ioutil.ReadAll(jsonFile)
|
||||
defer func() {
|
||||
if err := jsonFile.Close(); err != nil {
|
||||
log.Log.Error(err, "failed to close SecurityValidator.cache.jsonFile")
|
||||
}
|
||||
}()
|
||||
byteValue, err := io.ReadAll(jsonFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -346,3 +372,9 @@ func compareVersions(firstVersion string, lastVersion string, pluginVersion stri
|
|||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func httpResponseCloser(response *http.Response) {
|
||||
if err := response.Body.Close(); err != nil {
|
||||
log.Log.Error(err, "failed to close http response body")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ func TestValidate(t *testing.T) {
|
|||
t.Run("Validating when plugins data file is not fetched", func(t *testing.T) {
|
||||
userplugins := []Plugin{{Name: "script-security", Version: "1.77"}, {Name: "git-client", Version: "3.9"}, {Name: "git", Version: "4.8.1"}, {Name: "plain-credentials", Version: "1.7"}}
|
||||
jenkinscr := *createJenkinsCR(userplugins, true)
|
||||
got := jenkinscr.ValidateCreate()
|
||||
_, got := jenkinscr.ValidateCreate()
|
||||
assert.Equal(t, got, errors.New("plugins data has not been fetched"))
|
||||
})
|
||||
|
||||
|
|
@ -95,7 +95,7 @@ func TestValidate(t *testing.T) {
|
|||
{Name: "plain-credentials"}}}
|
||||
userplugins := []Plugin{{Name: "script-security", Version: "1.77"}, {Name: "git-client", Version: "3.9"}, {Name: "git", Version: "4.8.1"}, {Name: "plain-credentials", Version: "1.7"}}
|
||||
jenkinscr := *createJenkinsCR(userplugins, true)
|
||||
got := jenkinscr.ValidateCreate()
|
||||
_, got := jenkinscr.ValidateCreate()
|
||||
assert.Nil(t, got)
|
||||
})
|
||||
|
||||
|
|
@ -113,7 +113,7 @@ func TestValidate(t *testing.T) {
|
|||
}}
|
||||
userplugins := []Plugin{{Name: "google-login", Version: "1.2"}, {Name: "mailer", Version: "1.1"}, {Name: "git", Version: "4.8.1"}, {Name: "command-launcher", Version: "1.6"}, {Name: "workflow-cps", Version: "2.59"}}
|
||||
jenkinscr := *createJenkinsCR(userplugins, true)
|
||||
got := jenkinscr.ValidateCreate()
|
||||
_, got := jenkinscr.ValidateCreate()
|
||||
assert.Equal(t, got, errors.New("security vulnerabilities detected in the following user-defined plugins: \nworkflow-cps:2.59\ngoogle-login:1.2\nmailer:1.1"))
|
||||
})
|
||||
|
||||
|
|
@ -136,19 +136,19 @@ func TestValidate(t *testing.T) {
|
|||
|
||||
userplugins = []Plugin{{Name: "handy-uri-templates-2-api", Version: "2.1.8-1.0"}, {Name: "resource-disposer", Version: "0.8"}, {Name: "jjwt-api", Version: "0.11.2-9.c8b45b8bb173"}, {Name: "blueocean-github-pipeline", Version: "1.2.0-beta-3"}, {Name: "ghprb", Version: "1.39"}}
|
||||
newjenkinscr := *createJenkinsCR(userplugins, true)
|
||||
got := newjenkinscr.ValidateUpdate(&oldjenkinscr)
|
||||
_, got := newjenkinscr.ValidateUpdate(&oldjenkinscr)
|
||||
assert.Equal(t, got, errors.New("security vulnerabilities detected in the following user-defined plugins: \nhandy-uri-templates-2-api:2.1.8-1.0\nresource-disposer:0.8\nblueocean-github-pipeline:1.2.0-beta-3\nghprb:1.39"))
|
||||
})
|
||||
|
||||
t.Run("Validation is turned off", func(t *testing.T) {
|
||||
userplugins := []Plugin{{Name: "google-login", Version: "1.2"}, {Name: "mailer", Version: "1.1"}, {Name: "git", Version: "4.8.1"}, {Name: "command-launcher", Version: "1.6"}, {Name: "workflow-cps", Version: "2.59"}}
|
||||
jenkinscr := *createJenkinsCR(userplugins, false)
|
||||
got := jenkinscr.ValidateCreate()
|
||||
_, got := jenkinscr.ValidateCreate()
|
||||
assert.Nil(t, got)
|
||||
|
||||
userplugins = []Plugin{{Name: "google-login", Version: "1.2"}, {Name: "mailer", Version: "1.1"}, {Name: "git", Version: "4.8.1"}, {Name: "command-launcher", Version: "1.6"}, {Name: "workflow-cps", Version: "2.59"}}
|
||||
newjenkinscr := *createJenkinsCR(userplugins, false)
|
||||
got = newjenkinscr.ValidateUpdate(&jenkinscr)
|
||||
_, got = newjenkinscr.ValidateUpdate(&jenkinscr)
|
||||
assert.Nil(t, got)
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
//go:build !ignore_autogenerated
|
||||
// +build !ignore_autogenerated
|
||||
|
||||
/*
|
||||
Copyright 2021.
|
||||
|
|
@ -357,6 +356,16 @@ func (in *JenkinsMaster) DeepCopyInto(out *JenkinsMaster) {
|
|||
*out = make([]Plugin, len(*in))
|
||||
copy(*out, *in)
|
||||
}
|
||||
if in.LatestPlugins != nil {
|
||||
in, out := &in.LatestPlugins, &out.LatestPlugins
|
||||
*out = new(bool)
|
||||
**out = **in
|
||||
}
|
||||
if in.SkipPlugins != nil {
|
||||
in, out := &in.SkipPlugins, &out.SkipPlugins
|
||||
*out = new(bool)
|
||||
**out = **in
|
||||
}
|
||||
if in.HostAliases != nil {
|
||||
in, out := &in.HostAliases, &out.HostAliases
|
||||
*out = make([]corev1.HostAlias, len(*in))
|
||||
|
|
@ -364,6 +373,11 @@ func (in *JenkinsMaster) DeepCopyInto(out *JenkinsMaster) {
|
|||
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||
}
|
||||
}
|
||||
if in.TerminationGracePeriodSeconds != nil {
|
||||
in, out := &in.TerminationGracePeriodSeconds, &out.TerminationGracePeriodSeconds
|
||||
*out = new(int64)
|
||||
**out = **in
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new JenkinsMaster.
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 242 KiB |
|
|
@ -25,7 +25,7 @@ RUN apt update \
|
|||
"$USER"
|
||||
|
||||
COPY bin/*.sh /home/user/bin/
|
||||
RUN chmod +x /home/user/bin/*.sh
|
||||
RUN chmod -R a+rx /home/user
|
||||
WORKDIR /home/user/bin
|
||||
USER user
|
||||
|
||||
|
|
|
|||
|
|
@ -118,6 +118,12 @@ docker-release-latest: docker-build ## Release image with latest tags (in additi
|
|||
docker-release: docker-release-version docker-release-latest ## Release image with version and latest tags (in addition to build tag)
|
||||
@echo "+ $@"
|
||||
|
||||
.PHONY: backup-kind-load
|
||||
backup-kind-load: docker-build ## Build and load backup img in kind with e2e-test tag
|
||||
@echo "+ $@"
|
||||
docker tag quay.io/$(QUAY_ORGANIZATION)/$(QUAY_REGISTRY)-$(NAME):$(GITCOMMIT) quay.io/$(QUAY_ORGANIZATION)/$(QUAY_REGISTRY)-$(NAME):e2e-test
|
||||
kind load docker-image quay.io/$(QUAY_ORGANIZATION)/$(QUAY_REGISTRY)-$(NAME):e2e-test --name $(KIND_CLUSTER_NAME)
|
||||
|
||||
# if this session isn't interactive, then we don't want to allocate a
|
||||
# TTY, which would fail, but if it is interactive, we do want to attach
|
||||
# so that the user can send e.g. ^C through.
|
||||
|
|
@ -127,7 +133,7 @@ ifeq ($(INTERACTIVE), 1)
|
|||
endif
|
||||
|
||||
.PHONY: docker-run
|
||||
docker-run: docker-build ## Run the container in docker, you can use EXTRA_ARGS
|
||||
docker-run: docker-build
|
||||
@echo "+ $@"
|
||||
docker run --rm -i $(DOCKER_FLAGS) \
|
||||
quay.io/$(QUAY_ORGANIZATION)/$(QUAY_REGISTRY)-$(NAME):$(GITCOMMIT) $(ARGS)
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
v0.2.5
|
||||
v0.4.3
|
||||
|
|
|
|||
|
|
@ -1,36 +1,67 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -eo pipefail
|
||||
source "$(dirname "$0")/utils.sh"
|
||||
|
||||
[[ ! $# -eq 1 ]] && echo "Usage: $0 backup_number" && exit 1;
|
||||
[[ -z "${BACKUP_DIR}" ]] && echo "Required 'BACKUP_DIR' env not set" && exit 1;
|
||||
[[ -z "${JENKINS_HOME}" ]] && echo "Required 'JENKINS_HOME' env not set" && exit 1;
|
||||
BACKUP_TMP_DIR=$(mktemp -d)
|
||||
trap "test -d "${BACKUP_TMP_DIR}" && rm -fr "${BACKUP_TMP_DIR}"" EXIT SIGINT SIGTERM
|
||||
[[ ! $# -eq 1 ]] && _log "ERROR" "Usage: $0 BACKUP_NUMBER" && exit 1
|
||||
[[ -z "${BACKUP_DIR}" ]] && _log "ERROR" "Required 'BACKUP_DIR' env not set" && exit 1
|
||||
[[ -z "${JENKINS_HOME}" ]] && _log "ERROR" "Required 'JENKINS_HOME' env not set" && exit 1
|
||||
BACKUP_RETRY_COUNT=${BACKUP_RETRY_COUNT:-3}
|
||||
BACKUP_RETRY_INTERVAL=${BACKUP_RETRY_INTERVAL:-60}
|
||||
BACKUP_NUMBER=$1
|
||||
TRAP_FILE="/tmp/_backup_${BACKUP_NUMBER}_is_running"
|
||||
|
||||
backup_number=$1
|
||||
echo "Running backup"
|
||||
# --> Check if another backup process is running (operator restart/crash)
|
||||
for ((i=0; i<BACKUP_RETRY_COUNT; i++)); do
|
||||
[[ ! -f "${TRAP_FILE}" ]] && _log "INFO" "[backup] no other backup process are running" && break
|
||||
_log "INFO" "[backup] backup is already running. Waiting for ${BACKUP_RETRY_INTERVAL} seconds..."
|
||||
sleep "${BACKUP_RETRY_INTERVAL}"
|
||||
done
|
||||
[[ -f "${TRAP_FILE}" ]] && { _log "ERROR" "[backup] backup is still running after waiting ${BACKUP_RETRY_COUNT} time ${BACKUP_RETRY_INTERVAL}s. Exiting."; exit 1; }
|
||||
# --< Done
|
||||
|
||||
_log "INFO" "[backup] running backup ${BACKUP_NUMBER}"
|
||||
touch "${TRAP_FILE}"
|
||||
# create temp dir on the same filesystem with a BACKUP_DIR to be able use atomic mv enstead of copy
|
||||
BACKUP_TMP_DIR=$(mktemp -d --tmpdir="${BACKUP_DIR}")
|
||||
|
||||
_clean(){
|
||||
test -d "${BACKUP_TMP_DIR}" && rm -fr "${BACKUP_TMP_DIR}"
|
||||
test -f "${TRAP_FILE}" && rm -f "${TRAP_FILE}"
|
||||
}
|
||||
|
||||
_trap(){
|
||||
_clean
|
||||
_log "ERROR" "[backup] something wrong happened, check the logs"
|
||||
}
|
||||
|
||||
trap '_trap' SIGQUIT SIGINT SIGTERM
|
||||
|
||||
# config.xml in a job directory is a config file that shouldn't be backed up
|
||||
# config.xml in child directories is state that should. For example-
|
||||
# branches/myorg/branches/myrepo/branches/master/config.xml should be retained while
|
||||
# branches/myorg/config.xml should not
|
||||
tar --zstd -C "${JENKINS_HOME}" -cf "${BACKUP_TMP_DIR}/${backup_number}.tar.zstd" \
|
||||
tar --zstd -C "${JENKINS_HOME}" -cf "${BACKUP_TMP_DIR}/${BACKUP_NUMBER}.tar.zstd" \
|
||||
--exclude jobs/*/workspace* \
|
||||
--no-wildcards-match-slash --anchored \
|
||||
--ignore-failed-read \
|
||||
--exclude jobs/*/config.xml -c jobs || ret=$?
|
||||
|
||||
if [[ "$ret" -eq 0 ]]; then
|
||||
echo "Backup was completed without warnings"
|
||||
mv "${BACKUP_TMP_DIR}/${backup_number}.tar.zstd" "${BACKUP_DIR}/${backup_number}.tar.zstd"
|
||||
_log "INFO" "[backup] backup ${BACKUP_NUMBER} was completed without warnings"
|
||||
elif [[ "$ret" -eq 1 ]]; then
|
||||
echo "Backup was completed with some warnings"
|
||||
mv "${BACKUP_TMP_DIR}/${backup_number}.tar.zstd" "${BACKUP_DIR}/${backup_number}.tar.zstd"
|
||||
_log "INFO" "[backup] backup ${BACKUP_NUMBER} was completed with some warnings"
|
||||
else
|
||||
_log "ERROR" "[backup] backup ${BACKUP_NUMBER} failed with error code: $ret"
|
||||
_clean
|
||||
exit "$ret"
|
||||
fi
|
||||
|
||||
rm -rf "${BACKUP_TMP_DIR}"
|
||||
[[ ! -s ${BACKUP_DIR}/${backup_number}.tar.zstd ]] && echo "backup file '${BACKUP_DIR}/${backup_number}.tar.zstd' is empty" && exit 1;
|
||||
mv "${BACKUP_TMP_DIR}/${BACKUP_NUMBER}.tar.zstd" "${BACKUP_DIR}/${BACKUP_NUMBER}.tar.zstd"
|
||||
|
||||
echo Done
|
||||
_log "INFO" "[backup] cleaning ${BACKUP_TMP_DIR} and trap file ${TRAP_FILE}"
|
||||
_clean
|
||||
[[ ! -s ${BACKUP_DIR}/${BACKUP_NUMBER}.tar.zstd ]] && _log "ERROR" "[backup] file '${BACKUP_DIR}/${BACKUP_NUMBER}.tar.zstd' is empty" && exit 1
|
||||
|
||||
_log "INFO" "[backup] ${BACKUP_NUMBER} done"
|
||||
exit 0
|
||||
|
|
|
|||
|
|
@ -1,12 +1,39 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -eo pipefail
|
||||
source "$(dirname "$0")/utils.sh"
|
||||
|
||||
is_backup_not_exist() {
|
||||
local backup_dir="$1"
|
||||
# Save the current value of 'set -e'
|
||||
local previous_e
|
||||
previous_e=$(set +e; :; echo $?)
|
||||
# Temporarily turn off 'set -e'
|
||||
set +e
|
||||
# Run ls command to check if any files matching the pattern exist
|
||||
ls "${backup_dir}"/*.tar.* 1> /dev/null 2>&1
|
||||
# Store the exit status of the ls command
|
||||
local ls_exit_status=$?
|
||||
# Restore the previous value of 'set -e'
|
||||
[ "$previous_e" = "0" ] && set -e
|
||||
# Return true if ls command succeeded (no files found), otherwise return false
|
||||
[ $ls_exit_status -ne 0 ]
|
||||
}
|
||||
|
||||
[[ -z "${BACKUP_DIR}" ]] && { _log "ERROR" "Required 'BACKUP_DIR' env not set"; exit 1; }
|
||||
|
||||
# Check if we have any backup
|
||||
if is_backup_not_exist "${BACKUP_DIR}"; then
|
||||
_log "No backups exist in ${BACKUP_DIR}"
|
||||
echo "-1"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
[[ -z "${BACKUP_DIR}" ]] && echo "Required 'BACKUP_DIR' env not set" && exit 1
|
||||
# Search for all the tar.* inside the backup dir to support the migration between gzip vs zstd
|
||||
latest=$(find ${BACKUP_DIR} -name '*.tar.*' -exec basename {} \; | sort -g | tail -n 1)
|
||||
latest=$(find "${BACKUP_DIR}"/*.tar.* -maxdepth 0 -exec basename {} \; | sort -g | tail -n 1)
|
||||
|
||||
if [[ "${latest}" == "" ]]; then
|
||||
_log "Could not get the latest backup."
|
||||
echo "-1"
|
||||
else
|
||||
echo "${latest%%.*}"
|
||||
|
|
|
|||
|
|
@ -1,29 +1,57 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -eo pipefail
|
||||
source "$(dirname "$0")/utils.sh"
|
||||
|
||||
[[ ! $# -eq 1 ]] && echo "Usage: $0 backup_number" && exit 1
|
||||
[[ -z "${BACKUP_DIR}" ]] && echo "Required 'BACKUP_DIR' env not set" && exit 1;
|
||||
[[ -z "${JENKINS_HOME}" ]] && echo "Required 'JENKINS_HOME' env not set" && exit 1;
|
||||
[[ ! $# -eq 1 ]] && _log "ERROR" "Usage: $0 <backup number>" && exit 1
|
||||
[[ -z "${BACKUP_DIR}" ]] && _log "ERROR" "Required 'BACKUP_DIR' env not set" && exit 1
|
||||
[[ -z "${JENKINS_HOME}" ]] && _log "ERROR" "Required 'JENKINS_HOME' env not set" && exit 1
|
||||
BACKUP_NUMBER=$1
|
||||
RESTORE_RETRY_COUNT=${RESTORE_RETRY_COUNT:-10}
|
||||
RESTORE_RETRY_INTERVAL=${RESTORE_RETRY_INTERVAL:-10}
|
||||
|
||||
backup_number=$1
|
||||
backup_file="${BACKUP_DIR}/${backup_number}"
|
||||
echo "Running restore backup with backup number #${backup_number}"
|
||||
# --> Check if another restore process is running (operator restart/crash)
|
||||
TRAP_FILE="/tmp/_restore_${BACKUP_NUMBER}_is_running"
|
||||
trap "rm -f ${TRAP_FILE}" SIGINT SIGTERM
|
||||
|
||||
if [[ -f "$backup_file.tar.gz" ]]; then
|
||||
echo "Old format tar.gz found, restoring it"
|
||||
for ((i=0; i<RESTORE_RETRY_COUNT; i++)); do
|
||||
[[ ! -f "${TRAP_FILE}" ]] && _log "INFO" "[restore] no other process are running, restoring" && break
|
||||
_log "INFO" "[restore] is already running. Waiting for ${RESTORE_RETRY_INTERVAL} seconds..."
|
||||
sleep "${RESTORE_RETRY_INTERVAL}"
|
||||
done
|
||||
[[ -f "${TRAP_FILE}" ]] && { _log "ERROR" "[restore] is still running after waiting ${RESTORE_RETRY_COUNT} time ${RESTORE_RETRY_INTERVAL}s. Exiting."; exit 1; }
|
||||
# --< Done
|
||||
|
||||
_log "INFO" "[restore] restore backup with backup number #${BACKUP_NUMBER}"
|
||||
touch "${TRAP_FILE}"
|
||||
BACKUP_FILE="${BACKUP_DIR}/${BACKUP_NUMBER}"
|
||||
|
||||
if [[ -f "$BACKUP_FILE.tar.gz" ]]; then
|
||||
_log "INFO" "[restore] old format tar.gz found, restoring it"
|
||||
OPTS=""
|
||||
EXT="tar.gz"
|
||||
elif [[ -f "$backup_file.tar.zstd" ]]; then
|
||||
echo "Backup file found, proceeding"
|
||||
elif [[ -f "$BACKUP_FILE.tar.zstd" ]]; then
|
||||
_log "INFO" "[restore] Backup file found, proceeding"
|
||||
OPTS="--zstd"
|
||||
EXT="tar.zstd"
|
||||
else
|
||||
echo "ERR: Backup file not found: $backup_file"
|
||||
_log "ERROR" "[restore] backup file not found: $BACKUP_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
tar $OPTS -C "${JENKINS_HOME}" -xf "${BACKUP_DIR}/${backup_number}.${EXT}"
|
||||
tar $OPTS -C "${JENKINS_HOME}" -xf "${BACKUP_DIR}/${BACKUP_NUMBER}.${EXT}" || ret=$?
|
||||
|
||||
echo Done
|
||||
if [[ "$ret" -eq 0 ]]; then
|
||||
_log "INFO" "[restore] restore ${BACKUP_NUMBER} was completed without warnings"
|
||||
elif [[ "$ret" -eq 1 ]]; then
|
||||
_log "INFO" "[restore] restore ${BACKUP_NUMBER} was completed with some warnings"
|
||||
else
|
||||
_log "ERROR" "[restore] restore ${BACKUP_NUMBER} failed with error code: $ret"
|
||||
exit "$ret"
|
||||
fi
|
||||
|
||||
|
||||
_log "INFO" "[restore] deleting lock file ${TRAP_FILE}"
|
||||
test -f "${TRAP_FILE}" && rm -f "${TRAP_FILE}"
|
||||
_log "INFO" "[restore] restoring ${BACKUP_NUMBER} Done"
|
||||
exit 0
|
||||
|
|
|
|||
|
|
@ -1,16 +1,72 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -eo pipefail
|
||||
source "$(dirname "$0")/utils.sh"
|
||||
|
||||
[[ -z "${BACKUP_DIR}" ]] && echo "Required 'BACKUP_DIR' env not set" && exit 1;
|
||||
[[ -z "${JENKINS_HOME}" ]] && echo "Required 'JENKINS_HOME' env not set" && exit 1;
|
||||
# Use 60 as default in case BACKUP_CLEANUP_INTERVAL did not set
|
||||
BACKUP_CLEANUP_INTERVAL=${BACKUP_CLEANUP_INTERVAL:=60}
|
||||
|
||||
# Ensure required environment variables are set
|
||||
check_env_var() {
|
||||
if [[ -z "${!1}" ]]; then
|
||||
_log "ERROR" "Required '$1' environment variable is not set"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
is_backup_not_exist() {
|
||||
local backup_dir="$1"
|
||||
# Save the current value of 'set -e'
|
||||
local previous_e
|
||||
previous_e=$(set +e; :; echo $?)
|
||||
|
||||
# Temporarily turn off 'set -e'
|
||||
set +e
|
||||
|
||||
# Run ls command to check if any files matching the pattern exist
|
||||
ls "${backup_dir}"/*.tar.* 1> /dev/null 2>&1
|
||||
|
||||
# Store the exit status of the ls command
|
||||
local ls_exit_status=$?
|
||||
|
||||
# Restore the previous value of 'set -e'
|
||||
[ "$previous_e" = "0" ] && set -e
|
||||
|
||||
# Return true if ls command succeeded (no files found), otherwise return false
|
||||
[ $ls_exit_status -ne 0 ]
|
||||
}
|
||||
|
||||
# Function to find exceeding backups
|
||||
find_exceeding_backups() {
|
||||
local backup_dir="$1"
|
||||
local backup_count="$2"
|
||||
# Check if we have any backup
|
||||
if is_backup_not_exist "${backup_dir}"; then
|
||||
_log "ERROR" "[run] backups not found in ${backup_dir}"
|
||||
return
|
||||
fi
|
||||
find "${backup_dir}"/*.tar.zstd -maxdepth 0 -exec basename {} \; | sort -gr | tail -n +$((backup_count +1))
|
||||
}
|
||||
|
||||
check_env_var "BACKUP_DIR"
|
||||
check_env_var "JENKINS_HOME"
|
||||
|
||||
if [[ -z "${BACKUP_COUNT}" ]]; then
|
||||
_log "WARNING" "[run] no BACKUP_COUNT set, it means you MUST delete old backups manually or by custom script"
|
||||
else
|
||||
_log "INFO" "[run] retaining only the ${BACKUP_COUNT} most recent backups, cleanup occurs every ${BACKUP_CLEANUP_INTERVAL} seconds"
|
||||
fi
|
||||
|
||||
while true;
|
||||
do
|
||||
sleep 10
|
||||
if [[ ! -z "${BACKUP_COUNT}" ]]; then
|
||||
echo "Trimming to only ${BACKUP_COUNT} recent backups in preparation for new backup"
|
||||
#TODO: add the list of exceeding backup before delete
|
||||
find ${BACKUP_DIR} -maxdepth 1 -name '*.tar.zstd' -exec basename {} \; | sort -gr | tail -n +$((BACKUP_COUNT +1)) | xargs -I '{}' rm ${BACKUP_DIR}/'{}'
|
||||
sleep "$BACKUP_CLEANUP_INTERVAL"
|
||||
if [[ -n "${BACKUP_COUNT}" ]]; then
|
||||
exceeding_backups=$(find_exceeding_backups "${BACKUP_DIR}" "${BACKUP_COUNT}")
|
||||
if [[ -n "$exceeding_backups" ]]; then
|
||||
_log "INFO" "[run] removing backups: $(echo "$exceeding_backups" | tr '\n' ', ' | sed 's/,$//')"
|
||||
echo "$exceeding_backups" | while read -r file; do
|
||||
rm "${BACKUP_DIR}/${file}"
|
||||
done
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/env bash
|
||||
# Common utils
|
||||
|
||||
_log() {
|
||||
local level="$1"
|
||||
local message="$2"
|
||||
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
||||
if [[ "$level" =~ ^(ERROR|ERR|error|err)$ ]]; then
|
||||
echo "${timestamp} - ${level} - ${message}" > /proc/1/fd/2
|
||||
else
|
||||
echo "${timestamp} - ${level} - ${message}" > /proc/1/fd/1
|
||||
echo "${timestamp} - ${level} - ${message}" >&2
|
||||
fi
|
||||
}
|
||||
|
|
@ -4,3 +4,4 @@ QUAY_ORGANIZATION=jenkins-kubernetes-operator
|
|||
QUAY_REGISTRY=backup
|
||||
UID=1000
|
||||
GID=1000
|
||||
KIND_CLUSTER_NAME=jenkins
|
||||
|
|
|
|||
|
|
@ -30,6 +30,9 @@ touch ${BACKUP_DIR}/8.tar.zstd
|
|||
touch ${BACKUP_DIR}/9.tar.zstd
|
||||
touch ${BACKUP_DIR}/10.tar.zstd
|
||||
touch ${BACKUP_DIR}/11.tar.zstd
|
||||
# Emulate backup creation
|
||||
BACKUP_TMP_DIR=$(mktemp -d --tmpdir="${BACKUP_DIR}")
|
||||
touch ${BACKUP_TMP_DIR}/12.tar.zstd
|
||||
|
||||
# Create an instance of the container under testing
|
||||
cid="$(docker run -e JENKINS_HOME=${JENKINS_HOME} -v ${JENKINS_HOME}:${JENKINS_HOME}:ro -e BACKUP_DIR=${BACKUP_DIR} -v ${BACKUP_DIR}:${BACKUP_DIR}:rw -d ${docker_image})"
|
||||
|
|
@ -38,10 +41,20 @@ echo "Docker container ID '${cid}'"
|
|||
# Remove test directory and container afterwards
|
||||
trap "docker rm -vf $cid > /dev/null;rm -rf ${BACKUP_DIR};rm -rf ${JENKINS_HOME}" EXIT
|
||||
|
||||
echo "Try to get latest against 11 backups and one in progress"
|
||||
latest=$(docker exec ${cid} /bin/bash -c "JENKINS_HOME=${RESTORE_FOLDER};/home/user/bin/get-latest.sh")
|
||||
|
||||
rm ${BACKUP_DIR}/*.tar.zstd
|
||||
echo "Try to get latest against one in progress"
|
||||
empty_latest=$(docker exec ${cid} /bin/bash -c "JENKINS_HOME=${RESTORE_FOLDER};/home/user/bin/get-latest.sh")
|
||||
|
||||
rmdir ${BACKUP_DIR}/lost+found
|
||||
rm ${BACKUP_TMP_DIR}/*.tar.zstd
|
||||
rmdir ${BACKUP_TMP_DIR}
|
||||
echo "Try to get latest against empty dir"
|
||||
empty_dir_latest=$(docker exec ${cid} /bin/bash -c "JENKINS_HOME=${RESTORE_FOLDER};/home/user/bin/get-latest.sh")
|
||||
|
||||
|
||||
if [[ "${DEBUG}" ]]; then
|
||||
docker logs ${cid}
|
||||
ls -la ${BACKUP_DIR}
|
||||
|
|
@ -55,5 +68,9 @@ if [[ ! "${empty_latest}" == "-1" ]]; then
|
|||
echo "Latest backup number should be '-1' but is '${empty_latest}'"
|
||||
exit 1
|
||||
fi
|
||||
if [[ ! "${empty_dir_latest}" == "-1" ]]; then
|
||||
echo "Latest backup number should be '-1' but is '${empty_dir_latest}'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo PASS
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
#!/bin/bash
|
||||
set -eo pipefail
|
||||
|
||||
echo "Running limit_backup_count e2e test..."
|
||||
|
||||
[[ "${DEBUG}" ]] && set -x
|
||||
|
||||
# set current working directory to the directory of the script
|
||||
|
|
@ -30,17 +32,20 @@ touch ${BACKUP_DIR}/8.tar.zstd
|
|||
touch ${BACKUP_DIR}/9.tar.zstd
|
||||
touch ${BACKUP_DIR}/10.tar.zstd
|
||||
touch ${BACKUP_DIR}/11.tar.zstd
|
||||
# Emulate backup creation
|
||||
BACKUP_TMP_DIR=$(mktemp -d --tmpdir="${BACKUP_DIR}")
|
||||
touch ${BACKUP_TMP_DIR}/12.tar.zstd
|
||||
|
||||
# Create an instance of the container under testing
|
||||
cid="$(docker run -e BACKUP_COUNT=2 -e JENKINS_HOME=${JENKINS_HOME} -v ${JENKINS_HOME}:${JENKINS_HOME}:ro -e BACKUP_DIR=${BACKUP_DIR} -v ${BACKUP_DIR}:${BACKUP_DIR}:rw -d ${docker_image})"
|
||||
cid="$(docker run -e BACKUP_CLEANUP_INTERVAL=1 -e BACKUP_COUNT=2 -e JENKINS_HOME=${JENKINS_HOME} -v ${JENKINS_HOME}:${JENKINS_HOME}:ro -e BACKUP_DIR=${BACKUP_DIR} -v ${BACKUP_DIR}:${BACKUP_DIR}:rw -d ${docker_image})"
|
||||
echo "Docker container ID '${cid}'"
|
||||
|
||||
# Remove test directory and container afterwards
|
||||
trap "docker rm -vf $cid > /dev/null;rm -rf ${BACKUP_DIR};rm -rf ${JENKINS_HOME}" EXIT
|
||||
|
||||
sleep 11
|
||||
touch ${BACKUP_DIR}/12.tar.zstd
|
||||
sleep 11
|
||||
sleep 2
|
||||
mv ${BACKUP_TMP_DIR}/12.tar.zstd ${BACKUP_DIR}/
|
||||
sleep 2
|
||||
|
||||
if [[ "${DEBUG}" ]]; then
|
||||
docker logs ${cid}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
#!/bin/bash
|
||||
set -eo pipefail
|
||||
|
||||
echo "Running limit_backup_count_no_backups e2e test..."
|
||||
|
||||
[[ "${DEBUG}" ]] && set -x
|
||||
|
||||
# set current working directory to the directory of the script
|
||||
|
|
@ -19,7 +21,7 @@ mkdir -p ${BACKUP_DIR}
|
|||
mkdir -p ${JENKINS_HOME}
|
||||
|
||||
# Create an instance of the container under testing
|
||||
cid="$(docker run -e BACKUP_COUNT=2 -e JENKINS_HOME=${JENKINS_HOME} -v ${JENKINS_HOME}:${JENKINS_HOME}:ro -e BACKUP_DIR=${BACKUP_DIR} -v ${BACKUP_DIR}:${BACKUP_DIR}:rw -d ${docker_image})"
|
||||
cid="$(docker run -e BACKUP_CLEANUP_INTERVAL=1 -e BACKUP_COUNT=2 -e JENKINS_HOME=${JENKINS_HOME} -v ${JENKINS_HOME}:${JENKINS_HOME}:ro -e BACKUP_DIR=${BACKUP_DIR} -v ${BACKUP_DIR}:${BACKUP_DIR}:rw -d ${docker_image})"
|
||||
echo "Docker container ID '${cid}'"
|
||||
|
||||
# Remove test directory and container afterwards
|
||||
|
|
@ -27,8 +29,16 @@ trap "docker rm -vf $cid > /dev/null;rm -rf ${BACKUP_DIR};rm -rf ${JENKINS_HOME}
|
|||
|
||||
# container should be running
|
||||
echo 'Checking if container is running'
|
||||
sleep 11
|
||||
sleep 3
|
||||
set +e
|
||||
docker exec ${cid} echo
|
||||
exit_code=$?
|
||||
set -e
|
||||
if [ $exit_code -ne 0 ]; then
|
||||
echo "container terminated with following logs:"
|
||||
docker logs "${cid}"
|
||||
exit 1
|
||||
fi
|
||||
echo 'Container is running'
|
||||
|
||||
echo PASS
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
#!/bin/bash
|
||||
set -eo pipefail
|
||||
|
||||
echo "Running tmp_dir_clean_after_backup_creation e2e test..."
|
||||
|
||||
[[ "${DEBUG}" ]] && set -x
|
||||
|
||||
# set current working directory to the directory of the script
|
||||
|
|
@ -18,7 +20,7 @@ BACKUP_DIR="$(pwd)/backup"
|
|||
mkdir -p ${BACKUP_DIR}
|
||||
|
||||
# Create an instance of the container under testing
|
||||
cid="$(docker run -e JENKINS_HOME=${JENKINS_HOME} -v ${JENKINS_HOME}:${JENKINS_HOME}:ro -e BACKUP_DIR=${BACKUP_DIR} -v ${BACKUP_DIR}:${BACKUP_DIR}:rw -d ${docker_image})"
|
||||
cid="$(docker run -e BACKUP_CLEANUP_INTERVAL=1 -e JENKINS_HOME=${JENKINS_HOME} -v ${JENKINS_HOME}:${JENKINS_HOME}:ro -e BACKUP_DIR=${BACKUP_DIR} -v ${BACKUP_DIR}:${BACKUP_DIR}:rw -d ${docker_image})"
|
||||
echo "Docker container ID '${cid}'"
|
||||
|
||||
# Remove test directory and container afterwards
|
||||
|
|
@ -28,6 +30,8 @@ backup_number=1
|
|||
docker exec ${cid} /home/user/bin/backup.sh ${backup_number}
|
||||
|
||||
[ "$(docker exec ${cid} ls /tmp | grep 'tmp')" ] && echo "tmp directory not empty" && exit 1;
|
||||
# We should also check backup directory, since after #1000 we create temp directory at backup filesystem
|
||||
[ "$(docker exec ${cid} ls ${BACKUP_DIR} | grep 'tmp')" ] && echo "backup dir consists temp directory" && exit 1;
|
||||
|
||||
backup_file="${BACKUP_DIR}/${backup_number}.tar.zstd"
|
||||
[[ ! -f ${backup_file} ]] && echo "Backup file ${backup_file} not found" && exit 1;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,59 @@
|
|||
apiVersion: v1
|
||||
entries:
|
||||
jenkins-operator:
|
||||
- apiVersion: v2
|
||||
appVersion: 0.9.0-beta1
|
||||
created: "2025-04-06T21:25:18.36969916Z"
|
||||
dependencies:
|
||||
- condition: cert-manager.enabled
|
||||
name: cert-manager
|
||||
repository: https://charts.jetstack.io
|
||||
version: 1.14.2
|
||||
- condition: cert-manager.enabled
|
||||
name: cert-manager-crds
|
||||
repository: ""
|
||||
version: 1.14.2
|
||||
description: Kubernetes native operator which fully manages Jenkins on Kubernetes
|
||||
digest: 78b0756202efbf6a05d5016a4358053a07c89c0f4a3f3f1fb447eaf7323df078
|
||||
icon: https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/assets/jenkins-operator-icon.png
|
||||
name: jenkins-operator
|
||||
urls:
|
||||
- https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/chart/jenkins-operator/jenkins-operator-0.9.0-beta1.tgz
|
||||
version: 0.9.0-beta1
|
||||
- apiVersion: v2
|
||||
appVersion: 0.8.1
|
||||
created: "2024-07-05T15:26:01.708923805Z"
|
||||
dependencies:
|
||||
- condition: cert-manager.enabled
|
||||
name: cert-manager
|
||||
repository: https://charts.jetstack.io
|
||||
version: 1.14.2
|
||||
- condition: cert-manager.enabled
|
||||
name: cert-manager-crds
|
||||
repository: ""
|
||||
version: 1.14.2
|
||||
description: Kubernetes native operator which fully manages Jenkins on Kubernetes
|
||||
digest: 82c061ff42bbf2dbcf942939ffbd5b63508c9d8490fc06672a474af1cad14a5d
|
||||
icon: https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/assets/jenkins-operator-icon.png
|
||||
name: jenkins-operator
|
||||
urls:
|
||||
- https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/chart/jenkins-operator/jenkins-operator-0.8.1.tgz
|
||||
version: 0.8.1
|
||||
- apiVersion: v2
|
||||
appVersion: 0.8.0
|
||||
created: "2023-09-13T06:54:41.369295961Z"
|
||||
dependencies:
|
||||
- condition: webhook.enabled
|
||||
name: cert-manager
|
||||
repository: https://charts.jetstack.io
|
||||
version: 1.5.1
|
||||
description: Kubernetes native operator which fully manages Jenkins on Kubernetes
|
||||
digest: da8ae04166cb1b64a9dd3d741c6a50d63846ebe8e2e92f09313ad3c6a0dd9ca4
|
||||
icon: https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/assets/jenkins-operator-icon.png
|
||||
name: jenkins-operator
|
||||
urls:
|
||||
- https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/chart/jenkins-operator/jenkins-operator-0.8.0.tgz
|
||||
version: 0.8.0
|
||||
- apiVersion: v2
|
||||
appVersion: 0.8.0-beta.2
|
||||
created: "2023-06-30T21:22:53.308590035Z"
|
||||
|
|
@ -363,4 +416,4 @@ entries:
|
|||
urls:
|
||||
- https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/chart/jenkins-operator/jenkins-operator-0.0.1.tgz
|
||||
version: 0.0.1
|
||||
generated: "2023-06-30T21:22:53.286551756Z"
|
||||
generated: "2025-04-06T21:25:18.363088324Z"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
dependencies:
|
||||
- name: cert-manager
|
||||
repository: https://charts.jetstack.io
|
||||
version: v1.5.1
|
||||
digest: sha256:3220f5584bd04a8c8d4b2a076d49cc046211a463bb9a12ebbbae752be9b70bb1
|
||||
generated: "2021-08-18T01:07:49.505353718+05:30"
|
||||
version: v1.14.2
|
||||
digest: sha256:5f6f7c115d7b96e8c8e85515e087a9379473fd3d5262198a9e25c1a84d4ff9bd
|
||||
generated: "2024-02-15T23:08:28.352007672+01:00"
|
||||
|
|
|
|||
|
|
@ -1,11 +1,14 @@
|
|||
apiVersion: v2
|
||||
appVersion: "0.8.0-beta.2"
|
||||
appVersion: "0.9.0-beta1"
|
||||
description: Kubernetes native operator which fully manages Jenkins on Kubernetes
|
||||
name: jenkins-operator
|
||||
version: 0.8.0-beta.2
|
||||
version: 0.9.0-beta1
|
||||
icon: https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/assets/jenkins-operator-icon.png
|
||||
dependencies:
|
||||
- name: cert-manager
|
||||
version: "1.5.1"
|
||||
condition: webhook.enabled
|
||||
repository: https://charts.jetstack.io
|
||||
version: "1.14.2"
|
||||
condition: cert-manager.enabled
|
||||
repository: https://charts.jetstack.io
|
||||
- name: cert-manager-crds
|
||||
version: "1.14.2"
|
||||
condition: cert-manager.enabled
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# jenkins-operator
|
||||
|
||||
 
|
||||
 
|
||||
|
||||
Kubernetes native operator which fully manages Jenkins on Kubernetes
|
||||
|
||||
|
|
@ -8,12 +8,14 @@ Kubernetes native operator which fully manages Jenkins on Kubernetes
|
|||
|
||||
| Repository | Name | Version |
|
||||
|------------|------|---------|
|
||||
| https://charts.jetstack.io | cert-manager | 1.5.1 |
|
||||
| | cert-manager-crds | 1.14.2 |
|
||||
| https://charts.jetstack.io | cert-manager | 1.14.2 |
|
||||
|
||||
## Values
|
||||
|
||||
| Key | Type | Default | Description |
|
||||
|-----|------|---------|-------------|
|
||||
| cert-manager.enabled | bool | `false` | |
|
||||
| cert-manager.startupapicheck.enabled | bool | `false` | |
|
||||
| jenkins.annotations | object | `{}` | |
|
||||
| jenkins.apiVersion | string | `"jenkins.io/v1alpha2"` | |
|
||||
|
|
@ -28,7 +30,7 @@ Kubernetes native operator which fully manages Jenkins on Kubernetes
|
|||
| jenkins.backup.env[2].name | string | `"BACKUP_COUNT"` | |
|
||||
| jenkins.backup.env[2].value | string | `"3"` | |
|
||||
| jenkins.backup.getLatestAction[0] | string | `"/home/user/bin/get-latest.sh"` | |
|
||||
| jenkins.backup.image | string | `"quay.io/jenkins-kubernetes-operator/backup-pvc:v0.2.6"` | |
|
||||
| jenkins.backup.image | string | `"quay.io/jenkins-kubernetes-operator/backup-pvc:v0.4.3"` | |
|
||||
| jenkins.backup.interval | int | `30` | |
|
||||
| jenkins.backup.makeBackupBeforePodDeletion | bool | `true` | |
|
||||
| jenkins.backup.pvc.className | string | `""` | |
|
||||
|
|
@ -44,19 +46,20 @@ Kubernetes native operator which fully manages Jenkins on Kubernetes
|
|||
| jenkins.backup.volumeMounts[1].mountPath | string | `"/backup"` | |
|
||||
| jenkins.backup.volumeMounts[1].name | string | `"backup"` | |
|
||||
| jenkins.basePlugins | list | `[]` | |
|
||||
| jenkins.configuration.configurationAsCode | object | `{}` | |
|
||||
| jenkins.configuration.groovyScripts | object | `{}` | |
|
||||
| jenkins.configuration.configurationAsCode | list | `[]` | |
|
||||
| jenkins.configuration.groovyScripts | list | `[]` | |
|
||||
| jenkins.configuration.secretData | object | `{}` | |
|
||||
| jenkins.configuration.secretRefName | string | `""` | |
|
||||
| jenkins.disableCSRFProtection | bool | `false` | |
|
||||
| jenkins.enabled | bool | `true` | |
|
||||
| jenkins.env | list | `[]` | |
|
||||
| jenkins.hostAliases | object | `{}` | |
|
||||
| jenkins.image | string | `"jenkins/jenkins:2.401.1-lts"` | |
|
||||
| jenkins.image | string | `"jenkins/jenkins:2.492.3-lts"` | |
|
||||
| jenkins.imagePullPolicy | string | `"Always"` | |
|
||||
| jenkins.imagePullSecrets | list | `[]` | |
|
||||
| jenkins.labels | object | `{}` | |
|
||||
| jenkins.latestPlugins | bool | `true` | |
|
||||
| jenkins.lifecycle | object | `{}` | |
|
||||
| jenkins.livenessProbe.failureThreshold | int | `20` | |
|
||||
| jenkins.livenessProbe.httpGet.path | string | `"/login"` | |
|
||||
| jenkins.livenessProbe.httpGet.port | string | `"http"` | |
|
||||
|
|
@ -88,6 +91,8 @@ Kubernetes native operator which fully manages Jenkins on Kubernetes
|
|||
| jenkins.seedJobAgentImage | string | `""` | |
|
||||
| jenkins.seedJobs | list | `[]` | |
|
||||
| jenkins.serviceAccount.annotations | object | `{}` | |
|
||||
| jenkins.skipPlugins | bool | `false` | |
|
||||
| jenkins.terminationGracePeriodSeconds | int | `30` | |
|
||||
| jenkins.tolerations | list | `[]` | |
|
||||
| jenkins.validateSecurityWarnings | bool | `false` | |
|
||||
| jenkins.volumeMounts | list | `[]` | |
|
||||
|
|
@ -95,7 +100,7 @@ Kubernetes native operator which fully manages Jenkins on Kubernetes
|
|||
| jenkins.volumes[0].persistentVolumeClaim.claimName | string | `"jenkins-backup"` | |
|
||||
| operator.affinity | object | `{}` | |
|
||||
| operator.fullnameOverride | string | `""` | |
|
||||
| operator.image | string | `"quay.io/jenkins-kubernetes-operator/operator:v0.8.0-beta2"` | |
|
||||
| operator.image | string | `"quay.io/jenkins-kubernetes-operator/operator:v0.9.0-beta1"` | |
|
||||
| operator.imagePullPolicy | string | `"IfNotPresent"` | |
|
||||
| operator.imagePullSecrets | list | `[]` | |
|
||||
| operator.nameOverride | string | `""` | |
|
||||
|
|
@ -109,4 +114,4 @@ Kubernetes native operator which fully manages Jenkins on Kubernetes
|
|||
| webhook.enabled | bool | `false` | |
|
||||
|
||||
----------------------------------------------
|
||||
Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0)
|
||||
Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
apiVersion: v2
|
||||
name: cert-manager-crds
|
||||
version: "1.14.2"
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
|
@ -1330,6 +1330,15 @@ spec:
|
|||
type: string
|
||||
type: object
|
||||
type: object
|
||||
skipPlugins:
|
||||
description: 'Allow to skip installation of both BasePlugins and
|
||||
Plugins. Requires using a custom image which includes the
|
||||
BasePlugins. Defaults to false.'
|
||||
type: boolean
|
||||
terminationGracePeriodSeconds:
|
||||
description: 'Optional duration in seconds the pod needs to terminate gracefully.'
|
||||
type: integer
|
||||
default: 30
|
||||
tolerations:
|
||||
description: If specified, the pod's tolerations.
|
||||
items:
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -115,6 +115,10 @@ spec:
|
|||
{{- with .Values.jenkins.hostAliases }}
|
||||
hostAliases: {{ toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
skipPlugins: {{ .Values.jenkins.skipPlugins }}
|
||||
{{- if .Values.jenkins.terminationGracePeriodSeconds }}
|
||||
terminationGracePeriodSeconds: {{ .Values.jenkins.terminationGracePeriodSeconds }}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: jenkins-master
|
||||
image: {{ .Values.jenkins.image }}
|
||||
|
|
@ -131,13 +135,16 @@ spec:
|
|||
{{- with .Values.jenkins.env }}
|
||||
env: {{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.jenkins.lifecycle}}
|
||||
lifecycle: {{ toYaml . | nindent 10 }}
|
||||
{{- end }}
|
||||
{{- with .Values.jenkins.volumeMounts }}
|
||||
volumeMounts: {{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- if .Values.jenkins.backup.enabled }}
|
||||
- name: {{ .Values.jenkins.backup.containerName }}
|
||||
image: {{ .Values.jenkins.backup.image }}
|
||||
imagePullPolicy: IfNotPresent
|
||||
imagePullPolicy: {{ .Values.jenkins.imagePullPolicy }}
|
||||
{{- with .Values.jenkins.backup.resources }}
|
||||
resources: {{ toYaml . | nindent 10 }}
|
||||
{{- end }}
|
||||
|
|
|
|||
|
|
@ -55,7 +55,15 @@ spec:
|
|||
periodSeconds: 10
|
||||
env:
|
||||
- name: WATCH_NAMESPACE
|
||||
{{- if .Values.jenkins.enabled }}
|
||||
value: {{ .Values.jenkins.namespace }}
|
||||
{{- else if .Values.operator.watchNamespace }}
|
||||
value: {{ .Values.operator.watchNamespace }}
|
||||
{{- else }}
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.namespace
|
||||
{{- end }}
|
||||
- name: POD_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ jenkins:
|
|||
# image is the name (and tag) of the Jenkins instance
|
||||
# Default: jenkins/jenkins:lts
|
||||
# It's recommended to use LTS (tag: "lts") version
|
||||
image: jenkins/jenkins:2.401.1-lts
|
||||
image: jenkins/jenkins:2.528.1-lts
|
||||
|
||||
# env contains jenkins container environment variables
|
||||
env: []
|
||||
|
|
@ -44,6 +44,9 @@ jenkins:
|
|||
# imagePullPolicy defines policy for pulling images
|
||||
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
|
||||
# See: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/
|
||||
priorityClassName: ""
|
||||
|
|
@ -65,6 +68,10 @@ jenkins:
|
|||
# - "foo.remote"
|
||||
# - "bar.remote"
|
||||
|
||||
# Optional duration in seconds the pod needs to terminate gracefully.
|
||||
# Default 30sec
|
||||
terminationGracePeriodSeconds: 30
|
||||
|
||||
# validateSecurityWarnings enables or disables validating potential security warnings in Jenkins plugins via admission webhooks.
|
||||
validateSecurityWarnings: false
|
||||
|
||||
|
|
@ -90,19 +97,19 @@ jenkins:
|
|||
#
|
||||
# basePlugins:
|
||||
# - name: kubernetes
|
||||
# version: 3937.vd7b_82db_e347b_
|
||||
# version: 4246.v5a_12b_1fe120e
|
||||
# - name: workflow-job
|
||||
# version: 1308.v58d48a_763b_31
|
||||
# version: 1400.v7fd111b_ec82f
|
||||
# - name: workflow-aggregator
|
||||
# version: 596.v8c21c963d92d
|
||||
# - name: git
|
||||
# version: 5.0.2
|
||||
# version: 5.2.2
|
||||
# - name: job-dsl
|
||||
# version: "1.84"
|
||||
# version: "1.87"
|
||||
# - name: configuration-as-code
|
||||
# version: 1647.ve39ca_b_829b_42
|
||||
# version: 1810.v9b_c30a_249a_4c
|
||||
# - name: kubernetes-credentials-provider
|
||||
# version: 1.211.vc236a_f5a_2f3c
|
||||
# version: 1.262.v2670ef7ea_0c5
|
||||
|
||||
basePlugins: []
|
||||
|
||||
|
|
@ -135,9 +142,14 @@ jenkins:
|
|||
# repositoryUrl: https://github.com/jenkinsci/kubernetes-operator.git
|
||||
seedJobs: []
|
||||
|
||||
# SeedJobAgentImage defines the image that will be used by the seed job agent. If not defined jenkins/inbound-agent:4.10-3 will be used.
|
||||
# SeedJobAgentImage defines the image that will be used by the seed job agent. If not defined jenkins/inbound-agent:3248.v65ecb_254c298-6 will be used.
|
||||
seedJobAgentImage: ""
|
||||
|
||||
# skipPlugins allows to skip installation of both BasePlugins and Plugins.
|
||||
# Requires using a custom image which includes the BasePlugins.
|
||||
# Defaults to false.
|
||||
skipPlugins: false
|
||||
|
||||
# Resource limit/request for Jenkins
|
||||
# See https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ for details
|
||||
resources:
|
||||
|
|
@ -210,7 +222,7 @@ jenkins:
|
|||
|
||||
# image used by backup feature
|
||||
# By default using prebuilt backup PVC image
|
||||
image: quay.io/jenkins-kubernetes-operator/backup-pvc:v0.2.6
|
||||
image: quay.io/jenkins-kubernetes-operator/backup-pvc:v0.4.3
|
||||
|
||||
# containerName is backup container name
|
||||
containerName: backup
|
||||
|
|
@ -258,6 +270,11 @@ jenkins:
|
|||
# BACKUP_DIR - path for storing backup files (default: "/backup")
|
||||
# JENKINS_HOME - path to jenkins home (default: "/jenkins-home")
|
||||
# BACKUP_COUNT - define how much recent backups will be kept
|
||||
# Optional in case you want to modify the backup and restore retry logic
|
||||
# BACKUP_RETRY_COUNT
|
||||
# BACKUP_RETRY_INTERVAL
|
||||
# RESTORE_RETRY_COUNT
|
||||
# RESTORE_RETRY_INTERVAL
|
||||
env:
|
||||
- name: BACKUP_DIR
|
||||
value: /backup
|
||||
|
|
@ -265,6 +282,15 @@ jenkins:
|
|||
value: /jenkins-home
|
||||
- name: BACKUP_COUNT
|
||||
value: "3" # keep only the 3 most recent backups
|
||||
#- name: BACKUP_RETRY_COUNT
|
||||
# value: "3"
|
||||
#- name: BACKUP_RETRY_INTERVAL
|
||||
# value: "60"
|
||||
#- name: RESTORE_RETRY_COUNT
|
||||
# value: "10"
|
||||
#- name: RESTORE_RETRY_INTERVAL
|
||||
# value: "10"
|
||||
|
||||
|
||||
# volumeMounts holds the mount points for volumes
|
||||
volumeMounts:
|
||||
|
|
@ -276,10 +302,10 @@ jenkins:
|
|||
# configuration is section where we can configure Jenkins instance
|
||||
# See https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/customization/ for details
|
||||
configuration:
|
||||
configurationAsCode: {}
|
||||
configurationAsCode: []
|
||||
# - configMapName: jenkins-casc
|
||||
# content: {}
|
||||
groovyScripts: {}
|
||||
groovyScripts: []
|
||||
# - configMapName: jenkins-gs
|
||||
# content: {}
|
||||
|
||||
|
|
@ -294,7 +320,7 @@ operator:
|
|||
replicaCount: 1
|
||||
|
||||
# image is the name (and tag) of the Jenkins Operator image
|
||||
image: quay.io/jenkins-kubernetes-operator/operator:v0.8.0-beta2
|
||||
image: quay.io/jenkins-kubernetes-operator/operator:v0.9.0-beta1
|
||||
|
||||
# imagePullPolicy defines policy for pulling images
|
||||
imagePullPolicy: IfNotPresent
|
||||
|
|
@ -308,6 +334,10 @@ operator:
|
|||
# fullnameOverride overrides the deployment name
|
||||
fullnameOverride: ""
|
||||
|
||||
# Select a different namespace to look for the Jenkins CR and deploy Jenkins in. Defaults to the same namespace as
|
||||
# the operator.
|
||||
# watchNamespace: "jenkins-namespace"
|
||||
|
||||
resources: {}
|
||||
nodeSelector: {}
|
||||
tolerations: []
|
||||
|
|
@ -326,8 +356,11 @@ webhook:
|
|||
# enable or disable the validation webhook
|
||||
enabled: false
|
||||
|
||||
# This startupapicheck is a Helm post-install hook that waits for the webhook
|
||||
# endpoints to become available.
|
||||
cert-manager:
|
||||
# cert-manager is required to generate certificates for webhook. If you don't have cert-manager installed in your cluster,
|
||||
# you can install it as a subordinate chart
|
||||
enabled: false
|
||||
# This startupapicheck is a Helm post-install hook that waits for the webhook
|
||||
# endpoints to become available.
|
||||
startupapicheck:
|
||||
enabled: false
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ import (
|
|||
r "runtime"
|
||||
|
||||
"github.com/jenkinsci/kubernetes-operator/api/v1alpha2"
|
||||
"github.com/jenkinsci/kubernetes-operator/controllers"
|
||||
controllers "github.com/jenkinsci/kubernetes-operator/internal/controller"
|
||||
"github.com/jenkinsci/kubernetes-operator/pkg/client"
|
||||
"github.com/jenkinsci/kubernetes-operator/pkg/configuration/base/resources"
|
||||
"github.com/jenkinsci/kubernetes-operator/pkg/constants"
|
||||
|
|
@ -40,7 +40,10 @@ import (
|
|||
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
|
||||
"sigs.k8s.io/controller-runtime/pkg/cache"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client/config"
|
||||
"sigs.k8s.io/controller-runtime/pkg/metrics/server"
|
||||
"sigs.k8s.io/controller-runtime/pkg/webhook"
|
||||
|
||||
// Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.)
|
||||
// to ensure that exec-entrypoint and run can make use of them.
|
||||
|
|
@ -126,14 +129,23 @@ func main() {
|
|||
fatal(errors.Wrap(err, "failed to get config"), *debug)
|
||||
}
|
||||
|
||||
cacheNamespace := map[string]cache.Config{}
|
||||
cacheNamespace[namespace] = cache.Config{}
|
||||
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
|
||||
Scheme: scheme,
|
||||
MetricsBindAddress: fmt.Sprintf("%s:%d", metricsHost, metricsPort),
|
||||
Port: 9443,
|
||||
// MetricsBindAddress: fmt.Sprintf("%s:%d", metricsHost, metricsPort),
|
||||
Metrics: server.Options{
|
||||
BindAddress: fmt.Sprintf("%s:%d", metricsHost, metricsPort),
|
||||
},
|
||||
Scheme: scheme,
|
||||
// Port: 9443,
|
||||
WebhookServer: webhook.NewServer(webhook.Options{
|
||||
Port: 9443,
|
||||
}),
|
||||
HealthProbeBindAddress: probeAddr,
|
||||
LeaderElection: enableLeaderElection,
|
||||
LeaderElectionID: "c674355f.jenkins.io",
|
||||
Namespace: namespace,
|
||||
// Namespace: namespace,
|
||||
Cache: cache.Options{DefaultNamespaces: cacheNamespace},
|
||||
})
|
||||
if err != nil {
|
||||
fatal(errors.Wrap(err, "unable to start manager"), *debug)
|
||||
|
|
@ -1,17 +1,16 @@
|
|||
# Setup variables for the Makefile
|
||||
NAME=kubernetes-operator
|
||||
OPERATOR_SDK_VERSION=1.3.0
|
||||
GO_VERSION=1.15.6
|
||||
PKG=github.com/jenkinsci/kubernetes-operator
|
||||
QUAY_ORGANIZATION=jenkins-kubernetes-operator
|
||||
QUAY_REGISTRY=operator
|
||||
NAMESPACE=default
|
||||
API_VERSION=v1alpha2
|
||||
API_VERSION_NEXT=v1alpha3
|
||||
ALL_IN_ONE_DEPLOY_FILE_PREFIX=all-in-one
|
||||
GEN_CRD_API=gen-crd-api-reference-docs
|
||||
IMAGE_PULL_MODE=local
|
||||
HELM_VERSION=3.12.1
|
||||
CLUSTER_DOMAIN=cluster.local
|
||||
LATEST_LTS_VERSION=2.401.1
|
||||
KIND_CLUSTER_NAME=jenkins
|
||||
ALL_IN_ONE_DEPLOY_FILE_PREFIX="all-in-one"
|
||||
API_VERSION_NEXT="v1alpha3"
|
||||
API_VERSION="v1alpha2"
|
||||
CLUSTER_DOMAIN="cluster.local"
|
||||
GEN_CRD_API="gen-crd-api-reference-docs"
|
||||
GO_VERSION="1.22"
|
||||
HELM_VERSION="3.12.3"
|
||||
IMAGE_PULL_MODE="local"
|
||||
KIND_CLUSTER_NAME="jenkins"
|
||||
LATEST_LTS_VERSION="2.528.1"
|
||||
NAME="kubernetes-operator"
|
||||
NAMESPACE="default"
|
||||
OPERATOR_SDK_VERSION="1.35.0"
|
||||
PKG="github.com/jenkinsci/kubernetes-operator"
|
||||
QUAY_ORGANIZATION="jenkins-kubernetes-operator"
|
||||
QUAY_REGISTRY="operator"
|
||||
|
|
|
|||
|
|
@ -1,7 +0,0 @@
|
|||
KUBERNETES_PROVIDER=crc
|
||||
|
||||
JENKINS_API_HOSTNAME_COMMAND=crc ip
|
||||
JENKINS_API_PORT=0
|
||||
JENKINS_API_USE_NODEPORT=true
|
||||
|
||||
CRC_OC_PROJECT=default
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
JENKINS_API_HOSTNAME_COMMAND=echo localhost
|
||||
JENKINS_API_PORT=0
|
||||
JENKINS_API_USE_NODEPORT=true
|
||||
KUBERNETES_PROVIDER=kind
|
||||
KUBECTL_CONTEXT=kind-jenkins
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
KUBERNETES_PROVIDER=minikube
|
||||
|
||||
MINIKUBE_KUBERNETES_VERSION=v1.24.8
|
||||
MINIKUBE_DRIVER=virtualbox
|
||||
MINIKUBE_VERSION=1.28.0
|
||||
KUBECTL_CONTEXT=minikube
|
||||
|
||||
JENKINS_API_HOSTNAME_COMMAND=bin/minikube ip
|
||||
JENKINS_API_PORT=0
|
||||
JENKINS_API_USE_NODEPORT=true
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -28,7 +28,9 @@ patchesStrategicMerge:
|
|||
# Protect the /metrics endpoint by putting it behind auth.
|
||||
# If you want your controller-manager to expose the /metrics
|
||||
# endpoint w/o any authn/z, please comment the following line.
|
||||
- manager_auth_proxy_patch.yaml
|
||||
# Mount the controller config file for loading manager configurations
|
||||
# through a ComponentConfig type
|
||||
- manager_config_patch.yaml
|
||||
|
||||
# Mount the controller config file for loading manager configurations
|
||||
# through a ComponentConfig type
|
||||
|
|
|
|||
|
|
@ -10,15 +10,23 @@ spec:
|
|||
spec:
|
||||
containers:
|
||||
- name: kube-rbac-proxy
|
||||
image: gcr.io/kubebuilder/kube-rbac-proxy:v0.5.0
|
||||
image: gcr.io/kubebuilder/kube-rbac-proxy:v0.13.1
|
||||
args:
|
||||
- "--secure-listen-address=0.0.0.0:8443"
|
||||
- "--upstream=http://127.0.0.1:8080/"
|
||||
- "--logtostderr=true"
|
||||
- "--v=10"
|
||||
- "--v=0"
|
||||
ports:
|
||||
- containerPort: 8443
|
||||
protocol: TCP
|
||||
name: https
|
||||
resources:
|
||||
limits:
|
||||
cpu: 500m
|
||||
memory: 128Mi
|
||||
requests:
|
||||
cpu: 5m
|
||||
memory: 64Mi
|
||||
- name: manager
|
||||
args:
|
||||
- "--health-probe-bind-address=:8081"
|
||||
|
|
|
|||
|
|
@ -14,6 +14,8 @@ spec:
|
|||
metadata:
|
||||
labels:
|
||||
control-plane: controller-manager
|
||||
annotations:
|
||||
kubectl.kubernetes.io/default-container: manager
|
||||
spec:
|
||||
serviceAccountName: jenkins-operator
|
||||
securityContext:
|
||||
|
|
@ -23,7 +25,7 @@ spec:
|
|||
- /manager
|
||||
args:
|
||||
- --leader-elect
|
||||
image: virtuslab/jenkins-operator:v0.7.1
|
||||
image: quay.io/jenkins-kubernetes-operator/operator:v0.8.0
|
||||
name: jenkins-operator
|
||||
imagePullPolicy: IfNotPresent
|
||||
securityContext:
|
||||
|
|
@ -42,8 +44,8 @@ spec:
|
|||
periodSeconds: 10
|
||||
resources:
|
||||
limits:
|
||||
cpu: 100m
|
||||
memory: 30Mi
|
||||
cpu: 200m
|
||||
memory: 100Mi
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 20Mi
|
||||
|
|
@ -52,4 +54,5 @@ spec:
|
|||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.namespace
|
||||
serviceAccountName: controller-manager
|
||||
terminationGracePeriodSeconds: 10
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
# Prometheus Monitor Service (Metrics)
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: ServiceMonitor
|
||||
|
|
@ -11,6 +10,10 @@ spec:
|
|||
endpoints:
|
||||
- path: /metrics
|
||||
port: https
|
||||
scheme: https
|
||||
bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
|
||||
tlsConfig:
|
||||
insecureSkipVerify: true
|
||||
selector:
|
||||
matchLabels:
|
||||
control-plane: controller-manager
|
||||
|
|
|
|||
|
|
@ -8,5 +8,5 @@ roleRef:
|
|||
name: proxy-role
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: default
|
||||
name: controller-manager
|
||||
namespace: default
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ spec:
|
|||
ports:
|
||||
- name: https
|
||||
port: 8443
|
||||
protocol: TCP
|
||||
targetPort: https
|
||||
selector:
|
||||
control-plane: controller-manager
|
||||
|
|
|
|||
|
|
@ -10,3 +10,4 @@ resources:
|
|||
- auth_proxy_role.yaml
|
||||
- auth_proxy_role_binding.yaml
|
||||
- auth_proxy_client_clusterrole.yaml
|
||||
- service_account.yaml
|
||||
|
|
|
|||
|
|
@ -7,9 +7,19 @@ metadata:
|
|||
rules:
|
||||
- apiGroups:
|
||||
- ""
|
||||
- coordination.k8s.io
|
||||
resources:
|
||||
- configmaps
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- create
|
||||
- update
|
||||
- patch
|
||||
- delete
|
||||
- apiGroups:
|
||||
- coordination.k8s.io
|
||||
resources:
|
||||
- leases
|
||||
verbs:
|
||||
- get
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: manager-role
|
||||
rules:
|
||||
- apiGroups:
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: controller-manager
|
||||
namespace: system
|
||||
|
|
@ -1,14 +1,11 @@
|
|||
|
||||
---
|
||||
apiVersion: admissionregistration.k8s.io/v1
|
||||
kind: ValidatingWebhookConfiguration
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: validating-webhook-configuration
|
||||
webhooks:
|
||||
- admissionReviewVersions:
|
||||
- v1
|
||||
- v1beta1
|
||||
clientConfig:
|
||||
service:
|
||||
name: webhook-service
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ metadata:
|
|||
spec:
|
||||
ports:
|
||||
- port: 443
|
||||
protocol: TCP
|
||||
targetPort: 9443
|
||||
selector:
|
||||
control-plane: controller-manager
|
||||
|
|
|
|||
|
|
@ -232,8 +232,8 @@ metadata:
|
|||
name: jenkins-operator
|
||||
labels:
|
||||
app.kubernetes.io/name: jenkins-operator
|
||||
helm.sh/chart: jenkins-operator-0.8.0-beta.2
|
||||
app.kubernetes.io/version: "0.8.0-beta.2"
|
||||
helm.sh/chart: jenkins-operator-0.9.0-beta1
|
||||
app.kubernetes.io/version: "0.9.0-beta1"
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
|
|
@ -247,7 +247,7 @@ spec:
|
|||
serviceAccountName: jenkins-operator
|
||||
containers:
|
||||
- name: jenkins-operator
|
||||
image: quay.io/jenkins-kubernetes-operator/operator:v0.8.0-beta2
|
||||
image: quay.io/jenkins-kubernetes-operator/operator:v0.9.0-beta1
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- name: http
|
||||
|
|
@ -270,7 +270,9 @@ spec:
|
|||
periodSeconds: 10
|
||||
env:
|
||||
- name: WATCH_NAMESPACE
|
||||
value: default
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.namespace
|
||||
- name: POD_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
|
|
|
|||
|
|
@ -1330,6 +1330,15 @@ spec:
|
|||
type: string
|
||||
type: object
|
||||
type: object
|
||||
skipPlugins:
|
||||
description: 'Allow to skip installation of both BasePlugins and
|
||||
Plugins. Requires using a custom image which includes the
|
||||
BasePlugins. Defaults to false.'
|
||||
type: boolean
|
||||
terminationGracePeriodSeconds:
|
||||
description: 'Optional duration in seconds the pod needs to terminate gracefully.'
|
||||
type: integer
|
||||
default: 30
|
||||
tolerations:
|
||||
description: If specified, the pod's tolerations.
|
||||
items:
|
||||
|
|
|
|||
120
docs/404.html
120
docs/404.html
|
|
@ -1,120 +0,0 @@
|
|||
<!doctype html>
|
||||
<html lang="en" class="no-js">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="generator" content="Hugo 0.62.2" />
|
||||
|
||||
<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
|
||||
|
||||
|
||||
|
||||
<link rel="shortcut icon" href="/favicons/favicon.ico" >
|
||||
<link rel="apple-touch-icon" href="/kubernetes-operator/favicons/apple-touch-icon-180x180.png" sizes="180x180">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-36x36.png" sizes="36x36">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-48x48.png" sizes="48x48">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-72x72.png" sizes="72x72">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-96x196.png" sizes="96x196">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-144x144.png" sizes="144x144">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-192x192.png"sizes="192x192">
|
||||
|
||||
<title>404 Page not found | Jenkins Operator</title><meta property="og:title" content="404 Page not found" />
|
||||
<meta property="og:description" content="A native operator for Kubernetes to manage Jenkins" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="https://jenkinsci.github.io/kubernetes-operator/404.html" />
|
||||
<meta property="og:site_name" content="Jenkins Operator" />
|
||||
<meta itemprop="name" content="404 Page not found">
|
||||
<meta itemprop="description" content="A native operator for Kubernetes to manage Jenkins"><meta name="twitter:card" content="summary"/>
|
||||
<meta name="twitter:title" content="404 Page not found"/>
|
||||
<meta name="twitter:description" content="A native operator for Kubernetes to manage Jenkins"/>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="preload" href="/kubernetes-operator/scss/main.min.6c58fba96b88d035ce071c346f084a9dc4dedee4e80eb3724fe530520541a4ec.css" as="style">
|
||||
<link href="/kubernetes-operator/scss/main.min.6c58fba96b88d035ce071c346f084a9dc4dedee4e80eb3724fe530520541a4ec.css" rel="stylesheet" integrity="">
|
||||
|
||||
<script
|
||||
src="https://code.jquery.com/jquery-3.3.1.min.js"
|
||||
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
|
||||
crossorigin="anonymous"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body class="td-404">
|
||||
<header>
|
||||
|
||||
<nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar">
|
||||
<a class="navbar-brand" href="/kubernetes-operator/">
|
||||
<img style="width: 32px; height: 32px; margin-right: 7.5px;" src="/kubernetes-operator/img/logo.svg"></img><span class="text-uppercase font-weight-bold">Jenkins Operator</span>
|
||||
</a>
|
||||
<div class="td-navbar-nav-scroll ml-md-auto" id="main_navbar">
|
||||
<ul class="navbar-nav mt-2 mt-lg-0">
|
||||
<li class="nav-item mr-4 mb-2 mb-lg-0">
|
||||
<a class="nav-link" href="/kubernetes-operator/about"><span>What's the Jenkins Operator?</span></a>
|
||||
</li>
|
||||
<li class="nav-item mr-4 mb-2 mb-lg-0">
|
||||
<a class="nav-link" href="/kubernetes-operator/docs"><span>Documentation</span></a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="navbar-nav d-none d-lg-block">
|
||||
<input type="search" class="form-control td-search-input" placeholder=" Search this site…" aria-label="Search this site…" autocomplete="off">
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<div class="container-fluid td-default td-outer">
|
||||
<main role="main" class="td-main">
|
||||
|
||||
<main id="main">
|
||||
<div>
|
||||
<h1 id="title">Not found</h1>
|
||||
<p>Oops! This page doesn't exist. Try going back to our <a href="/kubernetes-operator/">home page</a>.</p>
|
||||
|
||||
<p>You can learn how to make a 404 page like this in <a href="https://gohugo.io/templates/404/">Custom 404 Pages</a>.</p>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
</main>
|
||||
|
||||
<footer class="bg-dark py-5 row d-print-none">
|
||||
<div class="bg-dark container-fluid trademark-bigger">
|
||||
<div class="row">
|
||||
<div class="col-6 col-sm-4 text-xs-center order-sm-2">
|
||||
|
||||
</div>
|
||||
<div class="col-6 col-sm-4 text-right text-xs-center order-sm-3">
|
||||
|
||||
</div>
|
||||
<div class="col-12 col-sm-12 text-center py-4 order-sm-2">
|
||||
<small class="text-white">© 2023 Jenkins Operator is created by VirtusLab. Source is available under Apache License Version 2 and website content under Creative Commons Attribution-ShareAlike 4.0.</small><br>
|
||||
<small class="text-white">Jenkins® is a registered trademark of Software in the Public Interest, Inc.</small>
|
||||
|
||||
<p class="mt-2"><a href="/kubernetes-operator/about/">What's the Jenkins Operator?</a></p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="/kubernetes-operator/js/main.min.b0e99aac17991fa76812dd47914049168ac469a1faa0939560f0b370565becab.js" integrity="sha256-sOmarBeZH6doEt1HkUBJForEaaH6oJOVYPCzcFZb7Ks="></script>
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,166 +0,0 @@
|
|||
<!doctype html>
|
||||
<html lang="en" class="no-js">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="generator" content="Hugo 0.62.2" />
|
||||
|
||||
<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="https://jenkinsci.github.io/kubernetes-operator/about/index.xml">
|
||||
|
||||
|
||||
<link rel="shortcut icon" href="/favicons/favicon.ico" >
|
||||
<link rel="apple-touch-icon" href="/kubernetes-operator/favicons/apple-touch-icon-180x180.png" sizes="180x180">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-36x36.png" sizes="36x36">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-48x48.png" sizes="48x48">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-72x72.png" sizes="72x72">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-96x196.png" sizes="96x196">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-144x144.png" sizes="144x144">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-192x192.png"sizes="192x192">
|
||||
|
||||
<title>What's the Jenkins Operator? | Jenkins Operator</title><meta property="og:title" content="What's the Jenkins Operator?" />
|
||||
<meta property="og:description" content="A native operator for Kubernetes to manage Jenkins" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="https://jenkinsci.github.io/kubernetes-operator/about/" />
|
||||
<meta property="og:site_name" content="Jenkins Operator" />
|
||||
<meta itemprop="name" content="What's the Jenkins Operator?">
|
||||
<meta itemprop="description" content="A native operator for Kubernetes to manage Jenkins"><meta name="twitter:card" content="summary"/>
|
||||
<meta name="twitter:title" content="What's the Jenkins Operator?"/>
|
||||
<meta name="twitter:description" content="A native operator for Kubernetes to manage Jenkins"/>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="preload" href="/kubernetes-operator/scss/main.min.6c58fba96b88d035ce071c346f084a9dc4dedee4e80eb3724fe530520541a4ec.css" as="style">
|
||||
<link href="/kubernetes-operator/scss/main.min.6c58fba96b88d035ce071c346f084a9dc4dedee4e80eb3724fe530520541a4ec.css" rel="stylesheet" integrity="">
|
||||
|
||||
<script
|
||||
src="https://code.jquery.com/jquery-3.3.1.min.js"
|
||||
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
|
||||
crossorigin="anonymous"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body class="td-section">
|
||||
<header>
|
||||
|
||||
<nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar">
|
||||
<a class="navbar-brand" href="/kubernetes-operator/">
|
||||
<img style="width: 32px; height: 32px; margin-right: 7.5px;" src="/kubernetes-operator/img/logo.svg"></img><span class="text-uppercase font-weight-bold">Jenkins Operator</span>
|
||||
</a>
|
||||
<div class="td-navbar-nav-scroll ml-md-auto" id="main_navbar">
|
||||
<ul class="navbar-nav mt-2 mt-lg-0">
|
||||
<li class="nav-item mr-4 mb-2 mb-lg-0">
|
||||
<a class="nav-link" href="/kubernetes-operator/about"><span>What's the Jenkins Operator?</span></a>
|
||||
</li>
|
||||
<li class="nav-item mr-4 mb-2 mb-lg-0">
|
||||
<a class="nav-link" href="/kubernetes-operator/docs"><span>Documentation</span></a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="navbar-nav d-none d-lg-block">
|
||||
<input type="search" class="form-control td-search-input" placeholder=" Search this site…" aria-label="Search this site…" autocomplete="off">
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<div class="container-fluid td-default td-outer">
|
||||
<main role="main" class="td-main">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="td-block-0" class="td-offset-anchor"></a>
|
||||
<section class="row td-box td-box--primary position-relative td-box--gradient td-box--height-auto">
|
||||
<div class="container text-center td-arrow-down">
|
||||
<span class="h4 mb-0">
|
||||
<div style="font-size: 110%;" class="col-12">
|
||||
Jenkins Operator is a Kubernetes native operator which fully manages Jenkins on Kubernetes. <br />It was built with immutability and declarative configuration as code in mind.
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="td-block-1" class="td-offset-anchor"></a>
|
||||
<section class="row td-box td-box--1 td-box--gradient td-box--height-auto">
|
||||
<div class="col">
|
||||
<div class="row ">
|
||||
<div class="col-md-1 order-md-1 hidden-xs hidden-sm hidden-md"></div>
|
||||
<div class="col-md-3 col-lg-1 order-xs-first order-sm-first order-md-last text-center ">
|
||||
<img src="/kubernetes-operator/img/logo.svg" style="height: 75%; margin-left: -75%; margin-top: 50%;" alt="Logo"/>
|
||||
</div>
|
||||
<div class="col-md-4 col-lg-8 order-xs-2 order-sm-2 order-md-2">
|
||||
<h1>The main reason why we decided to develop the <b>Jenkins Operator</b> is the fact that we faced a lot of problems with standard Jenkins deployment. We want to make Jenkins more robust, suitable for dynamic and multi-tenant environments.</h1>
|
||||
<p class="lead mt-2">
|
||||
<br />
|
||||
Some of the problems we want to solve:
|
||||
<ul>
|
||||
<li>Installing plugins with incompatible versions or security vulnerabilities</li>
|
||||
<li>Better configuration as code</li>
|
||||
<li>Lack of end to end tests</li>
|
||||
<li>Handling graceful shutdown properly</li>
|
||||
<li>Security and hardening out of the box</li>
|
||||
<li>Orphaned jobs with no jnlp connection</li>
|
||||
<li>Making errors more visible for end users</li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
</main>
|
||||
|
||||
<footer class="bg-dark py-5 row d-print-none">
|
||||
<div class="bg-dark container-fluid trademark-bigger">
|
||||
<div class="row">
|
||||
<div class="col-6 col-sm-4 text-xs-center order-sm-2">
|
||||
|
||||
</div>
|
||||
<div class="col-6 col-sm-4 text-right text-xs-center order-sm-3">
|
||||
|
||||
</div>
|
||||
<div class="col-12 col-sm-12 text-center py-4 order-sm-2">
|
||||
<small class="text-white">© 2023 Jenkins Operator is created by VirtusLab. Source is available under Apache License Version 2 and website content under Creative Commons Attribution-ShareAlike 4.0.</small><br>
|
||||
<small class="text-white">Jenkins® is a registered trademark of Software in the Public Interest, Inc.</small>
|
||||
|
||||
<p class="mt-2"><a href="/kubernetes-operator/about/">What's the Jenkins Operator?</a></p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="/kubernetes-operator/js/main.min.b0e99aac17991fa76812dd47914049168ac469a1faa0939560f0b370565becab.js" integrity="sha256-sOmarBeZH6doEt1HkUBJForEaaH6oJOVYPCzcFZb7Ks="></script>
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Jenkins Operator – What's the Jenkins Operator?</title>
|
||||
<link>https://jenkinsci.github.io/kubernetes-operator/about/</link>
|
||||
<description>Recent Hugo news from gohugo.io</description>
|
||||
<generator>Hugo -- gohugo.io</generator>
|
||||
<image>
|
||||
<url>https://jenkinsci.github.io/kubernetes-operator/img/hugo.png</url>
|
||||
<title>GoHugo.io</title>
|
||||
<link>https://jenkinsci.github.io/kubernetes-operator/about/</link>
|
||||
</image>
|
||||
|
||||
<atom:link href="https://jenkinsci.github.io/kubernetes-operator/about/index.xml" rel="self" type="application/rss+xml" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
|
|
@ -1,684 +0,0 @@
|
|||
<!doctype html>
|
||||
<html lang="en" class="no-js">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="generator" content="Hugo 0.62.2" />
|
||||
|
||||
<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
|
||||
|
||||
|
||||
|
||||
<link rel="shortcut icon" href="/favicons/favicon.ico" >
|
||||
<link rel="apple-touch-icon" href="/kubernetes-operator/favicons/apple-touch-icon-180x180.png" sizes="180x180">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-36x36.png" sizes="36x36">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-48x48.png" sizes="48x48">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-72x72.png" sizes="72x72">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-96x196.png" sizes="96x196">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-144x144.png" sizes="144x144">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-192x192.png"sizes="192x192">
|
||||
|
||||
<title>Another Great Release | Jenkins Operator</title><meta property="og:title" content="Another Great Release" />
|
||||
<meta property="og:description" content="A short lead description about this content page. Text here can also be **bold** or _italic_ and can even be split over multiple paragraphs.
|
||||
" />
|
||||
<meta property="og:type" content="article" />
|
||||
<meta property="og:url" content="https://jenkinsci.github.io/kubernetes-operator/blog/2018/01/04/another-great-release/" />
|
||||
<meta property="article:published_time" content="2018-01-04T00:00:00+00:00" />
|
||||
<meta property="article:modified_time" content="2018-01-04T00:00:00+00:00" /><meta property="og:site_name" content="Jenkins Operator" />
|
||||
<meta itemprop="name" content="Another Great Release">
|
||||
<meta itemprop="description" content="A short lead description about this content page. Text here can also be **bold** or _italic_ and can even be split over multiple paragraphs.
|
||||
">
|
||||
<meta itemprop="datePublished" content="2018-01-04T00:00:00+00:00" />
|
||||
<meta itemprop="dateModified" content="2018-01-04T00:00:00+00:00" />
|
||||
<meta itemprop="wordCount" content="1233">
|
||||
|
||||
|
||||
|
||||
<meta itemprop="keywords" content="" /><meta name="twitter:card" content="summary"/>
|
||||
<meta name="twitter:title" content="Another Great Release"/>
|
||||
<meta name="twitter:description" content="A short lead description about this content page. Text here can also be **bold** or _italic_ and can even be split over multiple paragraphs.
|
||||
"/>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="preload" href="/kubernetes-operator/scss/main.min.6c58fba96b88d035ce071c346f084a9dc4dedee4e80eb3724fe530520541a4ec.css" as="style">
|
||||
<link href="/kubernetes-operator/scss/main.min.6c58fba96b88d035ce071c346f084a9dc4dedee4e80eb3724fe530520541a4ec.css" rel="stylesheet" integrity="">
|
||||
|
||||
<script
|
||||
src="https://code.jquery.com/jquery-3.3.1.min.js"
|
||||
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
|
||||
crossorigin="anonymous"></script>
|
||||
|
||||
|
||||
<title>Another Great Release | Jenkins Operator</title>
|
||||
</head>
|
||||
<body class="td-page td-blog">
|
||||
<header>
|
||||
|
||||
<nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar">
|
||||
<a class="navbar-brand" href="/kubernetes-operator/">
|
||||
<img style="width: 32px; height: 32px; margin-right: 7.5px;" src="/kubernetes-operator/img/logo.svg"></img><span class="text-uppercase font-weight-bold">Jenkins Operator</span>
|
||||
</a>
|
||||
<div class="td-navbar-nav-scroll ml-md-auto" id="main_navbar">
|
||||
<ul class="navbar-nav mt-2 mt-lg-0">
|
||||
<li class="nav-item mr-4 mb-2 mb-lg-0">
|
||||
<a class="nav-link" href="/kubernetes-operator/about"><span>What's the Jenkins Operator?</span></a>
|
||||
</li>
|
||||
<li class="nav-item mr-4 mb-2 mb-lg-0">
|
||||
<a class="nav-link" href="/kubernetes-operator/docs"><span>Documentation</span></a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="navbar-nav d-none d-lg-block">
|
||||
<input type="search" class="form-control td-search-input" placeholder=" Search this site…" aria-label="Search this site…" autocomplete="off">
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<div class="container-fluid td-outer">
|
||||
<div class="td-main">
|
||||
<div class="row flex-xl-nowrap">
|
||||
<div class="col-12 col-md-3 col-xl-2 td-sidebar d-print-none">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="td-sidebar-menu" class="td-sidebar__inner">
|
||||
|
||||
<form class="td-sidebar__search d-flex align-items-center">
|
||||
|
||||
<input type="search" class="form-control td-search-input" placeholder=" Search this site…" aria-label="Search this site…" autocomplete="off">
|
||||
|
||||
<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type="button" data-toggle="collapse" data-target="#td-section-nav" aria-controls="td-docs-nav" aria-expanded="false" aria-label="Toggle section navigation">
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<nav class="collapse td-sidebar-nav pt-2 pl-4" id="td-section-nav">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul class="td-sidebar-nav__section pr-md-3">
|
||||
<li class="td-sidebar-nav__section-title">
|
||||
<a href="/kubernetes-operator/blog/" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Blog</a>
|
||||
</li>
|
||||
<ul>
|
||||
<li class="collapse show" id="kubernetes-operator-blog">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul class="td-sidebar-nav__section pr-md-3">
|
||||
<li class="td-sidebar-nav__section-title">
|
||||
<a href="/kubernetes-operator/blog/news/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">News</a>
|
||||
</li>
|
||||
<ul>
|
||||
<li class="collapse " id="kubernetes-operator-blog-news">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a class="td-sidebar-link td-sidebar-link__page " id="m-kubernetes-operator-blog-2018-10-06-easy-documentation-with-docsy" href="/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/">Announcing Docsy</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a class="td-sidebar-link td-sidebar-link__page " id="m-kubernetes-operator-blog-2018-10-06-the-second-blog-post" href="/kubernetes-operator/blog/2018/10/06/the-second-blog-post/">Second blog post</a>
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul class="td-sidebar-nav__section pr-md-3">
|
||||
<li class="td-sidebar-nav__section-title">
|
||||
<a href="/kubernetes-operator/blog/releases/" class="align-left pl-0 pr-2 active td-sidebar-link td-sidebar-link__section">Releases</a>
|
||||
</li>
|
||||
<ul>
|
||||
<li class="collapse show" id="kubernetes-operator-blog-releases">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a class="td-sidebar-link td-sidebar-link__page active" id="m-kubernetes-operator-blog-2018-01-04-another-great-release" href="/kubernetes-operator/blog/2018/01/04/another-great-release/">Release New Features</a>
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div class="d-none d-xl-block col-xl-2 td-toc d-print-none">
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="td-page-meta ml-2 pb-1 pt-2 mb-0">
|
||||
|
||||
|
||||
|
||||
<a href="https://github.com/jenkinsci/kubernetes-operator/edit/master/website/content/en/blog/releases/in-depth-monoliths-detailed-spec.md" target="_blank"><i class="fa fa-edit fa-fw"></i> Edit this page</a>
|
||||
<a href="https://github.com/jenkinsci/kubernetes-operator/issues/new?labels=documentation&template=documentation.md&title=Another%20Great%20Release" target="_blank"><i class="fab fa-github fa-fw"></i> Create documentation issue</a>
|
||||
|
||||
|
||||
<a href="https://github.com/jenkinsci/kubernetes-operator/issues/new/choose" target="_blank"><i class="fas fa-tasks fa-fw"></i> Create project issue</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<nav id="TableOfContents">
|
||||
<ul>
|
||||
<li>
|
||||
<ul>
|
||||
<li><a href="#first-header">First Header</a></li>
|
||||
<li><a href="#header-2">Header 2</a>
|
||||
<ul>
|
||||
<li><a href="#header-3">Header 3</a>
|
||||
<ul>
|
||||
<li><a href="#header-4">Header 4</a>
|
||||
<ul>
|
||||
<li><a href="#header-5">Header 5</a>
|
||||
<ul>
|
||||
<li><a href="#header-6">Header 6</a></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
<li><a href="#components">Components</a>
|
||||
<ul>
|
||||
<li><a href="#alerts">Alerts</a></li>
|
||||
</ul></li>
|
||||
<li><a href="#sizing">Sizing</a>
|
||||
<ul>
|
||||
<li><a href="#parameters-available">Parameters available</a></li>
|
||||
<li><a href="#using-pixels">Using pixels</a></li>
|
||||
<li><a href="#using-rem">Using rem</a></li>
|
||||
</ul></li>
|
||||
<li><a href="#memory">Memory</a>
|
||||
<ul>
|
||||
<li><a href="#ram-to-use">RAM to use</a></li>
|
||||
<li><a href="#more-is-better">More is better</a></li>
|
||||
<li><a href="#used-ram">Used RAM</a></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<main class="col-12 col-md-9 col-xl-8 pl-md-5 pr-md-4" role="main">
|
||||
<a class="btn btn-lg -bg-orange td-rss-button d-none d-lg-block" href="https://jenkinsci.github.io/kubernetes-operator/blog/releases/index.xml" target="_blank">
|
||||
RSS <i class="fa fa-rss ml-2 "></i>
|
||||
</a>
|
||||
|
||||
<div class="td-content">
|
||||
<h1>Another Great Release</h1>
|
||||
<div class="lead">A short lead description about this content page. Text here can also be <strong>bold</strong> or <em>italic</em> and can even be split over multiple paragraphs.</div>
|
||||
<div class="td-byline mb-4">
|
||||
|
||||
<time datetime="2018-01-04" class="text-muted">Thursday, January 04, 2018</time>
|
||||
</div>
|
||||
|
||||
|
||||
<p>Text can be <strong>bold</strong>, <em>italic</em>, or <del>strikethrough</del>. <a href="https://github.com">Links</a> should be blue with no underlines (unless hovered over).</p>
|
||||
|
||||
<p>There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs.</p>
|
||||
|
||||
<p>There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs.</p>
|
||||
|
||||
<blockquote>
|
||||
<p>There should be no margin above this first sentence.</p>
|
||||
|
||||
<p>Blockquotes should be a lighter gray with a border along the left side in the secondary color.</p>
|
||||
|
||||
<p>There should be no margin below this final sentence.</p>
|
||||
</blockquote>
|
||||
|
||||
<h2 id="first-header">First Header</h2>
|
||||
|
||||
<p>This is a normal paragraph following a header. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<p>On big screens, paragraphs and headings should not take up the full container width, but we want tables, code blocks and similar to take the full width.</p>
|
||||
|
||||
<p>Lorem markdownum tuta hospes stabat; idem saxum facit quaterque repetito
|
||||
occumbere, oves novem gestit haerebat frena; qui. Respicit recurvam erat:
|
||||
pignora hinc reppulit nos <strong>aut</strong>, aptos, ipsa.</p>
|
||||
|
||||
<p>Meae optatos <em>passa est</em> Epiros utiliter <em>Talibus niveis</em>, hoc lata, edidit.
|
||||
Dixi ad aestum.</p>
|
||||
|
||||
<h2 id="header-2">Header 2</h2>
|
||||
|
||||
<blockquote>
|
||||
<p>This is a blockquote following a header. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
</blockquote>
|
||||
|
||||
<h3 id="header-3">Header 3</h3>
|
||||
<pre><code>This is a code block following a header.</code></pre>
|
||||
<h4 id="header-4">Header 4</h4>
|
||||
|
||||
<ul>
|
||||
<li>This is an unordered list following a header.</li>
|
||||
<li>This is an unordered list following a header.</li>
|
||||
<li>This is an unordered list following a header.</li>
|
||||
</ul>
|
||||
|
||||
<h5 id="header-5">Header 5</h5>
|
||||
|
||||
<ol>
|
||||
<li>This is an ordered list following a header.</li>
|
||||
<li>This is an ordered list following a header.</li>
|
||||
<li>This is an ordered list following a header.</li>
|
||||
</ol>
|
||||
|
||||
<h6 id="header-6">Header 6</h6>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>What</th>
|
||||
<th>Follows</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>A table</td>
|
||||
<td>A header</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>A table</td>
|
||||
<td>A header</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>A table</td>
|
||||
<td>A header</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>There’s a horizontal rule above and below this.</p>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Here is an unordered list:</p>
|
||||
|
||||
<ul>
|
||||
<li>Salt-n-Pepa</li>
|
||||
<li>Bel Biv DeVoe</li>
|
||||
<li>Kid ‘N Play</li>
|
||||
</ul>
|
||||
|
||||
<p>And an ordered list:</p>
|
||||
|
||||
<ol>
|
||||
<li>Michael Jackson</li>
|
||||
<li>Michael Bolton</li>
|
||||
<li>Michael Bublé</li>
|
||||
</ol>
|
||||
|
||||
<p>And an unordered task list:</p>
|
||||
|
||||
<ul class="task-list">
|
||||
<li><label><input type="checkbox" checked disabled class="task-list-item"> Create a sample markdown document</label></li>
|
||||
<li><label><input type="checkbox" checked disabled class="task-list-item"> Add task lists to it</label></li>
|
||||
<li><label><input type="checkbox" disabled class="task-list-item"> Take a vacation</label></li>
|
||||
</ul>
|
||||
|
||||
<p>And a “mixed” task list:</p>
|
||||
|
||||
<ul class="task-list">
|
||||
<li><label><input type="checkbox" disabled class="task-list-item"> Steal underpants</label></li>
|
||||
<li>?</li>
|
||||
<li><label><input type="checkbox" disabled class="task-list-item"> Profit!</label></li>
|
||||
</ul>
|
||||
|
||||
<p>And a nested list:</p>
|
||||
|
||||
<ul>
|
||||
<li>Jackson 5
|
||||
|
||||
<ul>
|
||||
<li>Michael</li>
|
||||
<li>Tito</li>
|
||||
<li>Jackie</li>
|
||||
<li>Marlon</li>
|
||||
<li>Jermaine</li>
|
||||
</ul></li>
|
||||
<li>TMNT
|
||||
|
||||
<ul>
|
||||
<li>Leonardo</li>
|
||||
<li>Michelangelo</li>
|
||||
<li>Donatello</li>
|
||||
<li>Raphael</li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
|
||||
<p>Definition lists can be used with Markdown syntax. Definition terms are bold.</p>
|
||||
|
||||
<dl>
|
||||
<dt>Name</dt>
|
||||
<dd>Godzilla</dd>
|
||||
<dt>Born</dt>
|
||||
<dd>1952</dd>
|
||||
<dt>Birthplace</dt>
|
||||
<dd>Japan</dd>
|
||||
<dt>Color</dt>
|
||||
<dd>Green</dd>
|
||||
</dl>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Tables should have bold headings and alternating shaded rows.</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Artist</th>
|
||||
<th>Album</th>
|
||||
<th>Year</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Michael Jackson</td>
|
||||
<td>Thriller</td>
|
||||
<td>1982</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Prince</td>
|
||||
<td>Purple Rain</td>
|
||||
<td>1984</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Beastie Boys</td>
|
||||
<td>License to Ill</td>
|
||||
<td>1986</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p>If a table is too wide, it should scroll horizontally.</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Artist</th>
|
||||
<th>Album</th>
|
||||
<th>Year</th>
|
||||
<th>Label</th>
|
||||
<th>Awards</th>
|
||||
<th>Songs</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Michael Jackson</td>
|
||||
<td>Thriller</td>
|
||||
<td>1982</td>
|
||||
<td>Epic Records</td>
|
||||
<td>Grammy Award for Album of the Year, American Music Award for Favorite Pop/Rock Album, American Music Award for Favorite Soul/R&B Album, Brit Award for Best Selling Album, Grammy Award for Best Engineered Album, Non-Classical</td>
|
||||
<td>Wanna Be Startin’ Somethin’, Baby Be Mine, The Girl Is Mine, Thriller, Beat It, Billie Jean, Human Nature, P.Y.T. (Pretty Young Thing), The Lady in My Life</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Prince</td>
|
||||
<td>Purple Rain</td>
|
||||
<td>1984</td>
|
||||
<td>Warner Brothers Records</td>
|
||||
<td>Grammy Award for Best Score Soundtrack for Visual Media, American Music Award for Favorite Pop/Rock Album, American Music Award for Favorite Soul/R&B Album, Brit Award for Best Soundtrack/Cast Recording, Grammy Award for Best Rock Performance by a Duo or Group with Vocal</td>
|
||||
<td>Let’s Go Crazy, Take Me With U, The Beautiful Ones, Computer Blue, Darling Nikki, When Doves Cry, I Would Die 4 U, Baby I’m a Star, Purple Rain</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Beastie Boys</td>
|
||||
<td>License to Ill</td>
|
||||
<td>1986</td>
|
||||
<td>Mercury Records</td>
|
||||
<td>noawardsbutthistablecelliswide</td>
|
||||
<td>Rhymin & Stealin, The New Style, She’s Crafty, Posse in Effect, Slow Ride, Girls, (You Gotta) Fight for Your Right, No Sleep Till Brooklyn, Paul Revere, Hold It Now, Hit It, Brass Monkey, Slow and Low, Time to Get Ill</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Code snippets like <code>var foo = "bar";</code> can be shown inline.</p>
|
||||
|
||||
<p>Also, <code>this should vertically align</code> <del><code>with this</code></del> <del>and this</del>.</p>
|
||||
|
||||
<p>Code can also be shown in a block element.</p>
|
||||
<pre><code>foo := "bar";
|
||||
bar := "foo";</code></pre>
|
||||
<p>Code can also use syntax highlighting.</p>
|
||||
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-go" data-lang="go"><span style="color:#204a87;font-weight:bold">func</span> <span style="color:#000">main</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">{</span>
|
||||
<span style="color:#000">input</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#4e9a06">`</span><span style="color:#4e9a06">var foo = "bar";</span><span style="color:#4e9a06">`</span>
|
||||
|
||||
<span style="color:#000">lexer</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">lexers</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">"javascript"</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000">iterator</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">_</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">lexer</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Tokenise</span><span style="color:#000;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">nil</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">input</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000">style</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">styles</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">"github"</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000">formatter</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">html</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">New</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">html</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">WithLineNumbers</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000;font-weight:bold">)</span><span style="color:#000;font-weight:bold">)</span>
|
||||
|
||||
<span style="color:#204a87;font-weight:bold">var</span> <span style="color:#000">buff</span> <span style="color:#000">bytes</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Buffer</span>
|
||||
<span style="color:#000">formatter</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Format</span><span style="color:#000;font-weight:bold">(</span><span style="color:#ce5c00;font-weight:bold">&</span><span style="color:#000">buff</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">style</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">iterator</span><span style="color:#000;font-weight:bold">)</span>
|
||||
|
||||
<span style="color:#000">fmt</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Println</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">buff</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">String</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000;font-weight:bold">)</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000;font-weight:bold">}</span></code></pre></div><pre><code>Long, single-line code blocks should not wrap. They should horizontally scroll if they are too long. This line should be long enough to demonstrate this.</code></pre>
|
||||
<p>Inline code inside table cells should still be distinguishable.</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Language</th>
|
||||
<th>Code</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Javascript</td>
|
||||
<td><code>var foo = "bar";</code></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Ruby</td>
|
||||
<td><code>foo = "bar"{</code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Small images should be shown at their actual size.</p>
|
||||
|
||||
<p><img src="http://placekitten.com/g/300/200/" alt="" /></p>
|
||||
|
||||
<p>Large images should always scale down and fit in the content container.</p>
|
||||
|
||||
<p><img src="http://placekitten.com/g/1200/800/" alt="" /></p>
|
||||
|
||||
<h2 id="components">Components</h2>
|
||||
|
||||
<h3 id="alerts">Alerts</h3>
|
||||
|
||||
<p>
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
|
||||
This is an alert.
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
<h4 class="alert-heading">Note:</h4>
|
||||
This is an alert with a title.
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
|
||||
This is a successful alert.
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
|
||||
This is a warning!
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
<h4 class="alert-heading">Warning!</h4>
|
||||
This is a warning with a title!
|
||||
</div>
|
||||
</p>
|
||||
|
||||
<h2 id="sizing">Sizing</h2>
|
||||
|
||||
<p>Add some sections here to see how the ToC looks like. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="parameters-available">Parameters available</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="using-pixels">Using pixels</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="using-rem">Using rem</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h2 id="memory">Memory</h2>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="ram-to-use">RAM to use</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="more-is-better">More is better</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="used-ram">Used RAM</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
<pre><code>This is the final element on the page and there should be no margin below this.</code></pre>
|
||||
|
||||
|
||||
<ul class="list-unstyled d-flex justify-content-between align-items-center mb-0 pt-5">
|
||||
<li>
|
||||
<a class="btn btn-primary disabled"><span class="mr-1">←</span> Previous</a>
|
||||
</li>
|
||||
<a class="btn btn-primary disabled">Next <span class="ml-1">→</span></a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer class="bg-dark py-5 row d-print-none">
|
||||
<div class="bg-dark container-fluid trademark-bigger">
|
||||
<div class="row">
|
||||
<div class="col-6 col-sm-4 text-xs-center order-sm-2">
|
||||
|
||||
</div>
|
||||
<div class="col-6 col-sm-4 text-right text-xs-center order-sm-3">
|
||||
|
||||
</div>
|
||||
<div class="col-12 col-sm-12 text-center py-4 order-sm-2">
|
||||
<small class="text-white">© 2023 Jenkins Operator is created by VirtusLab. Source is available under Apache License Version 2 and website content under Creative Commons Attribution-ShareAlike 4.0.</small><br>
|
||||
<small class="text-white">Jenkins® is a registered trademark of Software in the Public Interest, Inc.</small>
|
||||
|
||||
<p class="mt-2"><a href="/kubernetes-operator/about/">What's the Jenkins Operator?</a></p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="/kubernetes-operator/js/main.min.b0e99aac17991fa76812dd47914049168ac469a1faa0939560f0b370565becab.js" integrity="sha256-sOmarBeZH6doEt1HkUBJForEaaH6oJOVYPCzcFZb7Ks="></script>
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 378 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 27 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 102 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 92 KiB |
|
|
@ -1,338 +0,0 @@
|
|||
<!doctype html>
|
||||
<html lang="en" class="no-js">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="generator" content="Hugo 0.62.2" />
|
||||
|
||||
<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
|
||||
|
||||
|
||||
|
||||
<link rel="shortcut icon" href="/favicons/favicon.ico" >
|
||||
<link rel="apple-touch-icon" href="/kubernetes-operator/favicons/apple-touch-icon-180x180.png" sizes="180x180">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-36x36.png" sizes="36x36">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-48x48.png" sizes="48x48">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-72x72.png" sizes="72x72">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-96x196.png" sizes="96x196">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-144x144.png" sizes="144x144">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-192x192.png"sizes="192x192">
|
||||
|
||||
<title>Easy documentation with Docsy | Jenkins Operator</title><meta property="og:title" content="Easy documentation with Docsy" />
|
||||
<meta property="og:description" content="The Docsy Hugo theme lets project maintainers and contributors focus on content, not on reinventing a website infrastructure from scratch" />
|
||||
<meta property="og:type" content="article" />
|
||||
<meta property="og:url" content="https://jenkinsci.github.io/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/" />
|
||||
<meta property="og:image" content="https://jenkinsci.github.io/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/featured-sunset-get.png"/>
|
||||
<meta property="article:published_time" content="2018-10-06T00:00:00+00:00" />
|
||||
<meta property="article:modified_time" content="2018-10-06T00:00:00+00:00" /><meta property="og:site_name" content="Jenkins Operator" />
|
||||
<meta itemprop="name" content="Easy documentation with Docsy">
|
||||
<meta itemprop="description" content="The Docsy Hugo theme lets project maintainers and contributors focus on content, not on reinventing a website infrastructure from scratch">
|
||||
<meta itemprop="datePublished" content="2018-10-06T00:00:00+00:00" />
|
||||
<meta itemprop="dateModified" content="2018-10-06T00:00:00+00:00" />
|
||||
<meta itemprop="wordCount" content="135">
|
||||
<meta itemprop="image" content="https://jenkinsci.github.io/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/featured-sunset-get.png">
|
||||
|
||||
|
||||
|
||||
<meta itemprop="keywords" content="" /><meta name="twitter:card" content="summary_large_image"/>
|
||||
<meta name="twitter:image" content="https://jenkinsci.github.io/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/featured-sunset-get.png"/>
|
||||
<meta name="twitter:title" content="Easy documentation with Docsy"/>
|
||||
<meta name="twitter:description" content="The Docsy Hugo theme lets project maintainers and contributors focus on content, not on reinventing a website infrastructure from scratch"/>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="preload" href="/kubernetes-operator/scss/main.min.6c58fba96b88d035ce071c346f084a9dc4dedee4e80eb3724fe530520541a4ec.css" as="style">
|
||||
<link href="/kubernetes-operator/scss/main.min.6c58fba96b88d035ce071c346f084a9dc4dedee4e80eb3724fe530520541a4ec.css" rel="stylesheet" integrity="">
|
||||
|
||||
<script
|
||||
src="https://code.jquery.com/jquery-3.3.1.min.js"
|
||||
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
|
||||
crossorigin="anonymous"></script>
|
||||
|
||||
|
||||
<title>Easy documentation with Docsy | Jenkins Operator</title>
|
||||
</head>
|
||||
<body class="td-page td-blog">
|
||||
<header>
|
||||
|
||||
<nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar">
|
||||
<a class="navbar-brand" href="/kubernetes-operator/">
|
||||
<img style="width: 32px; height: 32px; margin-right: 7.5px;" src="/kubernetes-operator/img/logo.svg"></img><span class="text-uppercase font-weight-bold">Jenkins Operator</span>
|
||||
</a>
|
||||
<div class="td-navbar-nav-scroll ml-md-auto" id="main_navbar">
|
||||
<ul class="navbar-nav mt-2 mt-lg-0">
|
||||
<li class="nav-item mr-4 mb-2 mb-lg-0">
|
||||
<a class="nav-link" href="/kubernetes-operator/about"><span>What's the Jenkins Operator?</span></a>
|
||||
</li>
|
||||
<li class="nav-item mr-4 mb-2 mb-lg-0">
|
||||
<a class="nav-link" href="/kubernetes-operator/docs"><span>Documentation</span></a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="navbar-nav d-none d-lg-block">
|
||||
<input type="search" class="form-control td-search-input" placeholder=" Search this site…" aria-label="Search this site…" autocomplete="off">
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<div class="container-fluid td-outer">
|
||||
<div class="td-main">
|
||||
<div class="row flex-xl-nowrap">
|
||||
<div class="col-12 col-md-3 col-xl-2 td-sidebar d-print-none">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="td-sidebar-menu" class="td-sidebar__inner">
|
||||
|
||||
<form class="td-sidebar__search d-flex align-items-center">
|
||||
|
||||
<input type="search" class="form-control td-search-input" placeholder=" Search this site…" aria-label="Search this site…" autocomplete="off">
|
||||
|
||||
<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type="button" data-toggle="collapse" data-target="#td-section-nav" aria-controls="td-docs-nav" aria-expanded="false" aria-label="Toggle section navigation">
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<nav class="collapse td-sidebar-nav pt-2 pl-4" id="td-section-nav">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul class="td-sidebar-nav__section pr-md-3">
|
||||
<li class="td-sidebar-nav__section-title">
|
||||
<a href="/kubernetes-operator/blog/" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Blog</a>
|
||||
</li>
|
||||
<ul>
|
||||
<li class="collapse show" id="kubernetes-operator-blog">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul class="td-sidebar-nav__section pr-md-3">
|
||||
<li class="td-sidebar-nav__section-title">
|
||||
<a href="/kubernetes-operator/blog/news/" class="align-left pl-0 pr-2 active td-sidebar-link td-sidebar-link__section">News</a>
|
||||
</li>
|
||||
<ul>
|
||||
<li class="collapse show" id="kubernetes-operator-blog-news">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a class="td-sidebar-link td-sidebar-link__page active" id="m-kubernetes-operator-blog-2018-10-06-easy-documentation-with-docsy" href="/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/">Announcing Docsy</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a class="td-sidebar-link td-sidebar-link__page " id="m-kubernetes-operator-blog-2018-10-06-the-second-blog-post" href="/kubernetes-operator/blog/2018/10/06/the-second-blog-post/">Second blog post</a>
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul class="td-sidebar-nav__section pr-md-3">
|
||||
<li class="td-sidebar-nav__section-title">
|
||||
<a href="/kubernetes-operator/blog/releases/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a>
|
||||
</li>
|
||||
<ul>
|
||||
<li class="collapse " id="kubernetes-operator-blog-releases">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a class="td-sidebar-link td-sidebar-link__page " id="m-kubernetes-operator-blog-2018-01-04-another-great-release" href="/kubernetes-operator/blog/2018/01/04/another-great-release/">Release New Features</a>
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div class="d-none d-xl-block col-xl-2 td-toc d-print-none">
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="td-page-meta ml-2 pb-1 pt-2 mb-0">
|
||||
|
||||
|
||||
|
||||
<a href="https://github.com/jenkinsci/kubernetes-operator/edit/master/website/content/en/blog/news/first-post/index.md" target="_blank"><i class="fa fa-edit fa-fw"></i> Edit this page</a>
|
||||
<a href="https://github.com/jenkinsci/kubernetes-operator/issues/new?labels=documentation&template=documentation.md&title=Easy%20documentation%20with%20Docsy" target="_blank"><i class="fab fa-github fa-fw"></i> Create documentation issue</a>
|
||||
|
||||
|
||||
<a href="https://github.com/jenkinsci/kubernetes-operator/issues/new/choose" target="_blank"><i class="fas fa-tasks fa-fw"></i> Create project issue</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<main class="col-12 col-md-9 col-xl-8 pl-md-5 pr-md-4" role="main">
|
||||
<a class="btn btn-lg -bg-orange td-rss-button d-none d-lg-block" href="https://jenkinsci.github.io/kubernetes-operator/blog/news/index.xml" target="_blank">
|
||||
RSS <i class="fa fa-rss ml-2 "></i>
|
||||
</a>
|
||||
|
||||
<div class="td-content">
|
||||
<h1>Easy documentation with Docsy</h1>
|
||||
<div class="lead">The Docsy Hugo theme lets project maintainers and contributors focus on content, not on reinventing a website infrastructure from scratch</div>
|
||||
<div class="td-byline mb-4">
|
||||
By <b>Riona MacNamara (<a href="https://twitter.com/bepsays">@rionam</a>)</b> |
|
||||
<time datetime="2018-10-06" class="text-muted">Saturday, October 06, 2018</time>
|
||||
</div>
|
||||
|
||||
|
||||
<p><strong>This is a typical blog post that includes images.</strong></p>
|
||||
|
||||
<p>The front matter specifies the date of the blog post, its title, a short description that will be displayed on the blog landing page, and its author.</p>
|
||||
|
||||
<h2 id="including-images">Including images</h2>
|
||||
|
||||
<p>Here’s an image (<code>featured-sunset-get.png</code>) that includes a byline and a caption.</p>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 610px">
|
||||
<img class="card-img-top" src="/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/featured-sunset-get_hu69849a7cdb847c2393a7b3a7f6061c86_387442_600x300_fill_catmullrom_smart1_2.png" width="600" height="300">
|
||||
|
||||
<div class="card-body px-0 pt-2 pb-0">
|
||||
<p class="card-text">
|
||||
Fetch and scale an image in the upcoming Hugo 0.43.
|
||||
<small class="text-muted"><br/>Photo: Riona MacNamara / CC-BY-CA</small></p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<p>The front matter of this post specifies properties to be assigned to all image resources:</p>
|
||||
<pre><code>resources:
|
||||
- src: "**.{png,jpg}"
|
||||
title: "Image #:counter"
|
||||
params:
|
||||
byline: "Photo: Riona MacNamara / CC-BY-CA"</code></pre>
|
||||
<p>To include the image in a page, specify its details like this:</p>
|
||||
<pre><code>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 610px">
|
||||
<img class="card-img-top" src="/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/featured-sunset-get_hu69849a7cdb847c2393a7b3a7f6061c86_387442_600x300_fill_catmullrom_smart1_2.png" width="600" height="300">
|
||||
|
||||
<div class="card-body px-0 pt-2 pb-0">
|
||||
<p class="card-text">
|
||||
Fetch and scale an image in the upcoming Hugo 0.43.
|
||||
<small class="text-muted"><br/>Photo: Riona MacNamara / CC-BY-CA</small></p>
|
||||
</div>
|
||||
|
||||
</div></code></pre>
|
||||
<p>The image will be rendered at the size and byline specified in the front matter.</p>
|
||||
|
||||
|
||||
|
||||
<ul class="list-unstyled d-flex justify-content-between align-items-center mb-0 pt-5">
|
||||
<li>
|
||||
<a href="/kubernetes-operator/blog/2018/10/06/the-second-blog-post/" class="btn btn-primary "><span class="mr-1">←</span> Previous</a>
|
||||
</li>
|
||||
<a class="btn btn-primary disabled">Next <span class="ml-1">→</span></a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer class="bg-dark py-5 row d-print-none">
|
||||
<div class="bg-dark container-fluid trademark-bigger">
|
||||
<div class="row">
|
||||
<div class="col-6 col-sm-4 text-xs-center order-sm-2">
|
||||
|
||||
</div>
|
||||
<div class="col-6 col-sm-4 text-right text-xs-center order-sm-3">
|
||||
|
||||
</div>
|
||||
<div class="col-12 col-sm-12 text-center py-4 order-sm-2">
|
||||
<small class="text-white">© 2023 Jenkins Operator is created by VirtusLab. Source is available under Apache License Version 2 and website content under Creative Commons Attribution-ShareAlike 4.0.</small><br>
|
||||
<small class="text-white">Jenkins® is a registered trademark of Software in the Public Interest, Inc.</small>
|
||||
|
||||
<p class="mt-2"><a href="/kubernetes-operator/about/">What's the Jenkins Operator?</a></p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="/kubernetes-operator/js/main.min.b0e99aac17991fa76812dd47914049168ac469a1faa0939560f0b370565becab.js" integrity="sha256-sOmarBeZH6doEt1HkUBJForEaaH6oJOVYPCzcFZb7Ks="></script>
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,684 +0,0 @@
|
|||
<!doctype html>
|
||||
<html lang="en" class="no-js">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="generator" content="Hugo 0.62.2" />
|
||||
|
||||
<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
|
||||
|
||||
|
||||
|
||||
<link rel="shortcut icon" href="/favicons/favicon.ico" >
|
||||
<link rel="apple-touch-icon" href="/kubernetes-operator/favicons/apple-touch-icon-180x180.png" sizes="180x180">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-36x36.png" sizes="36x36">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-48x48.png" sizes="48x48">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-72x72.png" sizes="72x72">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-96x196.png" sizes="96x196">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-144x144.png" sizes="144x144">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-192x192.png"sizes="192x192">
|
||||
|
||||
<title>The second blog post | Jenkins Operator</title><meta property="og:title" content="The second blog post" />
|
||||
<meta property="og:description" content="A short lead description about this content page. Text here can also be **bold** or _italic_ and can even be split over multiple paragraphs.
|
||||
" />
|
||||
<meta property="og:type" content="article" />
|
||||
<meta property="og:url" content="https://jenkinsci.github.io/kubernetes-operator/blog/2018/10/06/the-second-blog-post/" />
|
||||
<meta property="article:published_time" content="2018-10-06T00:00:00+00:00" />
|
||||
<meta property="article:modified_time" content="2018-10-06T00:00:00+00:00" /><meta property="og:site_name" content="Jenkins Operator" />
|
||||
<meta itemprop="name" content="The second blog post">
|
||||
<meta itemprop="description" content="A short lead description about this content page. Text here can also be **bold** or _italic_ and can even be split over multiple paragraphs.
|
||||
">
|
||||
<meta itemprop="datePublished" content="2018-10-06T00:00:00+00:00" />
|
||||
<meta itemprop="dateModified" content="2018-10-06T00:00:00+00:00" />
|
||||
<meta itemprop="wordCount" content="1233">
|
||||
|
||||
|
||||
|
||||
<meta itemprop="keywords" content="" /><meta name="twitter:card" content="summary"/>
|
||||
<meta name="twitter:title" content="The second blog post"/>
|
||||
<meta name="twitter:description" content="A short lead description about this content page. Text here can also be **bold** or _italic_ and can even be split over multiple paragraphs.
|
||||
"/>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="preload" href="/kubernetes-operator/scss/main.min.6c58fba96b88d035ce071c346f084a9dc4dedee4e80eb3724fe530520541a4ec.css" as="style">
|
||||
<link href="/kubernetes-operator/scss/main.min.6c58fba96b88d035ce071c346f084a9dc4dedee4e80eb3724fe530520541a4ec.css" rel="stylesheet" integrity="">
|
||||
|
||||
<script
|
||||
src="https://code.jquery.com/jquery-3.3.1.min.js"
|
||||
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
|
||||
crossorigin="anonymous"></script>
|
||||
|
||||
|
||||
<title>The second blog post | Jenkins Operator</title>
|
||||
</head>
|
||||
<body class="td-page td-blog">
|
||||
<header>
|
||||
|
||||
<nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar">
|
||||
<a class="navbar-brand" href="/kubernetes-operator/">
|
||||
<img style="width: 32px; height: 32px; margin-right: 7.5px;" src="/kubernetes-operator/img/logo.svg"></img><span class="text-uppercase font-weight-bold">Jenkins Operator</span>
|
||||
</a>
|
||||
<div class="td-navbar-nav-scroll ml-md-auto" id="main_navbar">
|
||||
<ul class="navbar-nav mt-2 mt-lg-0">
|
||||
<li class="nav-item mr-4 mb-2 mb-lg-0">
|
||||
<a class="nav-link" href="/kubernetes-operator/about"><span>What's the Jenkins Operator?</span></a>
|
||||
</li>
|
||||
<li class="nav-item mr-4 mb-2 mb-lg-0">
|
||||
<a class="nav-link" href="/kubernetes-operator/docs"><span>Documentation</span></a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="navbar-nav d-none d-lg-block">
|
||||
<input type="search" class="form-control td-search-input" placeholder=" Search this site…" aria-label="Search this site…" autocomplete="off">
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<div class="container-fluid td-outer">
|
||||
<div class="td-main">
|
||||
<div class="row flex-xl-nowrap">
|
||||
<div class="col-12 col-md-3 col-xl-2 td-sidebar d-print-none">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="td-sidebar-menu" class="td-sidebar__inner">
|
||||
|
||||
<form class="td-sidebar__search d-flex align-items-center">
|
||||
|
||||
<input type="search" class="form-control td-search-input" placeholder=" Search this site…" aria-label="Search this site…" autocomplete="off">
|
||||
|
||||
<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type="button" data-toggle="collapse" data-target="#td-section-nav" aria-controls="td-docs-nav" aria-expanded="false" aria-label="Toggle section navigation">
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<nav class="collapse td-sidebar-nav pt-2 pl-4" id="td-section-nav">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul class="td-sidebar-nav__section pr-md-3">
|
||||
<li class="td-sidebar-nav__section-title">
|
||||
<a href="/kubernetes-operator/blog/" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Blog</a>
|
||||
</li>
|
||||
<ul>
|
||||
<li class="collapse show" id="kubernetes-operator-blog">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul class="td-sidebar-nav__section pr-md-3">
|
||||
<li class="td-sidebar-nav__section-title">
|
||||
<a href="/kubernetes-operator/blog/news/" class="align-left pl-0 pr-2 active td-sidebar-link td-sidebar-link__section">News</a>
|
||||
</li>
|
||||
<ul>
|
||||
<li class="collapse show" id="kubernetes-operator-blog-news">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a class="td-sidebar-link td-sidebar-link__page " id="m-kubernetes-operator-blog-2018-10-06-easy-documentation-with-docsy" href="/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/">Announcing Docsy</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a class="td-sidebar-link td-sidebar-link__page active" id="m-kubernetes-operator-blog-2018-10-06-the-second-blog-post" href="/kubernetes-operator/blog/2018/10/06/the-second-blog-post/">Second blog post</a>
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul class="td-sidebar-nav__section pr-md-3">
|
||||
<li class="td-sidebar-nav__section-title">
|
||||
<a href="/kubernetes-operator/blog/releases/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a>
|
||||
</li>
|
||||
<ul>
|
||||
<li class="collapse " id="kubernetes-operator-blog-releases">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a class="td-sidebar-link td-sidebar-link__page " id="m-kubernetes-operator-blog-2018-01-04-another-great-release" href="/kubernetes-operator/blog/2018/01/04/another-great-release/">Release New Features</a>
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div class="d-none d-xl-block col-xl-2 td-toc d-print-none">
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="td-page-meta ml-2 pb-1 pt-2 mb-0">
|
||||
|
||||
|
||||
|
||||
<a href="https://github.com/jenkinsci/kubernetes-operator/edit/master/website/content/en/blog/news/second-post.md" target="_blank"><i class="fa fa-edit fa-fw"></i> Edit this page</a>
|
||||
<a href="https://github.com/jenkinsci/kubernetes-operator/issues/new?labels=documentation&template=documentation.md&title=The%20second%20blog%20post" target="_blank"><i class="fab fa-github fa-fw"></i> Create documentation issue</a>
|
||||
|
||||
|
||||
<a href="https://github.com/jenkinsci/kubernetes-operator/issues/new/choose" target="_blank"><i class="fas fa-tasks fa-fw"></i> Create project issue</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<nav id="TableOfContents">
|
||||
<ul>
|
||||
<li>
|
||||
<ul>
|
||||
<li><a href="#first-header">First Header</a></li>
|
||||
<li><a href="#header-2">Header 2</a>
|
||||
<ul>
|
||||
<li><a href="#header-3">Header 3</a>
|
||||
<ul>
|
||||
<li><a href="#header-4">Header 4</a>
|
||||
<ul>
|
||||
<li><a href="#header-5">Header 5</a>
|
||||
<ul>
|
||||
<li><a href="#header-6">Header 6</a></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
<li><a href="#components">Components</a>
|
||||
<ul>
|
||||
<li><a href="#alerts">Alerts</a></li>
|
||||
</ul></li>
|
||||
<li><a href="#sizing">Sizing</a>
|
||||
<ul>
|
||||
<li><a href="#parameters-available">Parameters available</a></li>
|
||||
<li><a href="#using-pixels">Using pixels</a></li>
|
||||
<li><a href="#using-rem">Using rem</a></li>
|
||||
</ul></li>
|
||||
<li><a href="#memory">Memory</a>
|
||||
<ul>
|
||||
<li><a href="#ram-to-use">RAM to use</a></li>
|
||||
<li><a href="#more-is-better">More is better</a></li>
|
||||
<li><a href="#used-ram">Used RAM</a></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<main class="col-12 col-md-9 col-xl-8 pl-md-5 pr-md-4" role="main">
|
||||
<a class="btn btn-lg -bg-orange td-rss-button d-none d-lg-block" href="https://jenkinsci.github.io/kubernetes-operator/blog/news/index.xml" target="_blank">
|
||||
RSS <i class="fa fa-rss ml-2 "></i>
|
||||
</a>
|
||||
|
||||
<div class="td-content">
|
||||
<h1>The second blog post</h1>
|
||||
<div class="lead">A short lead description about this content page. Text here can also be <strong>bold</strong> or <em>italic</em> and can even be split over multiple paragraphs.</div>
|
||||
<div class="td-byline mb-4">
|
||||
|
||||
<time datetime="2018-10-06" class="text-muted">Saturday, October 06, 2018</time>
|
||||
</div>
|
||||
|
||||
|
||||
<p>Text can be <strong>bold</strong>, <em>italic</em>, or <del>strikethrough</del>. <a href="https://github.com">Links</a> should be blue with no underlines (unless hovered over).</p>
|
||||
|
||||
<p>There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs.</p>
|
||||
|
||||
<p>There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs.</p>
|
||||
|
||||
<blockquote>
|
||||
<p>There should be no margin above this first sentence.</p>
|
||||
|
||||
<p>Blockquotes should be a lighter gray with a border along the left side in the secondary color.</p>
|
||||
|
||||
<p>There should be no margin below this final sentence.</p>
|
||||
</blockquote>
|
||||
|
||||
<h2 id="first-header">First Header</h2>
|
||||
|
||||
<p>This is a normal paragraph following a header. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<p>On big screens, paragraphs and headings should not take up the full container width, but we want tables, code blocks and similar to take the full width.</p>
|
||||
|
||||
<p>Lorem markdownum tuta hospes stabat; idem saxum facit quaterque repetito
|
||||
occumbere, oves novem gestit haerebat frena; qui. Respicit recurvam erat:
|
||||
pignora hinc reppulit nos <strong>aut</strong>, aptos, ipsa.</p>
|
||||
|
||||
<p>Meae optatos <em>passa est</em> Epiros utiliter <em>Talibus niveis</em>, hoc lata, edidit.
|
||||
Dixi ad aestum.</p>
|
||||
|
||||
<h2 id="header-2">Header 2</h2>
|
||||
|
||||
<blockquote>
|
||||
<p>This is a blockquote following a header. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
</blockquote>
|
||||
|
||||
<h3 id="header-3">Header 3</h3>
|
||||
<pre><code>This is a code block following a header.</code></pre>
|
||||
<h4 id="header-4">Header 4</h4>
|
||||
|
||||
<ul>
|
||||
<li>This is an unordered list following a header.</li>
|
||||
<li>This is an unordered list following a header.</li>
|
||||
<li>This is an unordered list following a header.</li>
|
||||
</ul>
|
||||
|
||||
<h5 id="header-5">Header 5</h5>
|
||||
|
||||
<ol>
|
||||
<li>This is an ordered list following a header.</li>
|
||||
<li>This is an ordered list following a header.</li>
|
||||
<li>This is an ordered list following a header.</li>
|
||||
</ol>
|
||||
|
||||
<h6 id="header-6">Header 6</h6>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>What</th>
|
||||
<th>Follows</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>A table</td>
|
||||
<td>A header</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>A table</td>
|
||||
<td>A header</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>A table</td>
|
||||
<td>A header</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>There’s a horizontal rule above and below this.</p>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Here is an unordered list:</p>
|
||||
|
||||
<ul>
|
||||
<li>Salt-n-Pepa</li>
|
||||
<li>Bel Biv DeVoe</li>
|
||||
<li>Kid ‘N Play</li>
|
||||
</ul>
|
||||
|
||||
<p>And an ordered list:</p>
|
||||
|
||||
<ol>
|
||||
<li>Michael Jackson</li>
|
||||
<li>Michael Bolton</li>
|
||||
<li>Michael Bublé</li>
|
||||
</ol>
|
||||
|
||||
<p>And an unordered task list:</p>
|
||||
|
||||
<ul class="task-list">
|
||||
<li><label><input type="checkbox" checked disabled class="task-list-item"> Create a sample markdown document</label></li>
|
||||
<li><label><input type="checkbox" checked disabled class="task-list-item"> Add task lists to it</label></li>
|
||||
<li><label><input type="checkbox" disabled class="task-list-item"> Take a vacation</label></li>
|
||||
</ul>
|
||||
|
||||
<p>And a “mixed” task list:</p>
|
||||
|
||||
<ul class="task-list">
|
||||
<li><label><input type="checkbox" disabled class="task-list-item"> Steal underpants</label></li>
|
||||
<li>?</li>
|
||||
<li><label><input type="checkbox" disabled class="task-list-item"> Profit!</label></li>
|
||||
</ul>
|
||||
|
||||
<p>And a nested list:</p>
|
||||
|
||||
<ul>
|
||||
<li>Jackson 5
|
||||
|
||||
<ul>
|
||||
<li>Michael</li>
|
||||
<li>Tito</li>
|
||||
<li>Jackie</li>
|
||||
<li>Marlon</li>
|
||||
<li>Jermaine</li>
|
||||
</ul></li>
|
||||
<li>TMNT
|
||||
|
||||
<ul>
|
||||
<li>Leonardo</li>
|
||||
<li>Michelangelo</li>
|
||||
<li>Donatello</li>
|
||||
<li>Raphael</li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
|
||||
<p>Definition lists can be used with Markdown syntax. Definition terms are bold.</p>
|
||||
|
||||
<dl>
|
||||
<dt>Name</dt>
|
||||
<dd>Godzilla</dd>
|
||||
<dt>Born</dt>
|
||||
<dd>1952</dd>
|
||||
<dt>Birthplace</dt>
|
||||
<dd>Japan</dd>
|
||||
<dt>Color</dt>
|
||||
<dd>Green</dd>
|
||||
</dl>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Tables should have bold headings and alternating shaded rows.</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Artist</th>
|
||||
<th>Album</th>
|
||||
<th>Year</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Michael Jackson</td>
|
||||
<td>Thriller</td>
|
||||
<td>1982</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Prince</td>
|
||||
<td>Purple Rain</td>
|
||||
<td>1984</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Beastie Boys</td>
|
||||
<td>License to Ill</td>
|
||||
<td>1986</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p>If a table is too wide, it should scroll horizontally.</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Artist</th>
|
||||
<th>Album</th>
|
||||
<th>Year</th>
|
||||
<th>Label</th>
|
||||
<th>Awards</th>
|
||||
<th>Songs</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Michael Jackson</td>
|
||||
<td>Thriller</td>
|
||||
<td>1982</td>
|
||||
<td>Epic Records</td>
|
||||
<td>Grammy Award for Album of the Year, American Music Award for Favorite Pop/Rock Album, American Music Award for Favorite Soul/R&B Album, Brit Award for Best Selling Album, Grammy Award for Best Engineered Album, Non-Classical</td>
|
||||
<td>Wanna Be Startin’ Somethin’, Baby Be Mine, The Girl Is Mine, Thriller, Beat It, Billie Jean, Human Nature, P.Y.T. (Pretty Young Thing), The Lady in My Life</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Prince</td>
|
||||
<td>Purple Rain</td>
|
||||
<td>1984</td>
|
||||
<td>Warner Brothers Records</td>
|
||||
<td>Grammy Award for Best Score Soundtrack for Visual Media, American Music Award for Favorite Pop/Rock Album, American Music Award for Favorite Soul/R&B Album, Brit Award for Best Soundtrack/Cast Recording, Grammy Award for Best Rock Performance by a Duo or Group with Vocal</td>
|
||||
<td>Let’s Go Crazy, Take Me With U, The Beautiful Ones, Computer Blue, Darling Nikki, When Doves Cry, I Would Die 4 U, Baby I’m a Star, Purple Rain</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Beastie Boys</td>
|
||||
<td>License to Ill</td>
|
||||
<td>1986</td>
|
||||
<td>Mercury Records</td>
|
||||
<td>noawardsbutthistablecelliswide</td>
|
||||
<td>Rhymin & Stealin, The New Style, She’s Crafty, Posse in Effect, Slow Ride, Girls, (You Gotta) Fight for Your Right, No Sleep Till Brooklyn, Paul Revere, Hold It Now, Hit It, Brass Monkey, Slow and Low, Time to Get Ill</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Code snippets like <code>var foo = "bar";</code> can be shown inline.</p>
|
||||
|
||||
<p>Also, <code>this should vertically align</code> <del><code>with this</code></del> <del>and this</del>.</p>
|
||||
|
||||
<p>Code can also be shown in a block element.</p>
|
||||
<pre><code>foo := "bar";
|
||||
bar := "foo";</code></pre>
|
||||
<p>Code can also use syntax highlighting.</p>
|
||||
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-go" data-lang="go"><span style="color:#204a87;font-weight:bold">func</span> <span style="color:#000">main</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">{</span>
|
||||
<span style="color:#000">input</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#4e9a06">`</span><span style="color:#4e9a06">var foo = "bar";</span><span style="color:#4e9a06">`</span>
|
||||
|
||||
<span style="color:#000">lexer</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">lexers</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">"javascript"</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000">iterator</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">_</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">lexer</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Tokenise</span><span style="color:#000;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">nil</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">input</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000">style</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">styles</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">"github"</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000">formatter</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">html</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">New</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">html</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">WithLineNumbers</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000;font-weight:bold">)</span><span style="color:#000;font-weight:bold">)</span>
|
||||
|
||||
<span style="color:#204a87;font-weight:bold">var</span> <span style="color:#000">buff</span> <span style="color:#000">bytes</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Buffer</span>
|
||||
<span style="color:#000">formatter</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Format</span><span style="color:#000;font-weight:bold">(</span><span style="color:#ce5c00;font-weight:bold">&</span><span style="color:#000">buff</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">style</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">iterator</span><span style="color:#000;font-weight:bold">)</span>
|
||||
|
||||
<span style="color:#000">fmt</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Println</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">buff</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">String</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000;font-weight:bold">)</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000;font-weight:bold">}</span></code></pre></div><pre><code>Long, single-line code blocks should not wrap. They should horizontally scroll if they are too long. This line should be long enough to demonstrate this.</code></pre>
|
||||
<p>Inline code inside table cells should still be distinguishable.</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Language</th>
|
||||
<th>Code</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Javascript</td>
|
||||
<td><code>var foo = "bar";</code></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Ruby</td>
|
||||
<td><code>foo = "bar"{</code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Small images should be shown at their actual size.</p>
|
||||
|
||||
<p><img src="http://placekitten.com/g/300/200/" alt="" /></p>
|
||||
|
||||
<p>Large images should always scale down and fit in the content container.</p>
|
||||
|
||||
<p><img src="http://placekitten.com/g/1200/800/" alt="" /></p>
|
||||
|
||||
<h2 id="components">Components</h2>
|
||||
|
||||
<h3 id="alerts">Alerts</h3>
|
||||
|
||||
<p>
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
|
||||
This is an alert.
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
<h4 class="alert-heading">Note:</h4>
|
||||
This is an alert with a title.
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
|
||||
This is a successful alert.
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
|
||||
This is a warning!
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
<h4 class="alert-heading">Warning!</h4>
|
||||
This is a warning with a title!
|
||||
</div>
|
||||
</p>
|
||||
|
||||
<h2 id="sizing">Sizing</h2>
|
||||
|
||||
<p>Add some sections here to see how the ToC looks like. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="parameters-available">Parameters available</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="using-pixels">Using pixels</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="using-rem">Using rem</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h2 id="memory">Memory</h2>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="ram-to-use">RAM to use</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="more-is-better">More is better</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="used-ram">Used RAM</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
<pre><code>This is the final element on the page and there should be no margin below this.</code></pre>
|
||||
|
||||
|
||||
<ul class="list-unstyled d-flex justify-content-between align-items-center mb-0 pt-5">
|
||||
<li>
|
||||
<a class="btn btn-primary disabled"><span class="mr-1">←</span> Previous</a>
|
||||
</li>
|
||||
<a href="/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/" class="btn btn-primary ">Next <span class="ml-1">→</span></a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer class="bg-dark py-5 row d-print-none">
|
||||
<div class="bg-dark container-fluid trademark-bigger">
|
||||
<div class="row">
|
||||
<div class="col-6 col-sm-4 text-xs-center order-sm-2">
|
||||
|
||||
</div>
|
||||
<div class="col-6 col-sm-4 text-right text-xs-center order-sm-3">
|
||||
|
||||
</div>
|
||||
<div class="col-12 col-sm-12 text-center py-4 order-sm-2">
|
||||
<small class="text-white">© 2023 Jenkins Operator is created by VirtusLab. Source is available under Apache License Version 2 and website content under Creative Commons Attribution-ShareAlike 4.0.</small><br>
|
||||
<small class="text-white">Jenkins® is a registered trademark of Software in the Public Interest, Inc.</small>
|
||||
|
||||
<p class="mt-2"><a href="/kubernetes-operator/about/">What's the Jenkins Operator?</a></p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="/kubernetes-operator/js/main.min.b0e99aac17991fa76812dd47914049168ac469a1faa0939560f0b370565becab.js" integrity="sha256-sOmarBeZH6doEt1HkUBJForEaaH6oJOVYPCzcFZb7Ks="></script>
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,334 +0,0 @@
|
|||
<!doctype html>
|
||||
<html lang="en" class="no-js">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="generator" content="Hugo 0.62.2" />
|
||||
|
||||
<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="https://jenkinsci.github.io/kubernetes-operator/blog/index.xml">
|
||||
|
||||
|
||||
<link rel="shortcut icon" href="/favicons/favicon.ico" >
|
||||
<link rel="apple-touch-icon" href="/kubernetes-operator/favicons/apple-touch-icon-180x180.png" sizes="180x180">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-36x36.png" sizes="36x36">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-48x48.png" sizes="48x48">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-72x72.png" sizes="72x72">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-96x196.png" sizes="96x196">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-144x144.png" sizes="144x144">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-192x192.png"sizes="192x192">
|
||||
|
||||
<title>Docsy Blog | Jenkins Operator</title><meta property="og:title" content="Docsy Blog" />
|
||||
<meta property="og:description" content="A native operator for Kubernetes to manage Jenkins" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="https://jenkinsci.github.io/kubernetes-operator/blog/" />
|
||||
<meta property="og:site_name" content="Jenkins Operator" />
|
||||
<meta itemprop="name" content="Docsy Blog">
|
||||
<meta itemprop="description" content="A native operator for Kubernetes to manage Jenkins"><meta name="twitter:card" content="summary"/>
|
||||
<meta name="twitter:title" content="Docsy Blog"/>
|
||||
<meta name="twitter:description" content="A native operator for Kubernetes to manage Jenkins"/>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="preload" href="/kubernetes-operator/scss/main.min.6c58fba96b88d035ce071c346f084a9dc4dedee4e80eb3724fe530520541a4ec.css" as="style">
|
||||
<link href="/kubernetes-operator/scss/main.min.6c58fba96b88d035ce071c346f084a9dc4dedee4e80eb3724fe530520541a4ec.css" rel="stylesheet" integrity="">
|
||||
|
||||
<script
|
||||
src="https://code.jquery.com/jquery-3.3.1.min.js"
|
||||
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
|
||||
crossorigin="anonymous"></script>
|
||||
|
||||
|
||||
<title>Docsy Blog | Jenkins Operator</title>
|
||||
</head>
|
||||
<body class="td-section td-blog">
|
||||
<header>
|
||||
|
||||
<nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar">
|
||||
<a class="navbar-brand" href="/kubernetes-operator/">
|
||||
<img style="width: 32px; height: 32px; margin-right: 7.5px;" src="/kubernetes-operator/img/logo.svg"></img><span class="text-uppercase font-weight-bold">Jenkins Operator</span>
|
||||
</a>
|
||||
<div class="td-navbar-nav-scroll ml-md-auto" id="main_navbar">
|
||||
<ul class="navbar-nav mt-2 mt-lg-0">
|
||||
<li class="nav-item mr-4 mb-2 mb-lg-0">
|
||||
<a class="nav-link" href="/kubernetes-operator/about"><span>What's the Jenkins Operator?</span></a>
|
||||
</li>
|
||||
<li class="nav-item mr-4 mb-2 mb-lg-0">
|
||||
<a class="nav-link" href="/kubernetes-operator/docs"><span>Documentation</span></a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="navbar-nav d-none d-lg-block">
|
||||
<input type="search" class="form-control td-search-input" placeholder=" Search this site…" aria-label="Search this site…" autocomplete="off">
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<div class="container-fluid td-outer">
|
||||
<div class="td-main">
|
||||
<div class="row flex-xl-nowrap">
|
||||
<div class="col-12 col-md-3 col-xl-2 td-sidebar d-print-none">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="td-sidebar-menu" class="td-sidebar__inner">
|
||||
|
||||
<form class="td-sidebar__search d-flex align-items-center">
|
||||
|
||||
<input type="search" class="form-control td-search-input" placeholder=" Search this site…" aria-label="Search this site…" autocomplete="off">
|
||||
|
||||
<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type="button" data-toggle="collapse" data-target="#td-section-nav" aria-controls="td-docs-nav" aria-expanded="false" aria-label="Toggle section navigation">
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<nav class="collapse td-sidebar-nav pt-2 pl-4" id="td-section-nav">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul class="td-sidebar-nav__section pr-md-3">
|
||||
<li class="td-sidebar-nav__section-title">
|
||||
<a href="/kubernetes-operator/blog/" class="align-left pl-0 pr-2 active td-sidebar-link td-sidebar-link__section">Blog</a>
|
||||
</li>
|
||||
<ul>
|
||||
<li class="collapse show" id="kubernetes-operator-blog">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul class="td-sidebar-nav__section pr-md-3">
|
||||
<li class="td-sidebar-nav__section-title">
|
||||
<a href="/kubernetes-operator/blog/news/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">News</a>
|
||||
</li>
|
||||
<ul>
|
||||
<li class="collapse " id="kubernetes-operator-blog-news">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a class="td-sidebar-link td-sidebar-link__page " id="m-kubernetes-operator-blog-2018-10-06-easy-documentation-with-docsy" href="/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/">Announcing Docsy</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a class="td-sidebar-link td-sidebar-link__page " id="m-kubernetes-operator-blog-2018-10-06-the-second-blog-post" href="/kubernetes-operator/blog/2018/10/06/the-second-blog-post/">Second blog post</a>
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul class="td-sidebar-nav__section pr-md-3">
|
||||
<li class="td-sidebar-nav__section-title">
|
||||
<a href="/kubernetes-operator/blog/releases/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a>
|
||||
</li>
|
||||
<ul>
|
||||
<li class="collapse " id="kubernetes-operator-blog-releases">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a class="td-sidebar-link td-sidebar-link__page " id="m-kubernetes-operator-blog-2018-01-04-another-great-release" href="/kubernetes-operator/blog/2018/01/04/another-great-release/">Release New Features</a>
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div class="d-none d-xl-block col-xl-2 td-toc d-print-none">
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="td-page-meta ml-2 pb-1 pt-2 mb-0">
|
||||
|
||||
|
||||
|
||||
<a href="https://github.com/jenkinsci/kubernetes-operator/edit/master/website/content/en/blog/_index.md" target="_blank"><i class="fa fa-edit fa-fw"></i> Edit this page</a>
|
||||
<a href="https://github.com/jenkinsci/kubernetes-operator/issues/new?labels=documentation&template=documentation.md&title=Docsy%20Blog" target="_blank"><i class="fab fa-github fa-fw"></i> Create documentation issue</a>
|
||||
|
||||
|
||||
<a href="https://github.com/jenkinsci/kubernetes-operator/issues/new/choose" target="_blank"><i class="fas fa-tasks fa-fw"></i> Create project issue</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<main class="col-12 col-md-9 col-xl-8 pl-md-5 pr-md-4" role="main">
|
||||
<a class="btn btn-lg -bg-orange td-rss-button d-none d-lg-block" href="https://jenkinsci.github.io/kubernetes-operator/blog/index.xml" target="_blank">
|
||||
RSS <i class="fa fa-rss ml-2 "></i>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
|
||||
<h2>Posts in 2018</h2>
|
||||
<ul class="list-unstyled mt-4">
|
||||
|
||||
<li class="media mb-4">
|
||||
<div class="media-body">
|
||||
<h5 class="mt-0 mb-1"><a href="/kubernetes-operator/blog/2018/10/06/the-second-blog-post/">Second blog post</a></h5>
|
||||
<p class="mb-2 mb-md-3"><small class="text-muted">Saturday, October 06, 2018 in News</small></p>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<p class="pt-0 mt-0"> Text can be bold, italic, or strikethrough. Links should be blue with no underlines (unless hovered over).
|
||||
There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs. …</p>
|
||||
<p class="pt-0"><a href="/kubernetes-operator/blog/2018/10/06/the-second-blog-post/">Read more</a></p>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="media mb-4">
|
||||
<div class="media-body">
|
||||
<h5 class="mt-0 mb-1"><a href="/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/">Announcing Docsy</a></h5>
|
||||
<p class="mb-2 mb-md-3"><small class="text-muted">Saturday, October 06, 2018 in News</small></p>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<figure class="float-left mr-3 pt-1 d-none d-md-block" style="width: 250px">
|
||||
<img src="/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/featured-sunset-get_hu69849a7cdb847c2393a7b3a7f6061c86_387442_250x125_fill_catmullrom_smart1_2.png" alt="Featured Image for Easy documentation with Docsy" width="250" height="125">
|
||||
|
||||
<figcaption class="mt-2 mt-md-0"><small class="text-muted">Photo: Riona MacNamara / CC-BY-CA</small></figcaption>
|
||||
|
||||
</figure>
|
||||
|
||||
<p class="pt-0 mt-0"> This is a typical blog post that includes images.
|
||||
The front matter specifies the date of the blog post, its title, a short description that will be displayed on the blog landing page, and its author.
|
||||
Including images Here’s an image …</p>
|
||||
<p class="pt-0"><a href="/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/">Read more</a></p>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="media mb-4">
|
||||
<div class="media-body">
|
||||
<h5 class="mt-0 mb-1"><a href="/kubernetes-operator/blog/2018/01/04/another-great-release/">Release New Features</a></h5>
|
||||
<p class="mb-2 mb-md-3"><small class="text-muted">Thursday, January 04, 2018 in Releases</small></p>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<p class="pt-0 mt-0"> Text can be bold, italic, or strikethrough. Links should be blue with no underlines (unless hovered over).
|
||||
There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs. …</p>
|
||||
<p class="pt-0"><a href="/kubernetes-operator/blog/2018/01/04/another-great-release/">Read more</a></p>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="row pl-2 pt-2">
|
||||
<div class="col">
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer class="bg-dark py-5 row d-print-none">
|
||||
<div class="bg-dark container-fluid trademark-bigger">
|
||||
<div class="row">
|
||||
<div class="col-6 col-sm-4 text-xs-center order-sm-2">
|
||||
|
||||
</div>
|
||||
<div class="col-6 col-sm-4 text-right text-xs-center order-sm-3">
|
||||
|
||||
</div>
|
||||
<div class="col-12 col-sm-12 text-center py-4 order-sm-2">
|
||||
<small class="text-white">© 2023 Jenkins Operator is created by VirtusLab. Source is available under Apache License Version 2 and website content under Creative Commons Attribution-ShareAlike 4.0.</small><br>
|
||||
<small class="text-white">Jenkins® is a registered trademark of Software in the Public Interest, Inc.</small>
|
||||
|
||||
<p class="mt-2"><a href="/kubernetes-operator/about/">What's the Jenkins Operator?</a></p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="/kubernetes-operator/js/main.min.b0e99aac17991fa76812dd47914049168ac469a1faa0939560f0b370565becab.js" integrity="sha256-sOmarBeZH6doEt1HkUBJForEaaH6oJOVYPCzcFZb7Ks="></script>
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,839 +0,0 @@
|
|||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Jenkins Operator – Docsy Blog</title>
|
||||
<link>https://jenkinsci.github.io/kubernetes-operator/blog/</link>
|
||||
<description>Recent Hugo news from gohugo.io</description>
|
||||
<generator>Hugo -- gohugo.io</generator>
|
||||
<image>
|
||||
<url>https://jenkinsci.github.io/kubernetes-operator/img/hugo.png</url>
|
||||
<title>GoHugo.io</title>
|
||||
<link>https://jenkinsci.github.io/kubernetes-operator/blog/</link>
|
||||
</image>
|
||||
|
||||
<atom:link href="https://jenkinsci.github.io/kubernetes-operator/blog/index.xml" rel="self" type="application/rss+xml" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<item>
|
||||
<title>Blog: Easy documentation with Docsy</title>
|
||||
<link>https://jenkinsci.github.io/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/</link>
|
||||
<pubDate>Sat, 06 Oct 2018 00:00:00 +0000</pubDate>
|
||||
|
||||
<guid>https://jenkinsci.github.io/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/</guid>
|
||||
<description>
|
||||
|
||||
|
||||
|
||||
<![CDATA[<img src="https://jenkinsci.github.io/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/featured-sunset-get_hu69849a7cdb847c2393a7b3a7f6061c86_387442_640x0_resize_catmullrom_2.png" width="640" height="253"/>]]>
|
||||
|
||||
|
||||
|
||||
<p><strong>This is a typical blog post that includes images.</strong></p>
|
||||
|
||||
<p>The front matter specifies the date of the blog post, its title, a short description that will be displayed on the blog landing page, and its author.</p>
|
||||
|
||||
<h2 id="including-images">Including images</h2>
|
||||
|
||||
<p>Here&rsquo;s an image (<code>featured-sunset-get.png</code>) that includes a byline and a caption.</p>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 610px">
|
||||
<img class="card-img-top" src="https://jenkinsci.github.io/kubernetes-operator/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/featured-sunset-get_hu69849a7cdb847c2393a7b3a7f6061c86_387442_600x300_fill_catmullrom_smart1_2.png" width="600" height="300">
|
||||
|
||||
<div class="card-body px-0 pt-2 pb-0">
|
||||
<p class="card-text">
|
||||
Fetch and scale an image in the upcoming Hugo 0.43.
|
||||
<small class="text-muted"><br/>Photo: Riona MacNamara / CC-BY-CA</small></p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<p>The front matter of this post specifies properties to be assigned to all image resources:</p>
|
||||
<pre><code>resources:
|
||||
- src: "**.{png,jpg}"
|
||||
title: "Image #:counter"
|
||||
params:
|
||||
byline: "Photo: Riona MacNamara / CC-BY-CA"</code></pre>
|
||||
<p>To include the image in a page, specify its details like this:</p>
|
||||
<pre><code>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 610px">
|
||||
<img class="card-img-top" src="https://jenkinsci.github.io/kubernetes-operator/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/featured-sunset-get_hu69849a7cdb847c2393a7b3a7f6061c86_387442_600x300_fill_catmullrom_smart1_2.png" width="600" height="300">
|
||||
|
||||
<div class="card-body px-0 pt-2 pb-0">
|
||||
<p class="card-text">
|
||||
Fetch and scale an image in the upcoming Hugo 0.43.
|
||||
<small class="text-muted"><br/>Photo: Riona MacNamara / CC-BY-CA</small></p>
|
||||
</div>
|
||||
|
||||
</div></code></pre>
|
||||
<p>The image will be rendered at the size and byline specified in the front matter.</p>
|
||||
|
||||
</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>Blog: The second blog post</title>
|
||||
<link>https://jenkinsci.github.io/kubernetes-operator/blog/2018/10/06/the-second-blog-post/</link>
|
||||
<pubDate>Sat, 06 Oct 2018 00:00:00 +0000</pubDate>
|
||||
|
||||
<guid>https://jenkinsci.github.io/kubernetes-operator/blog/2018/10/06/the-second-blog-post/</guid>
|
||||
<description>
|
||||
|
||||
|
||||
|
||||
|
||||
<p>Text can be <strong>bold</strong>, <em>italic</em>, or <del>strikethrough</del>. <a href="https://github.com">Links</a> should be blue with no underlines (unless hovered over).</p>
|
||||
|
||||
<p>There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs.</p>
|
||||
|
||||
<p>There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs.</p>
|
||||
|
||||
<blockquote>
|
||||
<p>There should be no margin above this first sentence.</p>
|
||||
|
||||
<p>Blockquotes should be a lighter gray with a border along the left side in the secondary color.</p>
|
||||
|
||||
<p>There should be no margin below this final sentence.</p>
|
||||
</blockquote>
|
||||
|
||||
<h2 id="first-header">First Header</h2>
|
||||
|
||||
<p>This is a normal paragraph following a header. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<p>On big screens, paragraphs and headings should not take up the full container width, but we want tables, code blocks and similar to take the full width.</p>
|
||||
|
||||
<p>Lorem markdownum tuta hospes stabat; idem saxum facit quaterque repetito
|
||||
occumbere, oves novem gestit haerebat frena; qui. Respicit recurvam erat:
|
||||
pignora hinc reppulit nos <strong>aut</strong>, aptos, ipsa.</p>
|
||||
|
||||
<p>Meae optatos <em>passa est</em> Epiros utiliter <em>Talibus niveis</em>, hoc lata, edidit.
|
||||
Dixi ad aestum.</p>
|
||||
|
||||
<h2 id="header-2">Header 2</h2>
|
||||
|
||||
<blockquote>
|
||||
<p>This is a blockquote following a header. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
</blockquote>
|
||||
|
||||
<h3 id="header-3">Header 3</h3>
|
||||
<pre><code>This is a code block following a header.</code></pre>
|
||||
<h4 id="header-4">Header 4</h4>
|
||||
|
||||
<ul>
|
||||
<li>This is an unordered list following a header.</li>
|
||||
<li>This is an unordered list following a header.</li>
|
||||
<li>This is an unordered list following a header.</li>
|
||||
</ul>
|
||||
|
||||
<h5 id="header-5">Header 5</h5>
|
||||
|
||||
<ol>
|
||||
<li>This is an ordered list following a header.</li>
|
||||
<li>This is an ordered list following a header.</li>
|
||||
<li>This is an ordered list following a header.</li>
|
||||
</ol>
|
||||
|
||||
<h6 id="header-6">Header 6</h6>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>What</th>
|
||||
<th>Follows</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>A table</td>
|
||||
<td>A header</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>A table</td>
|
||||
<td>A header</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>A table</td>
|
||||
<td>A header</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>There&rsquo;s a horizontal rule above and below this.</p>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Here is an unordered list:</p>
|
||||
|
||||
<ul>
|
||||
<li>Salt-n-Pepa</li>
|
||||
<li>Bel Biv DeVoe</li>
|
||||
<li>Kid &lsquo;N Play</li>
|
||||
</ul>
|
||||
|
||||
<p>And an ordered list:</p>
|
||||
|
||||
<ol>
|
||||
<li>Michael Jackson</li>
|
||||
<li>Michael Bolton</li>
|
||||
<li>Michael Bublé</li>
|
||||
</ol>
|
||||
|
||||
<p>And an unordered task list:</p>
|
||||
|
||||
<ul class="task-list">
|
||||
<li><label><input type="checkbox" checked disabled class="task-list-item"> Create a sample markdown document</label></li>
|
||||
<li><label><input type="checkbox" checked disabled class="task-list-item"> Add task lists to it</label></li>
|
||||
<li><label><input type="checkbox" disabled class="task-list-item"> Take a vacation</label></li>
|
||||
</ul>
|
||||
|
||||
<p>And a &ldquo;mixed&rdquo; task list:</p>
|
||||
|
||||
<ul class="task-list">
|
||||
<li><label><input type="checkbox" disabled class="task-list-item"> Steal underpants</label></li>
|
||||
<li>?</li>
|
||||
<li><label><input type="checkbox" disabled class="task-list-item"> Profit!</label></li>
|
||||
</ul>
|
||||
|
||||
<p>And a nested list:</p>
|
||||
|
||||
<ul>
|
||||
<li>Jackson 5
|
||||
|
||||
<ul>
|
||||
<li>Michael</li>
|
||||
<li>Tito</li>
|
||||
<li>Jackie</li>
|
||||
<li>Marlon</li>
|
||||
<li>Jermaine</li>
|
||||
</ul></li>
|
||||
<li>TMNT
|
||||
|
||||
<ul>
|
||||
<li>Leonardo</li>
|
||||
<li>Michelangelo</li>
|
||||
<li>Donatello</li>
|
||||
<li>Raphael</li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
|
||||
<p>Definition lists can be used with Markdown syntax. Definition terms are bold.</p>
|
||||
|
||||
<dl>
|
||||
<dt>Name</dt>
|
||||
<dd>Godzilla</dd>
|
||||
<dt>Born</dt>
|
||||
<dd>1952</dd>
|
||||
<dt>Birthplace</dt>
|
||||
<dd>Japan</dd>
|
||||
<dt>Color</dt>
|
||||
<dd>Green</dd>
|
||||
</dl>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Tables should have bold headings and alternating shaded rows.</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Artist</th>
|
||||
<th>Album</th>
|
||||
<th>Year</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Michael Jackson</td>
|
||||
<td>Thriller</td>
|
||||
<td>1982</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Prince</td>
|
||||
<td>Purple Rain</td>
|
||||
<td>1984</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Beastie Boys</td>
|
||||
<td>License to Ill</td>
|
||||
<td>1986</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p>If a table is too wide, it should scroll horizontally.</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Artist</th>
|
||||
<th>Album</th>
|
||||
<th>Year</th>
|
||||
<th>Label</th>
|
||||
<th>Awards</th>
|
||||
<th>Songs</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Michael Jackson</td>
|
||||
<td>Thriller</td>
|
||||
<td>1982</td>
|
||||
<td>Epic Records</td>
|
||||
<td>Grammy Award for Album of the Year, American Music Award for Favorite Pop/Rock Album, American Music Award for Favorite Soul/R&amp;B Album, Brit Award for Best Selling Album, Grammy Award for Best Engineered Album, Non-Classical</td>
|
||||
<td>Wanna Be Startin&rsquo; Somethin&rsquo;, Baby Be Mine, The Girl Is Mine, Thriller, Beat It, Billie Jean, Human Nature, P.Y.T. (Pretty Young Thing), The Lady in My Life</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Prince</td>
|
||||
<td>Purple Rain</td>
|
||||
<td>1984</td>
|
||||
<td>Warner Brothers Records</td>
|
||||
<td>Grammy Award for Best Score Soundtrack for Visual Media, American Music Award for Favorite Pop/Rock Album, American Music Award for Favorite Soul/R&amp;B Album, Brit Award for Best Soundtrack/Cast Recording, Grammy Award for Best Rock Performance by a Duo or Group with Vocal</td>
|
||||
<td>Let&rsquo;s Go Crazy, Take Me With U, The Beautiful Ones, Computer Blue, Darling Nikki, When Doves Cry, I Would Die 4 U, Baby I&rsquo;m a Star, Purple Rain</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Beastie Boys</td>
|
||||
<td>License to Ill</td>
|
||||
<td>1986</td>
|
||||
<td>Mercury Records</td>
|
||||
<td>noawardsbutthistablecelliswide</td>
|
||||
<td>Rhymin &amp; Stealin, The New Style, She&rsquo;s Crafty, Posse in Effect, Slow Ride, Girls, (You Gotta) Fight for Your Right, No Sleep Till Brooklyn, Paul Revere, Hold It Now, Hit It, Brass Monkey, Slow and Low, Time to Get Ill</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Code snippets like <code>var foo = &quot;bar&quot;;</code> can be shown inline.</p>
|
||||
|
||||
<p>Also, <code>this should vertically align</code> <del><code>with this</code></del> <del>and this</del>.</p>
|
||||
|
||||
<p>Code can also be shown in a block element.</p>
|
||||
<pre><code>foo := "bar";
|
||||
bar := "foo";</code></pre>
|
||||
<p>Code can also use syntax highlighting.</p>
|
||||
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-go" data-lang="go"><span style="color:#204a87;font-weight:bold">func</span> <span style="color:#000">main</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">{</span>
|
||||
<span style="color:#000">input</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#4e9a06">`</span><span style="color:#4e9a06">var foo = &#34;bar&#34;;</span><span style="color:#4e9a06">`</span>
|
||||
|
||||
<span style="color:#000">lexer</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">lexers</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">&#34;javascript&#34;</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000">iterator</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">_</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">lexer</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Tokenise</span><span style="color:#000;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">nil</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">input</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000">style</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">styles</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">&#34;github&#34;</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000">formatter</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">html</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">New</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">html</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">WithLineNumbers</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000;font-weight:bold">)</span><span style="color:#000;font-weight:bold">)</span>
|
||||
|
||||
<span style="color:#204a87;font-weight:bold">var</span> <span style="color:#000">buff</span> <span style="color:#000">bytes</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Buffer</span>
|
||||
<span style="color:#000">formatter</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Format</span><span style="color:#000;font-weight:bold">(</span><span style="color:#ce5c00;font-weight:bold">&amp;</span><span style="color:#000">buff</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">style</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">iterator</span><span style="color:#000;font-weight:bold">)</span>
|
||||
|
||||
<span style="color:#000">fmt</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Println</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">buff</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">String</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000;font-weight:bold">)</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000;font-weight:bold">}</span></code></pre></div><pre><code>Long, single-line code blocks should not wrap. They should horizontally scroll if they are too long. This line should be long enough to demonstrate this.</code></pre>
|
||||
<p>Inline code inside table cells should still be distinguishable.</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Language</th>
|
||||
<th>Code</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Javascript</td>
|
||||
<td><code>var foo = &quot;bar&quot;;</code></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Ruby</td>
|
||||
<td><code>foo = &quot;bar&quot;{</code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Small images should be shown at their actual size.</p>
|
||||
|
||||
<p><img src="http://placekitten.com/g/300/200/" alt="" /></p>
|
||||
|
||||
<p>Large images should always scale down and fit in the content container.</p>
|
||||
|
||||
<p><img src="http://placekitten.com/g/1200/800/" alt="" /></p>
|
||||
|
||||
<h2 id="components">Components</h2>
|
||||
|
||||
<h3 id="alerts">Alerts</h3>
|
||||
|
||||
<p>
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
|
||||
This is an alert.
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
<h4 class="alert-heading">Note:</h4>
|
||||
This is an alert with a title.
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
|
||||
This is a successful alert.
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
|
||||
This is a warning!
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
<h4 class="alert-heading">Warning!</h4>
|
||||
This is a warning with a title!
|
||||
</div>
|
||||
</p>
|
||||
|
||||
<h2 id="sizing">Sizing</h2>
|
||||
|
||||
<p>Add some sections here to see how the ToC looks like. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="parameters-available">Parameters available</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="using-pixels">Using pixels</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="using-rem">Using rem</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h2 id="memory">Memory</h2>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="ram-to-use">RAM to use</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="more-is-better">More is better</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="used-ram">Used RAM</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
<pre><code>This is the final element on the page and there should be no margin below this.</code></pre>
|
||||
</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>Blog: Another Great Release</title>
|
||||
<link>https://jenkinsci.github.io/kubernetes-operator/blog/2018/01/04/another-great-release/</link>
|
||||
<pubDate>Thu, 04 Jan 2018 00:00:00 +0000</pubDate>
|
||||
|
||||
<guid>https://jenkinsci.github.io/kubernetes-operator/blog/2018/01/04/another-great-release/</guid>
|
||||
<description>
|
||||
|
||||
|
||||
|
||||
|
||||
<p>Text can be <strong>bold</strong>, <em>italic</em>, or <del>strikethrough</del>. <a href="https://github.com">Links</a> should be blue with no underlines (unless hovered over).</p>
|
||||
|
||||
<p>There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs.</p>
|
||||
|
||||
<p>There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs.</p>
|
||||
|
||||
<blockquote>
|
||||
<p>There should be no margin above this first sentence.</p>
|
||||
|
||||
<p>Blockquotes should be a lighter gray with a border along the left side in the secondary color.</p>
|
||||
|
||||
<p>There should be no margin below this final sentence.</p>
|
||||
</blockquote>
|
||||
|
||||
<h2 id="first-header">First Header</h2>
|
||||
|
||||
<p>This is a normal paragraph following a header. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<p>On big screens, paragraphs and headings should not take up the full container width, but we want tables, code blocks and similar to take the full width.</p>
|
||||
|
||||
<p>Lorem markdownum tuta hospes stabat; idem saxum facit quaterque repetito
|
||||
occumbere, oves novem gestit haerebat frena; qui. Respicit recurvam erat:
|
||||
pignora hinc reppulit nos <strong>aut</strong>, aptos, ipsa.</p>
|
||||
|
||||
<p>Meae optatos <em>passa est</em> Epiros utiliter <em>Talibus niveis</em>, hoc lata, edidit.
|
||||
Dixi ad aestum.</p>
|
||||
|
||||
<h2 id="header-2">Header 2</h2>
|
||||
|
||||
<blockquote>
|
||||
<p>This is a blockquote following a header. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
</blockquote>
|
||||
|
||||
<h3 id="header-3">Header 3</h3>
|
||||
<pre><code>This is a code block following a header.</code></pre>
|
||||
<h4 id="header-4">Header 4</h4>
|
||||
|
||||
<ul>
|
||||
<li>This is an unordered list following a header.</li>
|
||||
<li>This is an unordered list following a header.</li>
|
||||
<li>This is an unordered list following a header.</li>
|
||||
</ul>
|
||||
|
||||
<h5 id="header-5">Header 5</h5>
|
||||
|
||||
<ol>
|
||||
<li>This is an ordered list following a header.</li>
|
||||
<li>This is an ordered list following a header.</li>
|
||||
<li>This is an ordered list following a header.</li>
|
||||
</ol>
|
||||
|
||||
<h6 id="header-6">Header 6</h6>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>What</th>
|
||||
<th>Follows</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>A table</td>
|
||||
<td>A header</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>A table</td>
|
||||
<td>A header</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>A table</td>
|
||||
<td>A header</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>There&rsquo;s a horizontal rule above and below this.</p>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Here is an unordered list:</p>
|
||||
|
||||
<ul>
|
||||
<li>Salt-n-Pepa</li>
|
||||
<li>Bel Biv DeVoe</li>
|
||||
<li>Kid &lsquo;N Play</li>
|
||||
</ul>
|
||||
|
||||
<p>And an ordered list:</p>
|
||||
|
||||
<ol>
|
||||
<li>Michael Jackson</li>
|
||||
<li>Michael Bolton</li>
|
||||
<li>Michael Bublé</li>
|
||||
</ol>
|
||||
|
||||
<p>And an unordered task list:</p>
|
||||
|
||||
<ul class="task-list">
|
||||
<li><label><input type="checkbox" checked disabled class="task-list-item"> Create a sample markdown document</label></li>
|
||||
<li><label><input type="checkbox" checked disabled class="task-list-item"> Add task lists to it</label></li>
|
||||
<li><label><input type="checkbox" disabled class="task-list-item"> Take a vacation</label></li>
|
||||
</ul>
|
||||
|
||||
<p>And a &ldquo;mixed&rdquo; task list:</p>
|
||||
|
||||
<ul class="task-list">
|
||||
<li><label><input type="checkbox" disabled class="task-list-item"> Steal underpants</label></li>
|
||||
<li>?</li>
|
||||
<li><label><input type="checkbox" disabled class="task-list-item"> Profit!</label></li>
|
||||
</ul>
|
||||
|
||||
<p>And a nested list:</p>
|
||||
|
||||
<ul>
|
||||
<li>Jackson 5
|
||||
|
||||
<ul>
|
||||
<li>Michael</li>
|
||||
<li>Tito</li>
|
||||
<li>Jackie</li>
|
||||
<li>Marlon</li>
|
||||
<li>Jermaine</li>
|
||||
</ul></li>
|
||||
<li>TMNT
|
||||
|
||||
<ul>
|
||||
<li>Leonardo</li>
|
||||
<li>Michelangelo</li>
|
||||
<li>Donatello</li>
|
||||
<li>Raphael</li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
|
||||
<p>Definition lists can be used with Markdown syntax. Definition terms are bold.</p>
|
||||
|
||||
<dl>
|
||||
<dt>Name</dt>
|
||||
<dd>Godzilla</dd>
|
||||
<dt>Born</dt>
|
||||
<dd>1952</dd>
|
||||
<dt>Birthplace</dt>
|
||||
<dd>Japan</dd>
|
||||
<dt>Color</dt>
|
||||
<dd>Green</dd>
|
||||
</dl>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Tables should have bold headings and alternating shaded rows.</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Artist</th>
|
||||
<th>Album</th>
|
||||
<th>Year</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Michael Jackson</td>
|
||||
<td>Thriller</td>
|
||||
<td>1982</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Prince</td>
|
||||
<td>Purple Rain</td>
|
||||
<td>1984</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Beastie Boys</td>
|
||||
<td>License to Ill</td>
|
||||
<td>1986</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p>If a table is too wide, it should scroll horizontally.</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Artist</th>
|
||||
<th>Album</th>
|
||||
<th>Year</th>
|
||||
<th>Label</th>
|
||||
<th>Awards</th>
|
||||
<th>Songs</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Michael Jackson</td>
|
||||
<td>Thriller</td>
|
||||
<td>1982</td>
|
||||
<td>Epic Records</td>
|
||||
<td>Grammy Award for Album of the Year, American Music Award for Favorite Pop/Rock Album, American Music Award for Favorite Soul/R&amp;B Album, Brit Award for Best Selling Album, Grammy Award for Best Engineered Album, Non-Classical</td>
|
||||
<td>Wanna Be Startin&rsquo; Somethin&rsquo;, Baby Be Mine, The Girl Is Mine, Thriller, Beat It, Billie Jean, Human Nature, P.Y.T. (Pretty Young Thing), The Lady in My Life</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Prince</td>
|
||||
<td>Purple Rain</td>
|
||||
<td>1984</td>
|
||||
<td>Warner Brothers Records</td>
|
||||
<td>Grammy Award for Best Score Soundtrack for Visual Media, American Music Award for Favorite Pop/Rock Album, American Music Award for Favorite Soul/R&amp;B Album, Brit Award for Best Soundtrack/Cast Recording, Grammy Award for Best Rock Performance by a Duo or Group with Vocal</td>
|
||||
<td>Let&rsquo;s Go Crazy, Take Me With U, The Beautiful Ones, Computer Blue, Darling Nikki, When Doves Cry, I Would Die 4 U, Baby I&rsquo;m a Star, Purple Rain</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Beastie Boys</td>
|
||||
<td>License to Ill</td>
|
||||
<td>1986</td>
|
||||
<td>Mercury Records</td>
|
||||
<td>noawardsbutthistablecelliswide</td>
|
||||
<td>Rhymin &amp; Stealin, The New Style, She&rsquo;s Crafty, Posse in Effect, Slow Ride, Girls, (You Gotta) Fight for Your Right, No Sleep Till Brooklyn, Paul Revere, Hold It Now, Hit It, Brass Monkey, Slow and Low, Time to Get Ill</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Code snippets like <code>var foo = &quot;bar&quot;;</code> can be shown inline.</p>
|
||||
|
||||
<p>Also, <code>this should vertically align</code> <del><code>with this</code></del> <del>and this</del>.</p>
|
||||
|
||||
<p>Code can also be shown in a block element.</p>
|
||||
<pre><code>foo := "bar";
|
||||
bar := "foo";</code></pre>
|
||||
<p>Code can also use syntax highlighting.</p>
|
||||
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-go" data-lang="go"><span style="color:#204a87;font-weight:bold">func</span> <span style="color:#000">main</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">{</span>
|
||||
<span style="color:#000">input</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#4e9a06">`</span><span style="color:#4e9a06">var foo = &#34;bar&#34;;</span><span style="color:#4e9a06">`</span>
|
||||
|
||||
<span style="color:#000">lexer</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">lexers</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">&#34;javascript&#34;</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000">iterator</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">_</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">lexer</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Tokenise</span><span style="color:#000;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">nil</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">input</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000">style</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">styles</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">&#34;github&#34;</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000">formatter</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">html</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">New</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">html</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">WithLineNumbers</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000;font-weight:bold">)</span><span style="color:#000;font-weight:bold">)</span>
|
||||
|
||||
<span style="color:#204a87;font-weight:bold">var</span> <span style="color:#000">buff</span> <span style="color:#000">bytes</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Buffer</span>
|
||||
<span style="color:#000">formatter</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Format</span><span style="color:#000;font-weight:bold">(</span><span style="color:#ce5c00;font-weight:bold">&amp;</span><span style="color:#000">buff</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">style</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">iterator</span><span style="color:#000;font-weight:bold">)</span>
|
||||
|
||||
<span style="color:#000">fmt</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Println</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">buff</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">String</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000;font-weight:bold">)</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000;font-weight:bold">}</span></code></pre></div><pre><code>Long, single-line code blocks should not wrap. They should horizontally scroll if they are too long. This line should be long enough to demonstrate this.</code></pre>
|
||||
<p>Inline code inside table cells should still be distinguishable.</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Language</th>
|
||||
<th>Code</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Javascript</td>
|
||||
<td><code>var foo = &quot;bar&quot;;</code></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Ruby</td>
|
||||
<td><code>foo = &quot;bar&quot;{</code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Small images should be shown at their actual size.</p>
|
||||
|
||||
<p><img src="http://placekitten.com/g/300/200/" alt="" /></p>
|
||||
|
||||
<p>Large images should always scale down and fit in the content container.</p>
|
||||
|
||||
<p><img src="http://placekitten.com/g/1200/800/" alt="" /></p>
|
||||
|
||||
<h2 id="components">Components</h2>
|
||||
|
||||
<h3 id="alerts">Alerts</h3>
|
||||
|
||||
<p>
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
|
||||
This is an alert.
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
<h4 class="alert-heading">Note:</h4>
|
||||
This is an alert with a title.
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
|
||||
This is a successful alert.
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
|
||||
This is a warning!
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
<h4 class="alert-heading">Warning!</h4>
|
||||
This is a warning with a title!
|
||||
</div>
|
||||
</p>
|
||||
|
||||
<h2 id="sizing">Sizing</h2>
|
||||
|
||||
<p>Add some sections here to see how the ToC looks like. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="parameters-available">Parameters available</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="using-pixels">Using pixels</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="using-rem">Using rem</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h2 id="memory">Memory</h2>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="ram-to-use">RAM to use</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="more-is-better">More is better</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="used-ram">Used RAM</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
<pre><code>This is the final element on the page and there should be no margin below this.</code></pre>
|
||||
</description>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
|
|
@ -1,318 +0,0 @@
|
|||
<!doctype html>
|
||||
<html lang="en" class="no-js">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="generator" content="Hugo 0.62.2" />
|
||||
|
||||
<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="https://jenkinsci.github.io/kubernetes-operator/blog/news/index.xml">
|
||||
|
||||
|
||||
<link rel="shortcut icon" href="/favicons/favicon.ico" >
|
||||
<link rel="apple-touch-icon" href="/kubernetes-operator/favicons/apple-touch-icon-180x180.png" sizes="180x180">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-36x36.png" sizes="36x36">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-48x48.png" sizes="48x48">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-72x72.png" sizes="72x72">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-96x196.png" sizes="96x196">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-144x144.png" sizes="144x144">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-192x192.png"sizes="192x192">
|
||||
|
||||
<title>News About Docsy | Jenkins Operator</title><meta property="og:title" content="News About Docsy" />
|
||||
<meta property="og:description" content="A native operator for Kubernetes to manage Jenkins" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="https://jenkinsci.github.io/kubernetes-operator/blog/news/" />
|
||||
<meta property="og:updated_time" content="2018-10-06T00:00:00+00:00" /><meta property="og:site_name" content="Jenkins Operator" />
|
||||
<meta itemprop="name" content="News About Docsy">
|
||||
<meta itemprop="description" content="A native operator for Kubernetes to manage Jenkins"><meta name="twitter:card" content="summary"/>
|
||||
<meta name="twitter:title" content="News About Docsy"/>
|
||||
<meta name="twitter:description" content="A native operator for Kubernetes to manage Jenkins"/>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="preload" href="/kubernetes-operator/scss/main.min.6c58fba96b88d035ce071c346f084a9dc4dedee4e80eb3724fe530520541a4ec.css" as="style">
|
||||
<link href="/kubernetes-operator/scss/main.min.6c58fba96b88d035ce071c346f084a9dc4dedee4e80eb3724fe530520541a4ec.css" rel="stylesheet" integrity="">
|
||||
|
||||
<script
|
||||
src="https://code.jquery.com/jquery-3.3.1.min.js"
|
||||
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
|
||||
crossorigin="anonymous"></script>
|
||||
|
||||
|
||||
<title>News About Docsy | Jenkins Operator</title>
|
||||
</head>
|
||||
<body class="td-section td-blog">
|
||||
<header>
|
||||
|
||||
<nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar">
|
||||
<a class="navbar-brand" href="/kubernetes-operator/">
|
||||
<img style="width: 32px; height: 32px; margin-right: 7.5px;" src="/kubernetes-operator/img/logo.svg"></img><span class="text-uppercase font-weight-bold">Jenkins Operator</span>
|
||||
</a>
|
||||
<div class="td-navbar-nav-scroll ml-md-auto" id="main_navbar">
|
||||
<ul class="navbar-nav mt-2 mt-lg-0">
|
||||
<li class="nav-item mr-4 mb-2 mb-lg-0">
|
||||
<a class="nav-link" href="/kubernetes-operator/about"><span>What's the Jenkins Operator?</span></a>
|
||||
</li>
|
||||
<li class="nav-item mr-4 mb-2 mb-lg-0">
|
||||
<a class="nav-link" href="/kubernetes-operator/docs"><span>Documentation</span></a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="navbar-nav d-none d-lg-block">
|
||||
<input type="search" class="form-control td-search-input" placeholder=" Search this site…" aria-label="Search this site…" autocomplete="off">
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<div class="container-fluid td-outer">
|
||||
<div class="td-main">
|
||||
<div class="row flex-xl-nowrap">
|
||||
<div class="col-12 col-md-3 col-xl-2 td-sidebar d-print-none">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="td-sidebar-menu" class="td-sidebar__inner">
|
||||
|
||||
<form class="td-sidebar__search d-flex align-items-center">
|
||||
|
||||
<input type="search" class="form-control td-search-input" placeholder=" Search this site…" aria-label="Search this site…" autocomplete="off">
|
||||
|
||||
<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type="button" data-toggle="collapse" data-target="#td-section-nav" aria-controls="td-docs-nav" aria-expanded="false" aria-label="Toggle section navigation">
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<nav class="collapse td-sidebar-nav pt-2 pl-4" id="td-section-nav">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul class="td-sidebar-nav__section pr-md-3">
|
||||
<li class="td-sidebar-nav__section-title">
|
||||
<a href="/kubernetes-operator/blog/" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Blog</a>
|
||||
</li>
|
||||
<ul>
|
||||
<li class="collapse show" id="kubernetes-operator-blog">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul class="td-sidebar-nav__section pr-md-3">
|
||||
<li class="td-sidebar-nav__section-title">
|
||||
<a href="/kubernetes-operator/blog/news/" class="align-left pl-0 pr-2 active td-sidebar-link td-sidebar-link__section">News</a>
|
||||
</li>
|
||||
<ul>
|
||||
<li class="collapse show" id="kubernetes-operator-blog-news">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a class="td-sidebar-link td-sidebar-link__page " id="m-kubernetes-operator-blog-2018-10-06-easy-documentation-with-docsy" href="/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/">Announcing Docsy</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a class="td-sidebar-link td-sidebar-link__page " id="m-kubernetes-operator-blog-2018-10-06-the-second-blog-post" href="/kubernetes-operator/blog/2018/10/06/the-second-blog-post/">Second blog post</a>
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul class="td-sidebar-nav__section pr-md-3">
|
||||
<li class="td-sidebar-nav__section-title">
|
||||
<a href="/kubernetes-operator/blog/releases/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a>
|
||||
</li>
|
||||
<ul>
|
||||
<li class="collapse " id="kubernetes-operator-blog-releases">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a class="td-sidebar-link td-sidebar-link__page " id="m-kubernetes-operator-blog-2018-01-04-another-great-release" href="/kubernetes-operator/blog/2018/01/04/another-great-release/">Release New Features</a>
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div class="d-none d-xl-block col-xl-2 td-toc d-print-none">
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="td-page-meta ml-2 pb-1 pt-2 mb-0">
|
||||
|
||||
|
||||
|
||||
<a href="https://github.com/jenkinsci/kubernetes-operator/edit/master/website/content/en/blog/news/_index.md" target="_blank"><i class="fa fa-edit fa-fw"></i> Edit this page</a>
|
||||
<a href="https://github.com/jenkinsci/kubernetes-operator/issues/new?labels=documentation&template=documentation.md&title=News%20About%20Docsy" target="_blank"><i class="fab fa-github fa-fw"></i> Create documentation issue</a>
|
||||
|
||||
|
||||
<a href="https://github.com/jenkinsci/kubernetes-operator/issues/new/choose" target="_blank"><i class="fas fa-tasks fa-fw"></i> Create project issue</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<main class="col-12 col-md-9 col-xl-8 pl-md-5 pr-md-4" role="main">
|
||||
<a class="btn btn-lg -bg-orange td-rss-button d-none d-lg-block" href="https://jenkinsci.github.io/kubernetes-operator/blog/news/index.xml" target="_blank">
|
||||
RSS <i class="fa fa-rss ml-2 "></i>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
|
||||
<h2>Posts in 2018</h2>
|
||||
<ul class="list-unstyled mt-4">
|
||||
|
||||
<li class="media mb-4">
|
||||
<div class="media-body">
|
||||
<h5 class="mt-0 mb-1"><a href="/kubernetes-operator/blog/2018/10/06/the-second-blog-post/">Second blog post</a></h5>
|
||||
<p class="mb-2 mb-md-3"><small class="text-muted">Saturday, October 06, 2018 in News</small></p>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<p class="pt-0 mt-0"> Text can be bold, italic, or strikethrough. Links should be blue with no underlines (unless hovered over).
|
||||
There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs. …</p>
|
||||
<p class="pt-0"><a href="/kubernetes-operator/blog/2018/10/06/the-second-blog-post/">Read more</a></p>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="media mb-4">
|
||||
<div class="media-body">
|
||||
<h5 class="mt-0 mb-1"><a href="/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/">Announcing Docsy</a></h5>
|
||||
<p class="mb-2 mb-md-3"><small class="text-muted">Saturday, October 06, 2018 in News</small></p>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<figure class="float-left mr-3 pt-1 d-none d-md-block" style="width: 250px">
|
||||
<img src="/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/featured-sunset-get_hu69849a7cdb847c2393a7b3a7f6061c86_387442_250x125_fill_catmullrom_smart1_2.png" alt="Featured Image for Easy documentation with Docsy" width="250" height="125">
|
||||
|
||||
<figcaption class="mt-2 mt-md-0"><small class="text-muted">Photo: Riona MacNamara / CC-BY-CA</small></figcaption>
|
||||
|
||||
</figure>
|
||||
|
||||
<p class="pt-0 mt-0"> This is a typical blog post that includes images.
|
||||
The front matter specifies the date of the blog post, its title, a short description that will be displayed on the blog landing page, and its author.
|
||||
Including images Here’s an image …</p>
|
||||
<p class="pt-0"><a href="/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/">Read more</a></p>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="row pl-2 pt-2">
|
||||
<div class="col">
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer class="bg-dark py-5 row d-print-none">
|
||||
<div class="bg-dark container-fluid trademark-bigger">
|
||||
<div class="row">
|
||||
<div class="col-6 col-sm-4 text-xs-center order-sm-2">
|
||||
|
||||
</div>
|
||||
<div class="col-6 col-sm-4 text-right text-xs-center order-sm-3">
|
||||
|
||||
</div>
|
||||
<div class="col-12 col-sm-12 text-center py-4 order-sm-2">
|
||||
<small class="text-white">© 2023 Jenkins Operator is created by VirtusLab. Source is available under Apache License Version 2 and website content under Creative Commons Attribution-ShareAlike 4.0.</small><br>
|
||||
<small class="text-white">Jenkins® is a registered trademark of Software in the Public Interest, Inc.</small>
|
||||
|
||||
<p class="mt-2"><a href="/kubernetes-operator/about/">What's the Jenkins Operator?</a></p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="/kubernetes-operator/js/main.min.b0e99aac17991fa76812dd47914049168ac469a1faa0939560f0b370565becab.js" integrity="sha256-sOmarBeZH6doEt1HkUBJForEaaH6oJOVYPCzcFZb7Ks="></script>
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,466 +0,0 @@
|
|||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Jenkins Operator – News About Docsy</title>
|
||||
<link>https://jenkinsci.github.io/kubernetes-operator/blog/news/</link>
|
||||
<description>Recent Hugo news from gohugo.io</description>
|
||||
<generator>Hugo -- gohugo.io</generator>
|
||||
<lastBuildDate>Sat, 06 Oct 2018 00:00:00 +0000</lastBuildDate>
|
||||
<image>
|
||||
<url>https://jenkinsci.github.io/kubernetes-operator/img/hugo.png</url>
|
||||
<title>GoHugo.io</title>
|
||||
<link>https://jenkinsci.github.io/kubernetes-operator/blog/news/</link>
|
||||
</image>
|
||||
|
||||
<atom:link href="https://jenkinsci.github.io/kubernetes-operator/blog/news/index.xml" rel="self" type="application/rss+xml" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<item>
|
||||
<title>Blog: Easy documentation with Docsy</title>
|
||||
<link>https://jenkinsci.github.io/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/</link>
|
||||
<pubDate>Sat, 06 Oct 2018 00:00:00 +0000</pubDate>
|
||||
|
||||
<guid>https://jenkinsci.github.io/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/</guid>
|
||||
<description>
|
||||
|
||||
|
||||
|
||||
<![CDATA[<img src="https://jenkinsci.github.io/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/featured-sunset-get_hu69849a7cdb847c2393a7b3a7f6061c86_387442_640x0_resize_catmullrom_2.png" width="640" height="253"/>]]>
|
||||
|
||||
|
||||
|
||||
<p><strong>This is a typical blog post that includes images.</strong></p>
|
||||
|
||||
<p>The front matter specifies the date of the blog post, its title, a short description that will be displayed on the blog landing page, and its author.</p>
|
||||
|
||||
<h2 id="including-images">Including images</h2>
|
||||
|
||||
<p>Here&rsquo;s an image (<code>featured-sunset-get.png</code>) that includes a byline and a caption.</p>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 610px">
|
||||
<img class="card-img-top" src="https://jenkinsci.github.io/kubernetes-operator/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/featured-sunset-get_hu69849a7cdb847c2393a7b3a7f6061c86_387442_600x300_fill_catmullrom_smart1_2.png" width="600" height="300">
|
||||
|
||||
<div class="card-body px-0 pt-2 pb-0">
|
||||
<p class="card-text">
|
||||
Fetch and scale an image in the upcoming Hugo 0.43.
|
||||
<small class="text-muted"><br/>Photo: Riona MacNamara / CC-BY-CA</small></p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<p>The front matter of this post specifies properties to be assigned to all image resources:</p>
|
||||
<pre><code>resources:
|
||||
- src: "**.{png,jpg}"
|
||||
title: "Image #:counter"
|
||||
params:
|
||||
byline: "Photo: Riona MacNamara / CC-BY-CA"</code></pre>
|
||||
<p>To include the image in a page, specify its details like this:</p>
|
||||
<pre><code>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 610px">
|
||||
<img class="card-img-top" src="https://jenkinsci.github.io/kubernetes-operator/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/featured-sunset-get_hu69849a7cdb847c2393a7b3a7f6061c86_387442_600x300_fill_catmullrom_smart1_2.png" width="600" height="300">
|
||||
|
||||
<div class="card-body px-0 pt-2 pb-0">
|
||||
<p class="card-text">
|
||||
Fetch and scale an image in the upcoming Hugo 0.43.
|
||||
<small class="text-muted"><br/>Photo: Riona MacNamara / CC-BY-CA</small></p>
|
||||
</div>
|
||||
|
||||
</div></code></pre>
|
||||
<p>The image will be rendered at the size and byline specified in the front matter.</p>
|
||||
|
||||
</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>Blog: The second blog post</title>
|
||||
<link>https://jenkinsci.github.io/kubernetes-operator/blog/2018/10/06/the-second-blog-post/</link>
|
||||
<pubDate>Sat, 06 Oct 2018 00:00:00 +0000</pubDate>
|
||||
|
||||
<guid>https://jenkinsci.github.io/kubernetes-operator/blog/2018/10/06/the-second-blog-post/</guid>
|
||||
<description>
|
||||
|
||||
|
||||
|
||||
|
||||
<p>Text can be <strong>bold</strong>, <em>italic</em>, or <del>strikethrough</del>. <a href="https://github.com">Links</a> should be blue with no underlines (unless hovered over).</p>
|
||||
|
||||
<p>There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs.</p>
|
||||
|
||||
<p>There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs.</p>
|
||||
|
||||
<blockquote>
|
||||
<p>There should be no margin above this first sentence.</p>
|
||||
|
||||
<p>Blockquotes should be a lighter gray with a border along the left side in the secondary color.</p>
|
||||
|
||||
<p>There should be no margin below this final sentence.</p>
|
||||
</blockquote>
|
||||
|
||||
<h2 id="first-header">First Header</h2>
|
||||
|
||||
<p>This is a normal paragraph following a header. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<p>On big screens, paragraphs and headings should not take up the full container width, but we want tables, code blocks and similar to take the full width.</p>
|
||||
|
||||
<p>Lorem markdownum tuta hospes stabat; idem saxum facit quaterque repetito
|
||||
occumbere, oves novem gestit haerebat frena; qui. Respicit recurvam erat:
|
||||
pignora hinc reppulit nos <strong>aut</strong>, aptos, ipsa.</p>
|
||||
|
||||
<p>Meae optatos <em>passa est</em> Epiros utiliter <em>Talibus niveis</em>, hoc lata, edidit.
|
||||
Dixi ad aestum.</p>
|
||||
|
||||
<h2 id="header-2">Header 2</h2>
|
||||
|
||||
<blockquote>
|
||||
<p>This is a blockquote following a header. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
</blockquote>
|
||||
|
||||
<h3 id="header-3">Header 3</h3>
|
||||
<pre><code>This is a code block following a header.</code></pre>
|
||||
<h4 id="header-4">Header 4</h4>
|
||||
|
||||
<ul>
|
||||
<li>This is an unordered list following a header.</li>
|
||||
<li>This is an unordered list following a header.</li>
|
||||
<li>This is an unordered list following a header.</li>
|
||||
</ul>
|
||||
|
||||
<h5 id="header-5">Header 5</h5>
|
||||
|
||||
<ol>
|
||||
<li>This is an ordered list following a header.</li>
|
||||
<li>This is an ordered list following a header.</li>
|
||||
<li>This is an ordered list following a header.</li>
|
||||
</ol>
|
||||
|
||||
<h6 id="header-6">Header 6</h6>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>What</th>
|
||||
<th>Follows</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>A table</td>
|
||||
<td>A header</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>A table</td>
|
||||
<td>A header</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>A table</td>
|
||||
<td>A header</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>There&rsquo;s a horizontal rule above and below this.</p>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Here is an unordered list:</p>
|
||||
|
||||
<ul>
|
||||
<li>Salt-n-Pepa</li>
|
||||
<li>Bel Biv DeVoe</li>
|
||||
<li>Kid &lsquo;N Play</li>
|
||||
</ul>
|
||||
|
||||
<p>And an ordered list:</p>
|
||||
|
||||
<ol>
|
||||
<li>Michael Jackson</li>
|
||||
<li>Michael Bolton</li>
|
||||
<li>Michael Bublé</li>
|
||||
</ol>
|
||||
|
||||
<p>And an unordered task list:</p>
|
||||
|
||||
<ul class="task-list">
|
||||
<li><label><input type="checkbox" checked disabled class="task-list-item"> Create a sample markdown document</label></li>
|
||||
<li><label><input type="checkbox" checked disabled class="task-list-item"> Add task lists to it</label></li>
|
||||
<li><label><input type="checkbox" disabled class="task-list-item"> Take a vacation</label></li>
|
||||
</ul>
|
||||
|
||||
<p>And a &ldquo;mixed&rdquo; task list:</p>
|
||||
|
||||
<ul class="task-list">
|
||||
<li><label><input type="checkbox" disabled class="task-list-item"> Steal underpants</label></li>
|
||||
<li>?</li>
|
||||
<li><label><input type="checkbox" disabled class="task-list-item"> Profit!</label></li>
|
||||
</ul>
|
||||
|
||||
<p>And a nested list:</p>
|
||||
|
||||
<ul>
|
||||
<li>Jackson 5
|
||||
|
||||
<ul>
|
||||
<li>Michael</li>
|
||||
<li>Tito</li>
|
||||
<li>Jackie</li>
|
||||
<li>Marlon</li>
|
||||
<li>Jermaine</li>
|
||||
</ul></li>
|
||||
<li>TMNT
|
||||
|
||||
<ul>
|
||||
<li>Leonardo</li>
|
||||
<li>Michelangelo</li>
|
||||
<li>Donatello</li>
|
||||
<li>Raphael</li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
|
||||
<p>Definition lists can be used with Markdown syntax. Definition terms are bold.</p>
|
||||
|
||||
<dl>
|
||||
<dt>Name</dt>
|
||||
<dd>Godzilla</dd>
|
||||
<dt>Born</dt>
|
||||
<dd>1952</dd>
|
||||
<dt>Birthplace</dt>
|
||||
<dd>Japan</dd>
|
||||
<dt>Color</dt>
|
||||
<dd>Green</dd>
|
||||
</dl>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Tables should have bold headings and alternating shaded rows.</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Artist</th>
|
||||
<th>Album</th>
|
||||
<th>Year</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Michael Jackson</td>
|
||||
<td>Thriller</td>
|
||||
<td>1982</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Prince</td>
|
||||
<td>Purple Rain</td>
|
||||
<td>1984</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Beastie Boys</td>
|
||||
<td>License to Ill</td>
|
||||
<td>1986</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p>If a table is too wide, it should scroll horizontally.</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Artist</th>
|
||||
<th>Album</th>
|
||||
<th>Year</th>
|
||||
<th>Label</th>
|
||||
<th>Awards</th>
|
||||
<th>Songs</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Michael Jackson</td>
|
||||
<td>Thriller</td>
|
||||
<td>1982</td>
|
||||
<td>Epic Records</td>
|
||||
<td>Grammy Award for Album of the Year, American Music Award for Favorite Pop/Rock Album, American Music Award for Favorite Soul/R&amp;B Album, Brit Award for Best Selling Album, Grammy Award for Best Engineered Album, Non-Classical</td>
|
||||
<td>Wanna Be Startin&rsquo; Somethin&rsquo;, Baby Be Mine, The Girl Is Mine, Thriller, Beat It, Billie Jean, Human Nature, P.Y.T. (Pretty Young Thing), The Lady in My Life</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Prince</td>
|
||||
<td>Purple Rain</td>
|
||||
<td>1984</td>
|
||||
<td>Warner Brothers Records</td>
|
||||
<td>Grammy Award for Best Score Soundtrack for Visual Media, American Music Award for Favorite Pop/Rock Album, American Music Award for Favorite Soul/R&amp;B Album, Brit Award for Best Soundtrack/Cast Recording, Grammy Award for Best Rock Performance by a Duo or Group with Vocal</td>
|
||||
<td>Let&rsquo;s Go Crazy, Take Me With U, The Beautiful Ones, Computer Blue, Darling Nikki, When Doves Cry, I Would Die 4 U, Baby I&rsquo;m a Star, Purple Rain</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Beastie Boys</td>
|
||||
<td>License to Ill</td>
|
||||
<td>1986</td>
|
||||
<td>Mercury Records</td>
|
||||
<td>noawardsbutthistablecelliswide</td>
|
||||
<td>Rhymin &amp; Stealin, The New Style, She&rsquo;s Crafty, Posse in Effect, Slow Ride, Girls, (You Gotta) Fight for Your Right, No Sleep Till Brooklyn, Paul Revere, Hold It Now, Hit It, Brass Monkey, Slow and Low, Time to Get Ill</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Code snippets like <code>var foo = &quot;bar&quot;;</code> can be shown inline.</p>
|
||||
|
||||
<p>Also, <code>this should vertically align</code> <del><code>with this</code></del> <del>and this</del>.</p>
|
||||
|
||||
<p>Code can also be shown in a block element.</p>
|
||||
<pre><code>foo := "bar";
|
||||
bar := "foo";</code></pre>
|
||||
<p>Code can also use syntax highlighting.</p>
|
||||
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-go" data-lang="go"><span style="color:#204a87;font-weight:bold">func</span> <span style="color:#000">main</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">{</span>
|
||||
<span style="color:#000">input</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#4e9a06">`</span><span style="color:#4e9a06">var foo = &#34;bar&#34;;</span><span style="color:#4e9a06">`</span>
|
||||
|
||||
<span style="color:#000">lexer</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">lexers</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">&#34;javascript&#34;</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000">iterator</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">_</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">lexer</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Tokenise</span><span style="color:#000;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">nil</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">input</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000">style</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">styles</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">&#34;github&#34;</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000">formatter</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">html</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">New</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">html</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">WithLineNumbers</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000;font-weight:bold">)</span><span style="color:#000;font-weight:bold">)</span>
|
||||
|
||||
<span style="color:#204a87;font-weight:bold">var</span> <span style="color:#000">buff</span> <span style="color:#000">bytes</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Buffer</span>
|
||||
<span style="color:#000">formatter</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Format</span><span style="color:#000;font-weight:bold">(</span><span style="color:#ce5c00;font-weight:bold">&amp;</span><span style="color:#000">buff</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">style</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">iterator</span><span style="color:#000;font-weight:bold">)</span>
|
||||
|
||||
<span style="color:#000">fmt</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Println</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">buff</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">String</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000;font-weight:bold">)</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000;font-weight:bold">}</span></code></pre></div><pre><code>Long, single-line code blocks should not wrap. They should horizontally scroll if they are too long. This line should be long enough to demonstrate this.</code></pre>
|
||||
<p>Inline code inside table cells should still be distinguishable.</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Language</th>
|
||||
<th>Code</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Javascript</td>
|
||||
<td><code>var foo = &quot;bar&quot;;</code></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Ruby</td>
|
||||
<td><code>foo = &quot;bar&quot;{</code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Small images should be shown at their actual size.</p>
|
||||
|
||||
<p><img src="http://placekitten.com/g/300/200/" alt="" /></p>
|
||||
|
||||
<p>Large images should always scale down and fit in the content container.</p>
|
||||
|
||||
<p><img src="http://placekitten.com/g/1200/800/" alt="" /></p>
|
||||
|
||||
<h2 id="components">Components</h2>
|
||||
|
||||
<h3 id="alerts">Alerts</h3>
|
||||
|
||||
<p>
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
|
||||
This is an alert.
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
<h4 class="alert-heading">Note:</h4>
|
||||
This is an alert with a title.
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
|
||||
This is a successful alert.
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
|
||||
This is a warning!
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
<h4 class="alert-heading">Warning!</h4>
|
||||
This is a warning with a title!
|
||||
</div>
|
||||
</p>
|
||||
|
||||
<h2 id="sizing">Sizing</h2>
|
||||
|
||||
<p>Add some sections here to see how the ToC looks like. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="parameters-available">Parameters available</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="using-pixels">Using pixels</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="using-rem">Using rem</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h2 id="memory">Memory</h2>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="ram-to-use">RAM to use</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="more-is-better">More is better</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="used-ram">Used RAM</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
<pre><code>This is the final element on the page and there should be no margin below this.</code></pre>
|
||||
</description>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
|
|
@ -1 +0,0 @@
|
|||
<!DOCTYPE html><html><head><title>https://jenkinsci.github.io/kubernetes-operator/blog/news/</title><link rel="canonical" href="https://jenkinsci.github.io/kubernetes-operator/blog/news/"/><meta name="robots" content="noindex"><meta charset="utf-8" /><meta http-equiv="refresh" content="0; url=https://jenkinsci.github.io/kubernetes-operator/blog/news/" /></head></html>
|
||||
|
|
@ -1 +0,0 @@
|
|||
<!DOCTYPE html><html><head><title>https://jenkinsci.github.io/kubernetes-operator/blog/</title><link rel="canonical" href="https://jenkinsci.github.io/kubernetes-operator/blog/"/><meta name="robots" content="noindex"><meta charset="utf-8" /><meta http-equiv="refresh" content="0; url=https://jenkinsci.github.io/kubernetes-operator/blog/" /></head></html>
|
||||
|
|
@ -1,293 +0,0 @@
|
|||
<!doctype html>
|
||||
<html lang="en" class="no-js">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="generator" content="Hugo 0.62.2" />
|
||||
|
||||
<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="https://jenkinsci.github.io/kubernetes-operator/blog/releases/index.xml">
|
||||
|
||||
|
||||
<link rel="shortcut icon" href="/favicons/favicon.ico" >
|
||||
<link rel="apple-touch-icon" href="/kubernetes-operator/favicons/apple-touch-icon-180x180.png" sizes="180x180">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-36x36.png" sizes="36x36">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-48x48.png" sizes="48x48">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-72x72.png" sizes="72x72">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-96x196.png" sizes="96x196">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-144x144.png" sizes="144x144">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-192x192.png"sizes="192x192">
|
||||
|
||||
<title>New Releases | Jenkins Operator</title><meta property="og:title" content="New Releases" />
|
||||
<meta property="og:description" content="A native operator for Kubernetes to manage Jenkins" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="https://jenkinsci.github.io/kubernetes-operator/blog/releases/" />
|
||||
<meta property="og:updated_time" content="2018-01-04T00:00:00+00:00" /><meta property="og:site_name" content="Jenkins Operator" />
|
||||
<meta itemprop="name" content="New Releases">
|
||||
<meta itemprop="description" content="A native operator for Kubernetes to manage Jenkins"><meta name="twitter:card" content="summary"/>
|
||||
<meta name="twitter:title" content="New Releases"/>
|
||||
<meta name="twitter:description" content="A native operator for Kubernetes to manage Jenkins"/>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="preload" href="/kubernetes-operator/scss/main.min.6c58fba96b88d035ce071c346f084a9dc4dedee4e80eb3724fe530520541a4ec.css" as="style">
|
||||
<link href="/kubernetes-operator/scss/main.min.6c58fba96b88d035ce071c346f084a9dc4dedee4e80eb3724fe530520541a4ec.css" rel="stylesheet" integrity="">
|
||||
|
||||
<script
|
||||
src="https://code.jquery.com/jquery-3.3.1.min.js"
|
||||
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
|
||||
crossorigin="anonymous"></script>
|
||||
|
||||
|
||||
<title>New Releases | Jenkins Operator</title>
|
||||
</head>
|
||||
<body class="td-section td-blog">
|
||||
<header>
|
||||
|
||||
<nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar">
|
||||
<a class="navbar-brand" href="/kubernetes-operator/">
|
||||
<img style="width: 32px; height: 32px; margin-right: 7.5px;" src="/kubernetes-operator/img/logo.svg"></img><span class="text-uppercase font-weight-bold">Jenkins Operator</span>
|
||||
</a>
|
||||
<div class="td-navbar-nav-scroll ml-md-auto" id="main_navbar">
|
||||
<ul class="navbar-nav mt-2 mt-lg-0">
|
||||
<li class="nav-item mr-4 mb-2 mb-lg-0">
|
||||
<a class="nav-link" href="/kubernetes-operator/about"><span>What's the Jenkins Operator?</span></a>
|
||||
</li>
|
||||
<li class="nav-item mr-4 mb-2 mb-lg-0">
|
||||
<a class="nav-link" href="/kubernetes-operator/docs"><span>Documentation</span></a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="navbar-nav d-none d-lg-block">
|
||||
<input type="search" class="form-control td-search-input" placeholder=" Search this site…" aria-label="Search this site…" autocomplete="off">
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<div class="container-fluid td-outer">
|
||||
<div class="td-main">
|
||||
<div class="row flex-xl-nowrap">
|
||||
<div class="col-12 col-md-3 col-xl-2 td-sidebar d-print-none">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="td-sidebar-menu" class="td-sidebar__inner">
|
||||
|
||||
<form class="td-sidebar__search d-flex align-items-center">
|
||||
|
||||
<input type="search" class="form-control td-search-input" placeholder=" Search this site…" aria-label="Search this site…" autocomplete="off">
|
||||
|
||||
<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type="button" data-toggle="collapse" data-target="#td-section-nav" aria-controls="td-docs-nav" aria-expanded="false" aria-label="Toggle section navigation">
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<nav class="collapse td-sidebar-nav pt-2 pl-4" id="td-section-nav">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul class="td-sidebar-nav__section pr-md-3">
|
||||
<li class="td-sidebar-nav__section-title">
|
||||
<a href="/kubernetes-operator/blog/" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Blog</a>
|
||||
</li>
|
||||
<ul>
|
||||
<li class="collapse show" id="kubernetes-operator-blog">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul class="td-sidebar-nav__section pr-md-3">
|
||||
<li class="td-sidebar-nav__section-title">
|
||||
<a href="/kubernetes-operator/blog/news/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">News</a>
|
||||
</li>
|
||||
<ul>
|
||||
<li class="collapse " id="kubernetes-operator-blog-news">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a class="td-sidebar-link td-sidebar-link__page " id="m-kubernetes-operator-blog-2018-10-06-easy-documentation-with-docsy" href="/kubernetes-operator/blog/2018/10/06/easy-documentation-with-docsy/">Announcing Docsy</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a class="td-sidebar-link td-sidebar-link__page " id="m-kubernetes-operator-blog-2018-10-06-the-second-blog-post" href="/kubernetes-operator/blog/2018/10/06/the-second-blog-post/">Second blog post</a>
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul class="td-sidebar-nav__section pr-md-3">
|
||||
<li class="td-sidebar-nav__section-title">
|
||||
<a href="/kubernetes-operator/blog/releases/" class="align-left pl-0 pr-2 active td-sidebar-link td-sidebar-link__section">Releases</a>
|
||||
</li>
|
||||
<ul>
|
||||
<li class="collapse show" id="kubernetes-operator-blog-releases">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a class="td-sidebar-link td-sidebar-link__page " id="m-kubernetes-operator-blog-2018-01-04-another-great-release" href="/kubernetes-operator/blog/2018/01/04/another-great-release/">Release New Features</a>
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div class="d-none d-xl-block col-xl-2 td-toc d-print-none">
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="td-page-meta ml-2 pb-1 pt-2 mb-0">
|
||||
|
||||
|
||||
|
||||
<a href="https://github.com/jenkinsci/kubernetes-operator/edit/master/website/content/en/blog/releases/_index.md" target="_blank"><i class="fa fa-edit fa-fw"></i> Edit this page</a>
|
||||
<a href="https://github.com/jenkinsci/kubernetes-operator/issues/new?labels=documentation&template=documentation.md&title=New%20Releases" target="_blank"><i class="fab fa-github fa-fw"></i> Create documentation issue</a>
|
||||
|
||||
|
||||
<a href="https://github.com/jenkinsci/kubernetes-operator/issues/new/choose" target="_blank"><i class="fas fa-tasks fa-fw"></i> Create project issue</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<main class="col-12 col-md-9 col-xl-8 pl-md-5 pr-md-4" role="main">
|
||||
<a class="btn btn-lg -bg-orange td-rss-button d-none d-lg-block" href="https://jenkinsci.github.io/kubernetes-operator/blog/releases/index.xml" target="_blank">
|
||||
RSS <i class="fa fa-rss ml-2 "></i>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
|
||||
<h2>Posts in 2018</h2>
|
||||
<ul class="list-unstyled mt-4">
|
||||
|
||||
<li class="media mb-4">
|
||||
<div class="media-body">
|
||||
<h5 class="mt-0 mb-1"><a href="/kubernetes-operator/blog/2018/01/04/another-great-release/">Release New Features</a></h5>
|
||||
<p class="mb-2 mb-md-3"><small class="text-muted">Thursday, January 04, 2018 in Releases</small></p>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<p class="pt-0 mt-0"> Text can be bold, italic, or strikethrough. Links should be blue with no underlines (unless hovered over).
|
||||
There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs. …</p>
|
||||
<p class="pt-0"><a href="/kubernetes-operator/blog/2018/01/04/another-great-release/">Read more</a></p>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="row pl-2 pt-2">
|
||||
<div class="col">
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer class="bg-dark py-5 row d-print-none">
|
||||
<div class="bg-dark container-fluid trademark-bigger">
|
||||
<div class="row">
|
||||
<div class="col-6 col-sm-4 text-xs-center order-sm-2">
|
||||
|
||||
</div>
|
||||
<div class="col-6 col-sm-4 text-right text-xs-center order-sm-3">
|
||||
|
||||
</div>
|
||||
<div class="col-12 col-sm-12 text-center py-4 order-sm-2">
|
||||
<small class="text-white">© 2023 Jenkins Operator is created by VirtusLab. Source is available under Apache License Version 2 and website content under Creative Commons Attribution-ShareAlike 4.0.</small><br>
|
||||
<small class="text-white">Jenkins® is a registered trademark of Software in the Public Interest, Inc.</small>
|
||||
|
||||
<p class="mt-2"><a href="/kubernetes-operator/about/">What's the Jenkins Operator?</a></p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="/kubernetes-operator/js/main.min.b0e99aac17991fa76812dd47914049168ac469a1faa0939560f0b370565becab.js" integrity="sha256-sOmarBeZH6doEt1HkUBJForEaaH6oJOVYPCzcFZb7Ks="></script>
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,397 +0,0 @@
|
|||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Jenkins Operator – New Releases</title>
|
||||
<link>https://jenkinsci.github.io/kubernetes-operator/blog/releases/</link>
|
||||
<description>Recent Hugo news from gohugo.io</description>
|
||||
<generator>Hugo -- gohugo.io</generator>
|
||||
<lastBuildDate>Thu, 04 Jan 2018 00:00:00 +0000</lastBuildDate>
|
||||
<image>
|
||||
<url>https://jenkinsci.github.io/kubernetes-operator/img/hugo.png</url>
|
||||
<title>GoHugo.io</title>
|
||||
<link>https://jenkinsci.github.io/kubernetes-operator/blog/releases/</link>
|
||||
</image>
|
||||
|
||||
<atom:link href="https://jenkinsci.github.io/kubernetes-operator/blog/releases/index.xml" rel="self" type="application/rss+xml" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<item>
|
||||
<title>Blog: Another Great Release</title>
|
||||
<link>https://jenkinsci.github.io/kubernetes-operator/blog/2018/01/04/another-great-release/</link>
|
||||
<pubDate>Thu, 04 Jan 2018 00:00:00 +0000</pubDate>
|
||||
|
||||
<guid>https://jenkinsci.github.io/kubernetes-operator/blog/2018/01/04/another-great-release/</guid>
|
||||
<description>
|
||||
|
||||
|
||||
|
||||
|
||||
<p>Text can be <strong>bold</strong>, <em>italic</em>, or <del>strikethrough</del>. <a href="https://github.com">Links</a> should be blue with no underlines (unless hovered over).</p>
|
||||
|
||||
<p>There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs.</p>
|
||||
|
||||
<p>There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs. There should be whitespace between paragraphs.</p>
|
||||
|
||||
<blockquote>
|
||||
<p>There should be no margin above this first sentence.</p>
|
||||
|
||||
<p>Blockquotes should be a lighter gray with a border along the left side in the secondary color.</p>
|
||||
|
||||
<p>There should be no margin below this final sentence.</p>
|
||||
</blockquote>
|
||||
|
||||
<h2 id="first-header">First Header</h2>
|
||||
|
||||
<p>This is a normal paragraph following a header. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<p>On big screens, paragraphs and headings should not take up the full container width, but we want tables, code blocks and similar to take the full width.</p>
|
||||
|
||||
<p>Lorem markdownum tuta hospes stabat; idem saxum facit quaterque repetito
|
||||
occumbere, oves novem gestit haerebat frena; qui. Respicit recurvam erat:
|
||||
pignora hinc reppulit nos <strong>aut</strong>, aptos, ipsa.</p>
|
||||
|
||||
<p>Meae optatos <em>passa est</em> Epiros utiliter <em>Talibus niveis</em>, hoc lata, edidit.
|
||||
Dixi ad aestum.</p>
|
||||
|
||||
<h2 id="header-2">Header 2</h2>
|
||||
|
||||
<blockquote>
|
||||
<p>This is a blockquote following a header. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
</blockquote>
|
||||
|
||||
<h3 id="header-3">Header 3</h3>
|
||||
<pre><code>This is a code block following a header.</code></pre>
|
||||
<h4 id="header-4">Header 4</h4>
|
||||
|
||||
<ul>
|
||||
<li>This is an unordered list following a header.</li>
|
||||
<li>This is an unordered list following a header.</li>
|
||||
<li>This is an unordered list following a header.</li>
|
||||
</ul>
|
||||
|
||||
<h5 id="header-5">Header 5</h5>
|
||||
|
||||
<ol>
|
||||
<li>This is an ordered list following a header.</li>
|
||||
<li>This is an ordered list following a header.</li>
|
||||
<li>This is an ordered list following a header.</li>
|
||||
</ol>
|
||||
|
||||
<h6 id="header-6">Header 6</h6>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>What</th>
|
||||
<th>Follows</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>A table</td>
|
||||
<td>A header</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>A table</td>
|
||||
<td>A header</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>A table</td>
|
||||
<td>A header</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>There&rsquo;s a horizontal rule above and below this.</p>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Here is an unordered list:</p>
|
||||
|
||||
<ul>
|
||||
<li>Salt-n-Pepa</li>
|
||||
<li>Bel Biv DeVoe</li>
|
||||
<li>Kid &lsquo;N Play</li>
|
||||
</ul>
|
||||
|
||||
<p>And an ordered list:</p>
|
||||
|
||||
<ol>
|
||||
<li>Michael Jackson</li>
|
||||
<li>Michael Bolton</li>
|
||||
<li>Michael Bublé</li>
|
||||
</ol>
|
||||
|
||||
<p>And an unordered task list:</p>
|
||||
|
||||
<ul class="task-list">
|
||||
<li><label><input type="checkbox" checked disabled class="task-list-item"> Create a sample markdown document</label></li>
|
||||
<li><label><input type="checkbox" checked disabled class="task-list-item"> Add task lists to it</label></li>
|
||||
<li><label><input type="checkbox" disabled class="task-list-item"> Take a vacation</label></li>
|
||||
</ul>
|
||||
|
||||
<p>And a &ldquo;mixed&rdquo; task list:</p>
|
||||
|
||||
<ul class="task-list">
|
||||
<li><label><input type="checkbox" disabled class="task-list-item"> Steal underpants</label></li>
|
||||
<li>?</li>
|
||||
<li><label><input type="checkbox" disabled class="task-list-item"> Profit!</label></li>
|
||||
</ul>
|
||||
|
||||
<p>And a nested list:</p>
|
||||
|
||||
<ul>
|
||||
<li>Jackson 5
|
||||
|
||||
<ul>
|
||||
<li>Michael</li>
|
||||
<li>Tito</li>
|
||||
<li>Jackie</li>
|
||||
<li>Marlon</li>
|
||||
<li>Jermaine</li>
|
||||
</ul></li>
|
||||
<li>TMNT
|
||||
|
||||
<ul>
|
||||
<li>Leonardo</li>
|
||||
<li>Michelangelo</li>
|
||||
<li>Donatello</li>
|
||||
<li>Raphael</li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
|
||||
<p>Definition lists can be used with Markdown syntax. Definition terms are bold.</p>
|
||||
|
||||
<dl>
|
||||
<dt>Name</dt>
|
||||
<dd>Godzilla</dd>
|
||||
<dt>Born</dt>
|
||||
<dd>1952</dd>
|
||||
<dt>Birthplace</dt>
|
||||
<dd>Japan</dd>
|
||||
<dt>Color</dt>
|
||||
<dd>Green</dd>
|
||||
</dl>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Tables should have bold headings and alternating shaded rows.</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Artist</th>
|
||||
<th>Album</th>
|
||||
<th>Year</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Michael Jackson</td>
|
||||
<td>Thriller</td>
|
||||
<td>1982</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Prince</td>
|
||||
<td>Purple Rain</td>
|
||||
<td>1984</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Beastie Boys</td>
|
||||
<td>License to Ill</td>
|
||||
<td>1986</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p>If a table is too wide, it should scroll horizontally.</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Artist</th>
|
||||
<th>Album</th>
|
||||
<th>Year</th>
|
||||
<th>Label</th>
|
||||
<th>Awards</th>
|
||||
<th>Songs</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Michael Jackson</td>
|
||||
<td>Thriller</td>
|
||||
<td>1982</td>
|
||||
<td>Epic Records</td>
|
||||
<td>Grammy Award for Album of the Year, American Music Award for Favorite Pop/Rock Album, American Music Award for Favorite Soul/R&amp;B Album, Brit Award for Best Selling Album, Grammy Award for Best Engineered Album, Non-Classical</td>
|
||||
<td>Wanna Be Startin&rsquo; Somethin&rsquo;, Baby Be Mine, The Girl Is Mine, Thriller, Beat It, Billie Jean, Human Nature, P.Y.T. (Pretty Young Thing), The Lady in My Life</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Prince</td>
|
||||
<td>Purple Rain</td>
|
||||
<td>1984</td>
|
||||
<td>Warner Brothers Records</td>
|
||||
<td>Grammy Award for Best Score Soundtrack for Visual Media, American Music Award for Favorite Pop/Rock Album, American Music Award for Favorite Soul/R&amp;B Album, Brit Award for Best Soundtrack/Cast Recording, Grammy Award for Best Rock Performance by a Duo or Group with Vocal</td>
|
||||
<td>Let&rsquo;s Go Crazy, Take Me With U, The Beautiful Ones, Computer Blue, Darling Nikki, When Doves Cry, I Would Die 4 U, Baby I&rsquo;m a Star, Purple Rain</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Beastie Boys</td>
|
||||
<td>License to Ill</td>
|
||||
<td>1986</td>
|
||||
<td>Mercury Records</td>
|
||||
<td>noawardsbutthistablecelliswide</td>
|
||||
<td>Rhymin &amp; Stealin, The New Style, She&rsquo;s Crafty, Posse in Effect, Slow Ride, Girls, (You Gotta) Fight for Your Right, No Sleep Till Brooklyn, Paul Revere, Hold It Now, Hit It, Brass Monkey, Slow and Low, Time to Get Ill</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Code snippets like <code>var foo = &quot;bar&quot;;</code> can be shown inline.</p>
|
||||
|
||||
<p>Also, <code>this should vertically align</code> <del><code>with this</code></del> <del>and this</del>.</p>
|
||||
|
||||
<p>Code can also be shown in a block element.</p>
|
||||
<pre><code>foo := "bar";
|
||||
bar := "foo";</code></pre>
|
||||
<p>Code can also use syntax highlighting.</p>
|
||||
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-go" data-lang="go"><span style="color:#204a87;font-weight:bold">func</span> <span style="color:#000">main</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#000;font-weight:bold">{</span>
|
||||
<span style="color:#000">input</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#4e9a06">`</span><span style="color:#4e9a06">var foo = &#34;bar&#34;;</span><span style="color:#4e9a06">`</span>
|
||||
|
||||
<span style="color:#000">lexer</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">lexers</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">&#34;javascript&#34;</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000">iterator</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">_</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">lexer</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Tokenise</span><span style="color:#000;font-weight:bold">(</span><span style="color:#204a87;font-weight:bold">nil</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">input</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000">style</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">styles</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">&#34;github&#34;</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000">formatter</span> <span style="color:#ce5c00;font-weight:bold">:=</span> <span style="color:#000">html</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">New</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">html</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">WithLineNumbers</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000;font-weight:bold">)</span><span style="color:#000;font-weight:bold">)</span>
|
||||
|
||||
<span style="color:#204a87;font-weight:bold">var</span> <span style="color:#000">buff</span> <span style="color:#000">bytes</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Buffer</span>
|
||||
<span style="color:#000">formatter</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Format</span><span style="color:#000;font-weight:bold">(</span><span style="color:#ce5c00;font-weight:bold">&amp;</span><span style="color:#000">buff</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">style</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">iterator</span><span style="color:#000;font-weight:bold">)</span>
|
||||
|
||||
<span style="color:#000">fmt</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">Println</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">buff</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">String</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000;font-weight:bold">)</span><span style="color:#000;font-weight:bold">)</span>
|
||||
<span style="color:#000;font-weight:bold">}</span></code></pre></div><pre><code>Long, single-line code blocks should not wrap. They should horizontally scroll if they are too long. This line should be long enough to demonstrate this.</code></pre>
|
||||
<p>Inline code inside table cells should still be distinguishable.</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Language</th>
|
||||
<th>Code</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Javascript</td>
|
||||
<td><code>var foo = &quot;bar&quot;;</code></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Ruby</td>
|
||||
<td><code>foo = &quot;bar&quot;{</code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<hr />
|
||||
|
||||
<p>Small images should be shown at their actual size.</p>
|
||||
|
||||
<p><img src="http://placekitten.com/g/300/200/" alt="" /></p>
|
||||
|
||||
<p>Large images should always scale down and fit in the content container.</p>
|
||||
|
||||
<p><img src="http://placekitten.com/g/1200/800/" alt="" /></p>
|
||||
|
||||
<h2 id="components">Components</h2>
|
||||
|
||||
<h3 id="alerts">Alerts</h3>
|
||||
|
||||
<p>
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
|
||||
This is an alert.
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
<h4 class="alert-heading">Note:</h4>
|
||||
This is an alert with a title.
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
|
||||
This is a successful alert.
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
|
||||
This is a warning!
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="alert alert-primary" role="alert">
|
||||
<h4 class="alert-heading">Warning!</h4>
|
||||
This is a warning with a title!
|
||||
</div>
|
||||
</p>
|
||||
|
||||
<h2 id="sizing">Sizing</h2>
|
||||
|
||||
<p>Add some sections here to see how the ToC looks like. Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="parameters-available">Parameters available</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="using-pixels">Using pixels</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="using-rem">Using rem</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h2 id="memory">Memory</h2>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="ram-to-use">RAM to use</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="more-is-better">More is better</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
|
||||
<h3 id="used-ram">Used RAM</h3>
|
||||
|
||||
<p>Bacon ipsum dolor sit amet t-bone doner shank drumstick, pork belly porchetta chuck sausage brisket ham hock rump pig. Chuck kielbasa leberkas, pork bresaola ham hock filet mignon cow shoulder short ribs biltong.</p>
|
||||
<pre><code>This is the final element on the page and there should be no margin below this.</code></pre>
|
||||
</description>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
|
|
@ -1 +0,0 @@
|
|||
<!DOCTYPE html><html><head><title>https://jenkinsci.github.io/kubernetes-operator/blog/releases/</title><link rel="canonical" href="https://jenkinsci.github.io/kubernetes-operator/blog/releases/"/><meta name="robots" content="noindex"><meta charset="utf-8" /><meta http-equiv="refresh" content="0; url=https://jenkinsci.github.io/kubernetes-operator/blog/releases/" /></head></html>
|
||||
|
|
@ -1,148 +0,0 @@
|
|||
<!doctype html>
|
||||
<html lang="en" class="no-js">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="generator" content="Hugo 0.62.2" />
|
||||
|
||||
<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="https://jenkinsci.github.io/kubernetes-operator/community/index.xml">
|
||||
|
||||
|
||||
<link rel="shortcut icon" href="/favicons/favicon.ico" >
|
||||
<link rel="apple-touch-icon" href="/kubernetes-operator/favicons/apple-touch-icon-180x180.png" sizes="180x180">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-36x36.png" sizes="36x36">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-48x48.png" sizes="48x48">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-72x72.png" sizes="72x72">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-96x196.png" sizes="96x196">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-144x144.png" sizes="144x144">
|
||||
<link rel="icon" type="image/png" href="/kubernetes-operator/favicons/android-192x192.png"sizes="192x192">
|
||||
|
||||
<title>Community | Jenkins Operator</title><meta property="og:title" content="Community" />
|
||||
<meta property="og:description" content="A native operator for Kubernetes to manage Jenkins" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="https://jenkinsci.github.io/kubernetes-operator/community/" />
|
||||
<meta property="og:site_name" content="Jenkins Operator" />
|
||||
<meta itemprop="name" content="Community">
|
||||
<meta itemprop="description" content="A native operator for Kubernetes to manage Jenkins"><meta name="twitter:card" content="summary"/>
|
||||
<meta name="twitter:title" content="Community"/>
|
||||
<meta name="twitter:description" content="A native operator for Kubernetes to manage Jenkins"/>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="preload" href="/kubernetes-operator/scss/main.min.6c58fba96b88d035ce071c346f084a9dc4dedee4e80eb3724fe530520541a4ec.css" as="style">
|
||||
<link href="/kubernetes-operator/scss/main.min.6c58fba96b88d035ce071c346f084a9dc4dedee4e80eb3724fe530520541a4ec.css" rel="stylesheet" integrity="">
|
||||
|
||||
<script
|
||||
src="https://code.jquery.com/jquery-3.3.1.min.js"
|
||||
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
|
||||
crossorigin="anonymous"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body class="td-section">
|
||||
<header>
|
||||
|
||||
<nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar">
|
||||
<a class="navbar-brand" href="/kubernetes-operator/">
|
||||
<img style="width: 32px; height: 32px; margin-right: 7.5px;" src="/kubernetes-operator/img/logo.svg"></img><span class="text-uppercase font-weight-bold">Jenkins Operator</span>
|
||||
</a>
|
||||
<div class="td-navbar-nav-scroll ml-md-auto" id="main_navbar">
|
||||
<ul class="navbar-nav mt-2 mt-lg-0">
|
||||
<li class="nav-item mr-4 mb-2 mb-lg-0">
|
||||
<a class="nav-link" href="/kubernetes-operator/about"><span>What's the Jenkins Operator?</span></a>
|
||||
</li>
|
||||
<li class="nav-item mr-4 mb-2 mb-lg-0">
|
||||
<a class="nav-link" href="/kubernetes-operator/docs"><span>Documentation</span></a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="navbar-nav d-none d-lg-block">
|
||||
<input type="search" class="form-control td-search-input" placeholder=" Search this site…" aria-label="Search this site…" autocomplete="off">
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<div class="container-fluid td-default td-outer">
|
||||
<main role="main" class="td-main">
|
||||
|
||||
|
||||
<a class="td-offset-anchor"></a>
|
||||
<section class="row td-box td-box--1 position-relative td-box--gradient td-box--height-auto">
|
||||
<div class="container text-center td-arrow-down">
|
||||
<span class="h4 mb-0">
|
||||
<h1>Join the Jenkins Operator community</h1>
|
||||
|
||||
<p>Jenkins Operator is an open source project that anyone in the community can use, improve, and enjoy. We'd love you to join us! Here's a few ways to find out what's happening and get involved.
|
||||
</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
<section class="row td-box td-box--4 td-box--gradient td-box--height-auto linkbox">
|
||||
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
|
||||
<h2>Learn and Connect</h2>
|
||||
<p>Using or want to use Jenkins Operator? Find out more here:
|
||||
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
|
||||
<h2>Develop and Contribute</h2>
|
||||
<p>If you want to get more involved by contributing to Jenkins Operator, join us here:
|
||||
|
||||
<p>You can find out how to contribute to these docs in our <a href="/docs/contribution-guidelines/">Contribution Guidelines</a>.
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="td-content">
|
||||
<!--add blocks of content here to add more sections to the community page -->
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</main>
|
||||
|
||||
<footer class="bg-dark py-5 row d-print-none">
|
||||
<div class="bg-dark container-fluid trademark-bigger">
|
||||
<div class="row">
|
||||
<div class="col-6 col-sm-4 text-xs-center order-sm-2">
|
||||
|
||||
</div>
|
||||
<div class="col-6 col-sm-4 text-right text-xs-center order-sm-3">
|
||||
|
||||
</div>
|
||||
<div class="col-12 col-sm-12 text-center py-4 order-sm-2">
|
||||
<small class="text-white">© 2023 Jenkins Operator is created by VirtusLab. Source is available under Apache License Version 2 and website content under Creative Commons Attribution-ShareAlike 4.0.</small><br>
|
||||
<small class="text-white">Jenkins® is a registered trademark of Software in the Public Interest, Inc.</small>
|
||||
|
||||
<p class="mt-2"><a href="/kubernetes-operator/about/">What's the Jenkins Operator?</a></p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="/kubernetes-operator/js/main.min.b0e99aac17991fa76812dd47914049168ac469a1faa0939560f0b370565becab.js" integrity="sha256-sOmarBeZH6doEt1HkUBJForEaaH6oJOVYPCzcFZb7Ks="></script>
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue