👨🦳
[Jenkins]SSHで接続先のコマンドを実行する
Jenkins JobでSSH接続
本記事で利用した環境
以下に本記事で題材にするJenkinsのマシンについて以下に記載する。
項目名 | 値 |
---|---|
SSH接続元 | Ubuntu 22.04.5 LTS |
SSH接続先 | macOS 14.4.1 |
以下に本記事で題材にするJenkinsについて以下に記載する。
項目名 | 値 |
---|---|
バージョン | 2.479.1 |
※なお、Jenkinsはプラグインの利用でSSH接続していない。
構成図
構成図を以下に記載する。
Jenkinsの設定
Jenkinsの設定について以下に記載する。
-
Jenkinsユーザの鍵生成
Jenkinsユーザの鍵を生成するコマンドを以下に記載する。su jenkins #jenkinsユーザに変更 ssh-keygen -t rsa -b 4096
-
接続先(macOSサーバ)の外部からの接続を許可
一般 -> 設定 -> 共有からリモートログインを許可
-
接続先にJenkinsユーザの鍵を配置
接続先にJenkinsユーザの鍵を以下のコマンドで配置する。ssh-copy-id -i [公開鍵へのパス] [ホスト名]@[IP]
実装
Jenkins Jobで実装したパイプラインを以下に記載する。
// jenkins connect SSH vm and execution command
pipeline {
agent any
options {
timestamps()
}
//Jenkins Jobに与えるパラメータを定義
parameters {
string(name: "CONNECTION_NAME", defaultValue: "mac", description: "SSH接続の接続名")
string(name: "MACHINE_NAME", defaultValue: "dev", description: "仮想マシン名")
}
stages {
stage('ssh connect') {
steps {
sh """
ssh -tt ${CONNECTION_NAME} << EOF
# 実行コマンド
exit
EOF
"""
}
}
}
}
SSH接続には-tt
オプションを指定する。これは擬似端末を強制的に割り当てるためのオプションである。Jenkins JobがSSH接続後にコマンドを実行する場合-tt
オプションがないと下記エラーが発生する場合がある。
Pseudo-terminal will not be allocated because stdin is not a terminal.
SSH接続後は<< EOF
~EOF
内に実行したいコマンドを記載しexit
でSSH接続を終了する。
Discussion