Jenkins

Types of Jenkins Projects

TypeDescription
Freestyle単純(たんじゅん)単一(たんいつ) タスク、(れい) : run test
Pipeline完全(かんぜん) なデリバリーサイクル:test → build → … 単一(たんいつ) ブランチ()
Multi-branch PipelinePipeline に() ているが、複数(ふくすう) ブランチをサポート

Credential Scopes

ScopeDescription
SystemJenkins Server でのみ利用(りよう) 可能(かのう) 、Jenkins Jobs には適用(てきよう) されない
Globalグローバルにアクセス可能(かのう)
Projectプロジェクト限定(げんてい) 、multi-branch pipeline のみ

Trigger Build

Push Notification

(あたら) しい Commit () に Version Control が Jenkins に通知(つうち)

  1. VCS に(おう) じた Jenkins Plugin をインストール
  2. Repository Server Hostname を設定(せってい)
  3. Access Token / Credential を追加(ついか)

Polling

Jenkins が定期的(ていきてき) にポーリング確認(かくにん)

Plugins

  • Matrix Authorization Strategy
  • Role-based Authorization Strategy
  • Backup: ThinBackup

System Administration

Backup

  • Filesystem Snapshots - 日常(にちじょう) バックアップ
  • バックアップ Plugins を使用(しよう)
  • Jenkins instance をバックアップする shell script を作成(さくせい)

Files To Backup

  flowchart TD
	home[$JENKINS_HOME]
	config.xml[Configuration files]
	j[jobs]

	home ----> config.xml
	home ----> j

Pipelines

Jenkinsfile - Declarative

  • 入門(にゅうもん) しやすい
  • pipeline最上位(さいじょうい) でなければならない
  • agent:どこで実行(じっこう) するかを指定(してい) (Build Agent)
  • stages作業(さぎょう)(おこな) われる場所(ばしょ)
    • stage
    • steps
pipeline {
	agent any

	stages {
		stage("build") {
			steps {
				echo "building the application..."

				script {
					def test = 2 + 2 > 3 ? 'cool' : 'not cool'
					echo test
				}
			}
		}

		stage("test") {
			steps {
				echo "testing the application..."
			}
		}

		stage("deploy") {
			steps {
				echo "deploying the application..."
			}
		}
	}
}

Go Pipeline Demo

設定(せってい)Manage Jenkins -> Tools -> Go

pipeline {
    agent any
    tools {
        go 'Go1.19'
    }

    environment {
        GO111MODULE='on'
    }

    stages {
        stage('Test') {
            steps {
                git '<Repo URL>'
                sh 'go test ./...'
            }
        }
    }
}

Docker Container Agent

pipeline {
    agent {
        docker { image 'golang:latest' }
    }

    stages {
        stage('Dev') {
            steps {
                git 'https://github.com/kodekloudhub/go-webapp-sample.git'
                sh 'go version'
            }
        }
    }
}

Scripted Pipeline

  • 最初(さいしょ)構文(こうぶん)
  • Groovy engine
  • 高度(こうど) なスクリプト能力(のうりょく)(たか)柔軟性(じゅうなんせい)
node {
	// scripted pipeline content
}

Build Agents

  • Windows
  • Linux
  • MacOS
  • Docker
  • 推奨(すいしょう) :Jenkins Server / Build Server を分離(ぶんり)

Security

Access Control

  • Authentication認証(にんしょう) ):security realm を使用(しよう) して完了(かんりょう) 。Security realm がユーザー ID とグループメンバーシップを決定(けってい)
  • Authorization認可(にんか) ):authorization strategy によって完了(かんりょう) 。ユーザー(直接(ちょくせつ) またはグループメンバーシップを(つう) じて)が権限(けんげん)() っているかを制御(せいぎょ)

Common Mistakes

  • Anyone can do anything
  • Logged-in users can do anything
  • Anonymous and authenticated users
  • Built-in node(built-in node で実行(じっこう) されるビルドは Jenkins プロセスと(おな) じファイルシステムアクセス(けん)() つ)

CLI

Service Management

sudo systemctl status jenkins
sudo systemctl start jenkins
sudo systemctl stop jenkins
sudo systemctl restart jenkins

SSH Authentication

SSH Key を設定(せってい)

ls /home/mike/.ssh/
# jenkins_key  jenkins_key.pub

SSH key を Jenkins member setting に複製(ふくせい)

cat /home/mike/.ssh/jenkins_key.pub

SSH service を固定(こてい) ポートで待機(たいき) するように設定(せってい)

curl -Lv http://localhost:8085/login 2>&1 | grep -i 'x-ssh-endpoint'

SSH 経由(けいゆ) で Jenkins と対話(たいわ)

ssh -i /home/mike/.ssh/jenkins_key -l mike -p 8022 jenkins-server help

Jenkins を再起動(さいきどう)

ssh -i /home/mike/.ssh/jenkins_key -l mike -p 8022 jenkins-server safe-restart

Setup

Linux (CentOS)

sudo yum install epel-release -y
sudo yum install java-11-openjdk -y
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate
sudo rpm --import http://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
sudo yum install jenkins -y

ポートを変更(へんこう)

sudo vi /lib/systemd/system/jenkins.service
Environment="JENKINS_PORT=8090"

初期(しょき) パスワードを取得(しゅとく)

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

Docker

docker pull jenkins/jenkins:lts-jdk17
docker run -p 9992:8080 -p 50000:50000 -d \
  -e JAVA_OPTS="-Djava.awt.headless=true -Dhudson.plugins.git.GitSCM.ALLOW_LOCAL_CHECKOUT=true" \
  -v "D:\Project-Workspace\Docker-Mount\jenkins_data_17_lts":/var/jenkins_home \
  jenkins/jenkins:lts-jdk17
  • Port 8080:Jenkins Web UI
  • Port 50000:Master / Slave 通信(つうしん)