Jenkins をWindows からLinuxに移行

Windowsで動いているJenkins サーバをLinux(今回はAWSのAmazon Linux)に移行することがあり、そのやり方を記します。

動機

もともとオンプレで使っていたWindows上のJenkinsをクラウドに移行させようとなり、どうせならpipelineでDockerを動かしているしLinuxの方が親和性よいのではということで移行を決定しました。

Steps

  1. 必要なソフトウェアのインストール
  2. 稼働中のJenkinsサーバからデータの移行
  3. Jenkinsfileの編集
  4. 稼働開始

1. 必要なソフトウェアのインストール

以下のソフトウェアをインストールします。今回はバックエンドを.NETベースで作っていることと、フロントエンドのビルドもJenkins上で行っているので.NETやNode.jsなんかも入れます。(各バージョンは適宜変えてください。セキュリティの問題とか色々あるので)

ソフトウェア インストールコマンド
Java
  • sudo yum -y install java-1.8.0-openjdk-devel.x86_64
Jenkins
  • sudo yum update 
  • sudo rpm –import https://pkg.jenkins.io/redhat/jenkins.io.key 
  • sudo yum install jenkins -y 
  • sudo service jenkins start 

※でWebUI(http://<ip address or DNS of the host>:8080)からJenkinsを初期化

Git
  • sudo yum install git 
Docker/docker-compose
  • sudo yum install -y docker 
  • sudo service docker start 
  •  sudo usermod -a -G docker jenkins 
  • sudo systemctl enable docker 
  • sudo curl -L https://github.com/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose 
  • sudo chmod +x /usr/local/bin/docker-compose 
  • sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose 
  • sudo service docker restart 
  • sudo service jenkins restart 
.NET
  • sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm 
  • sudo yum install dotnet-sdk-3.1 
Node.js
  • curl -o-https://raw.githubusercontent.com/creationix/nvm/v0.32.0/install.sh | bash 
  • ~/.nvm/nvm.sh 
  • nvm install stable 

その後、

コマンド”which node”でnodeがどこにインストールされたか確認。

nodeファイルをjenkinsのホームディレクトリ(/var/lib/jenkins)にコピー。

nodeファイルの所有とグループをjenkinsに変更。

jenkinsホームディレクトリ下のnodeファイルへのpathを指定する環境変数を追加。

稼働中のJenkinsサーバからデータの移行

基本的には稼働中のJenkinsのホームディレクトリ下のファイルを新しいJenkinsのホームディレクトリに移すだけです。デフォルトのホームディレクトリは:

  • Windows: C:\Program Files (x86)\Jenkins
  • Linux: /var/lib/jenkins
移行するデータ 移す場所・やり方
プラグイン

C:\Program Files (x86)\Jenkins\plugins → /var/lib/jenkins/plugins

ジョブ

C:\Program Files (x86)\Jenkins\jobs → /var/lib/jenkins/jobs

移した先のowner/groupがjenkinsなのを確認。

クレデンシャル

移行先のJenkinsを止める(service jenkins stop)

移行先のをidentity.key.encを削除(rm identity.key.enc)

secret*とcredentioal.xmlをコピー

  • 移行元 # cd /var/lib/jenkins 
  • 移行元 # tar czvf /tmp/credentials.tgz secret* credentials.xml 
  • 移行元 # scp credentials.tgz $user@$new-server:/tmp/ 
  • 移行先 # cd /var/lib/jenkins 
  • 移行先 # tar xzvf /tmp/credentials.tgz -C ./ 

移行先のJenkinsを起動 (service jenkins start)

その他環境変数の設定等は移行元のUIからコピペする。

Jenkinsfileの編集

WindowsからLinuxへの移行なので最低以下の変更は必要になると思います。

  • “bat”使っているところを”sh”に変更 
  • パスのデリミタを”¥¥”から”/”に変更
  • “powershell”使っているところを”sh”に変更(powershellがJenkinsで有効な場合は不要)
  • ファイルパスの大文字小文字

以上で移行作業は完了です。移行先のJenkinsを起動して動作することを祈りましょう。