0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Jenkins PipelineでSSH接続するのに苦労した話

Last updated at Posted at 2023-12-29

やりたかったこと

JenkinsのジョブでLinuxサーバに接続し、Spring bootで作ったJavaアプリ(jar)を起動したかった。

ハマったこと

  1. Jenkinsに登録した認証情報を使ってSSH接続する。
  2. SSH接続した後、起動用のシェルファイルを実行したがエラーが発生。

なぜできなかった

  1. 大人の事情でSSH Agent Pluginは使用できなかったため、愚直にSSH接続を行った。
    ssh接続の認証はユーザ名+パスワード。
    SSH_ASKPASSを使用し、Jenkinsに登録した認証情報(Credentials)を使って接続を行う。
  2. エラーはロケールが問題だった。SSHのデフォルト設定でロケール周りの環境変数を接続先に渡してしまっていた。

対処法

  1. SSH_ASKPASSを利用してパスワードの入力を自動化した。
  2. 空の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の知識が足りず苦労することが多かった。
数こなして知識を付けていきたい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?