Quantcast
Channel: web pakun
Viewing all 247 articles
Browse latest View live

proxy背後でJenkinsのプラグインをインストールする時のエラーの対処(docker&windows)

$
0
0

継続的インテグレーションの環境構築で、Jenkinsを使うことになったのですが、Jenkinsのインストールをして、その後始まるプラグインのエラーで長らく悩まされておりました。。

「Install plugin」すると、以下の画像のようにエラーになってしまう。。

ようやく解決方法が分かったので、メモしておきます。

 

Jenkinsエラー

 

 Docker上に環境構築する場合と、Windowsにサービスとしてインストールする場合とで対処法が微妙に異なっていたので、両方記載しますね。

 

混同しがちなので注意  ↓ ↓ ↓

Jenkinsのイメージには、2つ、有名なのがあり、混同しがちです。jenkinsjenkins/jenkinsは異なるイメージです。
前者はdocker公式イメージで、後者はjenkinsチームがメンテしています。
公式の方がよいと思うかもしれませんが、開発には、後者が扱いやすいと思います。私は、後者を使うことが多いです。

 

Dockerの場合

dockerでjenkinsのイメージをpullして環境を作る場合、コンテナの起動時の引数として、JVMにプロキシの情報を渡す必要がありました。

docker run --name con_jenkins -p 8080:8080 -p 50000:50000 -v /jenkins_home:/var/jenkins_home --env JAVA_OPTS="-Dhttp.proxyHost=proxy_server -Dhttp.proxyPort=proxy_port -Dhttps.proxyHost=proxy_server -Dhttps.proxyPort=proxy_port" -d myimg/jenkins:1.0

 

httpとhttpsの両方を設定しないと通信エラーになってしまいます。

なお、私が試したときは、単純にlatestのイメージをpullすると上記オプションを指定してもプラグインのインストールに失敗したので、dockerfileを作成し、明示的にイメージを取得してイメージを作ってから、上記コマンドで起動しました。

# dockefileの記述
FROM jenkins:2.7.4

# その後、以下のコマンドでイメージをビルド
docker build --no-cache -t myimg/jenkins

 

 

Windowsにサービスとしてインストールする場合

Windowsにインストールした場合は、インストールしたディレクトリに「jenkins.xml」というファイルがあります。

その中に、JavaのJVMオプションを記載する箇所がありますので、そこに以下のように

-Dhttp.proxyHost=proxy_server -Dhttp.proxyPort=proxy_port -Dhttps.protocols=TLSv1.1,TLSv1.2

というオプションを追加します。

プロキシのサーバ(IPアドレス)とポート番号ですが、protocolsというのは、SSLハンドシェイクのエラーが出ていたため、追記しました。

以下の画像で言うと、赤枠の部分になります。

 

Jenkinsエラー

 

その後、以下のURLをブラザに入力して再起動し、再度プラグインのインストールを行います。

http://localhost:8080/restart

 

Jenkinsの管理コンソールからプロキシの設定を行う場合

上記の起動オプションを渡せば、プラグインのインストール時にプロキシが使われますが、「http://localhost:8080/manage」から管理コンソールで設定することも可能です。

管理コンソールを開き、「Jenkinsの管理」->「プラグインの管理」を選択します。

 

Jenkinsエラー

 

そして、「高度な設定」タブを選択して、「HTTP Proxyの設定」にプロキシサーバのホスト名またはIPアドレスと、ポート番号を設定します。

 

Jenkinsエラー

 

すると、Jenkinsをインストールしたディレクトリに「proxy.xml」という設定ファイルが出来て、プロキシー情報が書き込まれます。

 

 


pluginsインストール済&ユーザ作成済のJenkins用Dockerイメージを作る手順

$
0
0

Jenkinsのdockerイメージを作成する手順を構築していたのですが、毎回プラグインのインストールをするのもなんだよね。。。

ということで、プラグインがあらかじめインストールされたdockerイメージを用意することにしました。

また、毎回jenkinsのユーザをつくるのもなんだよね。。。

ということで、ユーザも同時に作成するようにしています。

なお、開発環境がproxy背後なので、proxyの設定も入ったスクリプトになっていますが、そうでない方はproxyの記載は必要ないです。

 

Preinstalling pluginなjenkinsを作成する

「Suggested plugins」だけでなく、任意のプラグインがインストールされた状態のjenkinsを作るには、公式のgithubの情報がすごくためになります。

あ、公式と言っても、jenkinsの公式の方です。この記事にも書きましたが、jenkinsのイメージには似ているけど異なるものが2つあるので、混同しないようにしましょう。

今回は、jenkins/jenkinsの方です。

さて、この公式イメージには「/usr/local/bin/install-plugins.sh」という、プラグインを依存関係も含めてインストールしてくれるシェルが用意されているので、これを使います。

使い方は

FROM jenkins/jenkins:lts

RUN /usr/local/bin/install-plugins.sh docker-slaves github-branch-source:1.8

 

のように、シェルにプラグイン名をスペースで区切って渡します。

ただ、結構たくさんのプラグインがあるので、

 

FROM jenkins/jenkins:lts
COPY plugins.txt /usr/share/jenkins/ref/plugins.txt
RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt

 

のように、あらかじめインストールしたいプラグインを書いた「plugins.txt」を用意しておき、それをイメージのbuild時にシェルに渡すことで、preinstallできます。

で、この「plugins.txt」に記載するプラグイン名ですが、

スクリプトコンソール(http://localhost:8080/script)に以下のgroovyスクリプトを入力して実行すると取得できます。

Jenkins.instance.pluginManager.plugins.each{
 plugin -> println("${plugin.getShortName()}")

}

 

Jenkins Login

 

デフォルトのユーザをあらかじめ作成しておく

プラグインインストール以外にも、あらかじめ環境をセットアップしたいという要望があるハズです。

この目的の実現のために、以下のような仕組みが用意されています。

/usr/share/jenkins/ref/init.groovy.d/

配下にgroovyスクリプトを配置しておくと、初回run時にそのスクリプトを実行してくれるのです。

今回は、前もってjenkinsのコンソールを利用できるユーザを作成しておくことにします。

 

「custom.groovy」

import jenkins.model.*
Jenkins.instance.setNumExecutors(0)

 

「default-user.groovy」

import jenkins.model.*
import hudson.security.*

def env = System.getenv()

def jenkins = Jenkins.getInstance()
if(!(jenkins.getSecurityRealm() instanceof HudsonPrivateSecurityRealm))
    jenkins.setSecurityRealm(new HudsonPrivateSecurityRealm(false))

if(!(jenkins.getAuthorizationStrategy() instanceof GlobalMatrixAuthorizationStrategy))
    jenkins.setAuthorizationStrategy(new GlobalMatrixAuthorizationStrategy())

def user = jenkins.getSecurityRealm().createAccount(env.JENKINS_USER, env.JENKINS_PASS)
user.save()
jenkins.getAuthorizationStrategy().add(Jenkins.ADMINISTER, env.JENKINS_USER)

jenkins.save()

 

これらを記載したDockerFileは以下のようになります。

 

DockerFile

FROM jenkins/jenkins:2.184

ENV https_proxy "http://proxy_server:8080/"
ENV http_proxy "http://proxy_server:8080/"

MAINTAINER koji


# セットアップウィザードを無効化する
# (Suggested pluginsのインストールをスキップできる)
# proxy背後の場合は必要かも
# ENV JAVA_OPTS="-Djenkins.install.runSetupWizard=false -Dhttp.proxyHost=proxy_server -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxy_server -Dhttps.proxyPort=8080"
ENV JAVA_OPTS="-Djenkins.install.runSetupWizard=false"

# rootユーザでplugins.txtに記載されたプラグインをインストールする
# install-plugins.shは公式イメージに同梱されているインストール用スクリプト
USER root

COPY plugins.txt /usr/share/jenkins/ref/plugins.txt
RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt


ENV JENKINS_USER admin
ENV JENKINS_PASS admin


COPY custom.groovy /usr/share/jenkins/ref/init.groovy.d/
COPY default-user.groovy /usr/share/jenkins/ref/init.groovy.d/

 

このDockerFileでイメージを作成しrunすると、プラグインがインストールされ、あらかじめユーザが作成された状態でjenkinsが起動します。

 

docker build -t myimg/jenkins_plugin:1.0 .

 

docker run --name con_jenkins -p 8080:8080 -p 50000:50000 -v /jenkins_home:/var/jenkins_home --env JAVA_OPTS="-Dhttp.proxyHost=proxy_server -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxy_server -Dhttps.proxyPort=8080" -d myimg/jenkins_plugin:1.0

 

 

dockerのイメージ作成が「cgroups: cannot find cgroup mount destination: unknown.」でエラーになる

$
0
0

windowsでdocker-toolboxを使っているときに、イメージ作成で以下のようなエラーが出るときがあります。

cgroups: cannot find cgroup mount destination: unknown

これは、ホスト側のVMにcgroups用のディレクトリが無いために起こります。

一度設定しても、たまに再発することがあるのがよく分かりませんが、、。

 

対処法は次の通り。

Windowsの場合は以下の手順でホストにディレクトリを作り、マウントします。

# docker-machineにsshでログインする
docker-machine ssh default

#ログイン後、以下のコマンドでディレクトリ作成とマウントを行う
$ sudo mkdir /sys/fs/cgroup/systemd
$ sudo mount -t cgroup -o none,name=sytemd cgroup /sys/fs/cgroup/systemd

ShadowsocksRサーバをVPSにインストールする方法(中国の金盾・GFW対策)

$
0
0

中国ではGoogleのサービス(Gmail、Youtube等)やFacebook、Lineなどが金盾(GreatFireWall)にStopされて使えません。

今まではVPNプロバイダと契約している人が多かったですが、今の中国の主流は「Shadowsocks/ShadowsocksR」と言われる、Proxyを使った接続です。

すでにいくつかのVPNプロバイダでもShadowsocksサーバを用意しているようですね。

 

さて今回は、すでに契約しているブログ用のさくらのVPSサーバに「ShadowsocksR」をセットアップして、中国からでも使えるようにしたいと思います。

さくらのVPSはCentOSですが、AmazonやMicrosoftAzureなど、他のクラウドサービスを使っても同様かと思います。

 

ShadowsocksRのインストール

インストールにはGitHubでteddysunさんが公開しているシェルスクリプトを利用しました。

# インストールスクリプトをGetします。
$ wget https://github.com/teddysun/shadowsocks_install/raw/master/shadowsocksR.sh

# 実行権限を与えます
$ chmod +x ./shadowsocksR.sh

# インストールスクリプトを実行
$ ./shadowsocksR.sh 2>&1 | tee ./shadowsocksR.log

 

インストールを開始すると、以下のように設定する値を聞かれます。パスワードとport番号を設定しました。それ以外の暗号化方式などはデフォルトの値でかまわないと思います。

 

インストールが終わると、以下のように、設定した値が表示され、shadowsocksRサーバがstartします。

 

 

設定ファイルの場所

設定ファイルの場所は、

/etc/shadowsocks.json

にあります。

 

起動・停止コマンド

起動・停止コマンドは、

/etc/init.d/shadowsocks

にあります。「start/stop/restart/status」等のコマンドが使えます。

 

ログファイルの場所

ログファイルの場所は、

「/var/log/shadowsocksr.log」です。

 

ShadowsocksRクライアントをWindowsにセットアップする手順

$
0
0

Shadowsocks、ShadowsocksRサーバは暗号化されたProxyサーバです。

そのため、あらかじめサーバのIPアドレス、ポート、パスワードが分かっていれば、ShadowsocksクライアントをWindowsにセットアップするだけで、SS/SSRを使った通信ができます。

中国などのインターネット接続が制限されている国では、Gmailなどの海外のサービスが使えない場合もありますが、最近の中国の若者の間では、金盾(GreatFireWall)を越えて海外の情報を見たり、日本のアニメを見るのに、Shadowsocksが一般的に使われています。

 

中国でサービスを提供しているVPNプロバイダも、最近ではSS/SSRサーバを用意しているところも増えてきました。

中国でネットを越境する人の間では、VPNが遮断されたときのために複数の手段を持つのが常識ですが、それがつながらない場合、SS/SSRサーバに接続するという手段があるといいですよね。

 

今回は、WindowsサーバへのSS/SSRクライアントのセットアップ方法をご紹介します。

 

SS/SSRクライアントのダウンロードと起動

GitHubのところからzipファイルをダウンロードします。

解凍すると、以下のように紙飛行機のアイコンのexeファイルがあるので、ダブルクリックして起動しましょう。

 

設定

クライアントが起動されると、右下のタスクトレイに常駐します。

ここでいろいろな設定を行うわけです。

 

① はじめに、「PAC」⇒「ローカルPAC」を選択します。

このPCで設定したプロキシサーバ情報を使うという意味です。

 

 

②その後、VPNプロバイダから入手した、もしくは自分でset upしたSS/SSRサーバ情報を追加します。

QRコードでサーバ情報を提供しているプロバイダも多いようです。

初回起動したときには、以下のように空の設定が開きますので、サーバ情報を追加しましょう。

 

追加したサーバが有効になっているかは、「サーバ」で確認することができます。

 

③ここまで設定出来たら、SS/SSR通信を有効にします。

「システムプロキシ」が「無効」から「PAC」または「全般」になり、紙飛行機の色が白色か水色になっていれば、有効になっています。

なお、「PAC」は中国国内で規制されたサイトのみVPNを通す設定で、「全般」はすべてのサイトに対してVPNを通す設定です。

中国以外の国で使用する場合には「全般」にして使いましょう。

 

 

ついにShadowsocksサーバにも中国の規制が入るようになった模様

$
0
0

2019年に入る前までは、中国ではShadowsocks(中国語で影梭)プロトコルを使ったネット越境が盛んでした。

従来のVPN方式より通信速度も早く、中国の若者や駐在者の間でも広がりを見せていたのです。

ところが、2019年の3月から断続的に、6月の1日、2日あたりに至ってはほぼ全面的にShadowsocksを使った通信がブロックされる状況が続いていたようです。

 

かねてより、中国通信部はAIなどで特定の通信を判別する技術を開発中で、Shadowsocksプロトコルが特定され、ブロックされるのも時間の問題かと思われていましたが、ついに判別に成功したのでしょうか。

 

2019年3月~6月中旬には以下のような例が報告されています。

 

  • 大手のShadowsocksプロバイダ、「UCSS」や「BlueSurface」のサービスもブロックされていた模様
  • 個人でset upしていたShadowsocksサーバも24時間程度でブロックされた。

 

大手のサーバならまだしも、個人のサーバは、ネットワークの流量も少なく、機械的に見つける手段がないと判別は難しいと思われますので、Shadowsocksの判定に成功し、いよいよ本気になればいつでもブロックできる状態になったのかもしれません。

 

Shadowsocksサーバはもう使えないのか?

今回、Shadowsocksも規制の対象となったことで、もう使えなくなってしまうのか?と思う人もいるかもしれませんが、そこまで悲観する必要はないと思っています。

6月後半になって、「UCSS」や「BlueSurface」のShadowsocksは順次復旧し、接続可能な状態となっているようです。

中国政府も、完全に遮断するところまでは行わず、全人代の前後など統制を強めたい時期にきちんと遮断するという姿勢なのではないでしょうか。

そもそも、Shadowsocksは高速で通信を行うことができるので、日常的にYoutubeなどの動画を楽しむには、使い勝手の良い方式です。

そのため、

  • いつもはShadowsocksを使ってGmailや動画などを楽しむ。
  • 規制の強まっている時はVPN(IKEv2 方式は規制の対象でないことが多い)を使う。

といった使い方をするのが良いのではないかと思います。

中国のような「何が起こるか分からない」規制が行われる国では、複数の手段を用意しておくのがおススメです。

Hello world!

$
0
0

WordPress へようこそ。こちらは最初の投稿です。編集または削除し、コンテンツ作成を始めてください。

Viewing all 247 articles
Browse latest View live