私の問題は、e2eテスト用にdockerコンテナーでgoogle chromeを実行する方法です。公式のJenkinsイメージからDockerfile
を作成しますが、Google Chromeを実行しようとするとクラッシュし、エラーが表示されます。
Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted
Trace/breakpoint trap (core dumped)
JenkinsドッカーイメージはDebian jessie
を使用します。
Google chromeを--headless
フラグ付きで実行できますが、Xサーバーは必要ありません。
これは私のdockerファイルです:
ジェンキンスの公式画像:
ユーザーがDockerからGUIを使用してGoogle chromeを実行するリポジトリ:
最初のアプローチはxvbf
を使用することですが、--headless
フラグを使用するとプロセスがより簡単になります。
Ubuntuサーバーでchromeをインストール用の同じコマンドで実行できますが、Dockerでは失敗します。
他の目的の後、--no-sandbox
フラグを使用しましたが、Dockerイメージには次のエラーが表示されます。
[0427/180929.595479:WARNING:audio_manager.cc(295)] Multiple instances of AudioManager detected
[0427/180929.595537:WARNING:audio_manager.cc(254)] Multiple instances of AudioManager detected
libudev: udev_has_devtmpfs: name_to_handle_at on /dev: Operation not permitted
実際に私はこのコマンドを実行しました:
google-chrome-stable --headless --disable-gpu --no-sandbox http://www.google.com
問題を解決する--no-sandbox
でchromeを起動するだけです
この画像を使用して_alpeware/chrome-headless-trunk
はubuntuで私のために働いた!ヘッドレスchromeを起動するためにそのコンテナで使用されるコマンドは次のとおりです。
/usr/bin/google-chrome-unstable \
--disable-gpu --headless --no-sandbox \
--remote-debugging-address=0.0.0.0 \
--remote-debugging-port=9222 --user-data-dir=/data
次のコマンドを使用して、Ubuntuでコンテナーを起動しました。
docker run -it --rm -p=0.0.0.0:9222:9222 \
--name=chrome-headless \
-v /tmp/chromedata/:/data alpeware/chrome-headless-trunk
次にChromeを使用してlocalhost:9222
のデバッグポートに接続しました
いくつかの変更を加えれば、おそらくこれをJenkinsで実行できます!
追加
--cap-add SYS_ADMIN
docker runコマンド
例:
docker run --rm -p=81:81 -d -v $(pwd)/src:/opt/code --name chrome_test --cap-add=SYS_ADMIN test/chrome_iso
デフォルトのDockerfileを拡張します Selenium Chrome Node
FROM Selenium/standalone-chrome-debug:latest
MAINTAINER Serge Arbuzov <[email protected]>
USER root
### jenkins set up ###
RUN apt-get update && apt-get install -y openssh-server Sudo
RUN mkdir /var/run/sshd
RUN adduser jenkins
RUN echo jenkins:jenkins | chpasswd
RUN echo "jenkins ALL=(ALL) NOPASSWD:ALL">>/etc/sudoers
USER root
RUN echo export DISPLAY=":1.5" >> /etc/environment
ADD run.sh /run.sh
RUN chmod +x /run.sh
EXPOSE 22
CMD ["/run.sh"]
そして、私のrun.shは
#!/bin/bash
Xvfb :1 -screen 5 1024x768x8 &
/usr/sbin/sshd -D
だから私はJenkinsノードとしてデフォルトの画像を使用できます
この記事は、ドッカー内でヘッドレスChromeを使用してKarmaテストを実行するために必要なものです。
https://hackernoon.com/running-karma-tests-with-headless-chrome-inside-docker-ae4aceb06ed
基本的に、解決策は、--no-sandbox
フラグを指定してHeadless Chromeを実行することです。
答えはありませんが、DockerでヘッドレスChromeを正常に起動するコンテナーを知っています。セレンの1つ:
ChromeでWebアプリの自動テストに使用します
それが役に立てば幸い
自動テスト用にChromeとChromeをヘッドレスモードで実行するChromedriverを使用してDockerイメージを構築しました。 docker-compose.yml
セットアップでPhantomJSのドロップイン代替としてこれを使用しています。このイメージはAlpine Linuxに基づいており、Seleniumを必要としないか、含まないため、非常に小さいです。
ソース: https://github.com/retreatguru/headless-chromedriver
Docker Hub: https://hub.docker.com/r/retreatguru/headless-chromedriver