やりたかったこと
JenkinsのジョブでLinuxサーバに接続し、Spring bootで作ったJavaアプリ(jar)を起動したかった。
ハマったこと
- Jenkinsに登録した認証情報を使ってSSH接続する。
- SSH接続した後、起動用のシェルファイルを実行したがエラーが発生。
なぜできなかった
- 大人の事情でSSH Agent Pluginは使用できなかったため、愚直にSSH接続を行った。
ssh接続の認証はユーザ名+パスワード。
SSH_ASKPASSを使用し、Jenkinsに登録した認証情報(Credentials)を使って接続を行う。 - エラーはロケールが問題だった。SSHのデフォルト設定でロケール周りの環境変数を接続先に渡してしまっていた。
対処法
- SSH_ASKPASSを利用してパスワードの入力を自動化した。
- 空のconfigファイルを作成し、SSHコマンド実行時に指定した。
コード
以下はサンプルのコード
pipeline
pipeline {
// agentやenvironmentは省略
stages {
stage('サンプルステージ') {
steps {
withCredentials([usernamePassword(credentialsId: 'logindata', usernameVariable : 'USERNAME', passwordVariable: 'PASSWORD')])
sh """
# インデントに注意
cat <<EOF > ask_pass
echo ${PASSWORD}
EOF
chmod +x ask_pass
export SSH_ASKPASS=$0
export DISPLAY=dummy:0
# 空のconfigファイル作成
touch sshconfig
# 空のConfigファイルを指定して
# sshコマンドを実行
ssh -f -F sshconfig ${usernameVariable}@hostname.co.jp "sh remort.sh"
"""
}
}
}
}
感想
Linuxの知識が足りず苦労することが多かった。
数こなして知識を付けていきたい。