Jenkins+Python+Ubuntu+Docker に基づくインターフェイス/UI 自動テスト環境をデプロイする詳細なプロセス

Jenkins+Python+Ubuntu+Docker に基づくインターフェイス/UI 自動テスト環境をデプロイする詳細なプロセス

1 ジェンキンスとは何ですか?

  • Learning 公式 Web サイト: Jenkins 公式 Web サイトJenkins 中国語公式 Web サイト;
  • JenkinsCI&CDこれは、ソフトウェアの構築、テスト、展開などのさまざまなタスクを自動化するために使用されるオープンソース ソフトウェアです。
  • Javaこの言語で記述されているため、などの一般的なコンテナ内で実行することもTomcat、独立して実行することもできます。Docker

平たく言えば、たとえば、コンパイル、パッケージ化、アップロード、Tomcat へのデプロイのプロセスは Jenkins に引き継がれ、Jenkins は指定されたコード アドレス URL (コード ウェアハウス アドレス) を通じてコードを「ホスト サーバー」 (Jenkins インストール) にプルします。 ).location)、コンパイル、パッケージ化して、Tomcat コンテナーに公開します。

2 ジェンキンスの目標は何ですか?

  • ソフトウェア プロジェクトまたは自動テスト プロジェクトを継続的かつ自動的に構築します。
  • 問題を迅速に特定し、開発効率を向上させるのに役立ちます。
  • 自動テスト時のテスト効率の向上に役立ちます。

3 CI/CDとは何ですか?

3.1 CI の継続的インテグレーション

  • CI:Continuous integration継続的インテグレーション。
  • 開発者が新しいコードを提出したら、すぐにビルドして(単体)テストすることを強調します。テスト結果に基づいて、新しいコードと元のコードが正しく統合されているかどうかを判断できます。
  • チームは、新機能、コードの改善、バグ修正ごとに自動化されたテスト ケースを作成する必要があります。
  • コードの送信を監視し、新しい送信ごとに自動テストを実行できる継続的統合サーバーが必要です。
  • できるだけ早くコードを送信してください。
  • 次の写真はインターネットから取得したもので、理解を助けるものであり、参照のみを目的としています。
    ここに画像の説明を挿入します
  • アドバンテージ:

① 本番環境での問題を回避するために回帰テストの結果を早期に取得できる;
② リリースとコンパイルが容易になる;
③ 作業上の問題の切り替えが減り、ビルド失敗のニュースがすぐに得られ、問題が迅速に解決される;
④ 時間を含むテストのコストが大幅に削減される人件費など;
⑤ QA チームの時間を節約し、品質文化の構築に集中します。

3.2 CD の継続的展開

  • CD:continuous deployment継続的な展開。

  • 自動化されたビルド、テスト、展開サイクルを通じて高品質の製品を迅速に提供します。

  • チームは完全なテストのコンセプトを持っている必要があります。

  • 単体テストは特に重要です。

  • ドキュメントと展開の頻度は一貫している必要があります。

  • アドバンテージ:

①リリース頻度が早い、
②リスクが軽減され、問題がすぐに解決できる、
③顧客が製品の納品結果をすぐに確認できる。

3.3 CD の継続的配信

  • CD:Continuous Delivery継続的デリバリー。
  • ソフトウェア製品の制作プロセスを短いサイクルで完了させることができ、ソフトウェアをいつでもリリースできる状態で安定して継続的に維持することができます。
  • 継続的統合に基づいて、統合されたコードは実際の動作環境 (運用環境に似た環境) にデプロイされます。
  • 目標は、ソフトウェアのビルド、テスト、リリースをより迅速かつ頻繁に行うことです。
  • 強力な継続的インテグレーション コンポーネントと、コードの要件を満たす十分なテスト項目が必要です。
  • 導入は自動化する必要があります。
  • 次の写真はインターネットからのものであり、参照のみを目的としています。
    ここに画像の説明を挿入します

4 Ubuntu環境

4.1 環境要件

  • 私の環境は次のとおりです。

Windows 10 オペレーティング システムに仮想マシン Hyper-V をインストールし、次に仮想マシンに Ubuntu オペレーティング システムをインストールして、Ubuntu で自動テストを実行します。

# 我们的环境是:
1、Linux服务器一台(我的是Ubuntu),在虚拟机中的,哈哈
2、在服务器上正确安装docker
3、拉取jenkins镜像:jenkins/jenkins:lts
4、拉取python3镜像:docker pull python:3.7

4.2 実装のアイデア

1. Linux サーバーに docker をインストールする;
2. jenkins コンテナーを作成する;
3. 自動化プロジェクトの依存関係パッケージに基づいて Python イメージを構築する (自動化された Python 環境を構築する);
4. 新しい Python コンテナーを実行し、プルされた自動化プロジェクトを実行するウェアハウスからの Jenkins の実行
5 、実行完了後にコンテナを削除します。

5 Ubuntu に Docker をインストールする

6 Jenkinsのインストール

6.1 Jenkins イメージをプルする

  • dockerプルイメージを使用しますJenkins
docker pull jenkins/jenkins:lts

ここに画像の説明を挿入します
ここに画像の説明を挿入します

6.2 Jenkinsの起動

docker run 
-dit 
--name=jenkins
-p 8080:8080 
-u=root 
-v /var/run/docker.sock:/var/run/docker.sock 
-v /usr/bin/docker:/usr/bin/docker 
jenkins/jenkins:lts
  • パラメータの説明:
参数说明
-i:表示运行容器
-t:表示容器启动后会进入其命令行
-d:守护式方式创建容器在后台运行
--name:容器名称
-p 8080:8080:端口映射,宿主机端口:jenkins容器端口
-u=root:指定容器用户为root用户
-v /var/run/docker.sock:/var/run/docker.sock:将docker.sock映射到jenkins容器中
docker.sock文件是docker client与docker daemon通讯的文件
-v /usr/bin/docker:/usr/bin/docker:将宿主机docker客户端映射到jenkins容器中

ここに画像の説明を挿入します

6.3 jenkins 権限の変更

  • dockerインストールが失敗した場合jenkins
  • ログを表示すると、権限が不十分であることが示されます。
docker logs jenkin
  • 次に、/var/jenkins_home 上記のディレクトリの権限を変更します。
chown -R 1000 /var/jenkins_home 
  • または、コンテナーを実行するときに、root権限を付与して実行し、 を追加します-u=root

  • ブラウザにアドレス「8080」を入力するだけです。
    ここに画像の説明を挿入します

7 Jenkins の初期構成

7.1 コンテナログの表示

docker logs jenkins

ここに画像の説明を挿入します

  • 上記はjenkinsパスワードです。コピーしてロックを解除してください。
    ここに画像の説明を挿入します

7.2 プラグインの選択

  • 次のページを入力してください。
    ここに画像の説明を挿入します
  • プラグインは次のようにインストールされます。エラーが報告された場合は、「再試行」をクリックしてください。
    ここに画像の説明を挿入します

7.3 管理者ユーザーの作成

  • プラグインをインストールすると、次のインターフェイスが表示されます。
    ここに画像の説明を挿入します
  • 入力したユーザー名とパスワードを覚えておいて、保存して続行します。
    ここに画像の説明を挿入します
  • 保存を続けて次のステップに進みます。
    ここに画像の説明を挿入します

7.4 プラグインのインストール

7.4.1 git プラグインのインストール

  • 以前プラグインをインストールしたとき、デフォルトのプラグインのインストールを選択したため、gitプラグインはすでにインストールされています。次の図から確認できます。
    ここに画像の説明を挿入します

  • [ install plugins] をクリックして、インストールされているプラ​​グインを表示します。
    ここに画像の説明を挿入します

  • [ available plugins] をクリックして必要なプラグインのダウンロードを選択します。ここでインストールしますgitee
    ここに画像の説明を挿入します

7.4.2 Dockerプラグインのインストール

  • 次のように検索しdockerてインストールするだけです。
    ここに画像の説明を挿入します

  • インストール後は次のようになります。
    ここに画像の説明を挿入します

7.4.3 HTML Publisher プラグインのインストール

  • 次のように検索します。
    ここに画像の説明を挿入します

7.4.4 電子メール拡張プラグインのインストール

  • 次のように:
    ここに画像の説明を挿入します

7.4.5 JDK、Maven、SSH プラグイン (オプション)

  • インストールJDK:
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します
  • アカウント番号とパスワードを入力してください:
    ここに画像の説明を挿入します
  • インストールmaven:
    ここに画像の説明を挿入します
  • 構成SSH:
    ここに画像の説明を挿入します
  • ホストとポートを設定し、[追加]をクリックします。
    ここに画像の説明を挿入します
  • 追加時に応答がない場合は、右上隅にあるユーザー名をクリックして追加します。
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します
  • 自分で試してみて大丈夫かどうかを確認してください。

上記の手順が完了したら、インストールの完了後にjenkinsコンテナを再起動します。

docker restart jenkins

ここに画像の説明を挿入します

8 Jenkinsの詳細設定

8.1 新しいタスクの作成

  • 再度ログインしjenkinsNew Item画像をクリックしてください:

ここに画像の説明を挿入します

  • プロジェクト名を入力し、独自のプロジェクトに応じて構築方法を選択します。ここでは最初の方法を選択します (自由形式のプロジェクトを作成します)。
    ここに画像の説明を挿入します

8.2 設定タスク

8.2.1 ビルド記録保持ルールの構成

  • Generalオプションで以下を設定します。
    ここに画像の説明を挿入します

8.2.2 Git ウェアハウスの構成

  • git ウェアハウスのアドレス、アカウント、パスワードを入力します。
    ここに画像の説明を挿入します

8.2.3 ビルド後の操作の構成

  • ビルド後の操作モジュールを追加し、linux以下を選択しますshell
    ここに画像の説明を挿入します

  • 実行中のスクリプトを構成します。
    ここに画像の説明を挿入します

  • 設定jenkinsに示されているテスト レポートのパス:
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します

  • 電子メールトリガーを構成します。
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します

  • 上記の手順を完了したら、保存します。

8.3 電子メールの設定

  • jenkins管理 - システム構成 - Jenkins Locationシステム管理者の電子メール アドレスに、対応する電子メール アドレスを入力します。
    ここに画像の説明を挿入します
  • jenkins[管理] - [システム構成] -に対応するサーバー関連のコンテンツをExtended E-mail Notification入力し、[詳細] をクリックして、対応する電子メール アドレスとログイン認証コードを入力して、次のチェックボックスをオンにしますsmtpsmtpssl

ここに画像の説明を挿入します
ここに画像の説明を挿入します

  • 電子メール トリガーを構成します: jenkins[管理-システム構成-] Default Triggers。デフォルトでは、チェックに失敗した場合にのみ送信されます。常に送信するように構成できます (または必要に応じてチェックします)。その後、メールは毎回送信されます。プロジェクトが実行されます。
    ここに画像の説明を挿入します

9 Pythonイメージのビルド

9.1 依存関係パッケージのエクスポート

  • プロジェクト実行環境を使用して Python イメージを構築します。
  • Pythonプロジェクトの依存関係パッケージをローカル実行環境のファイルにエクスポートしますrequirements.txt
pip freeze > requirements.txt
  • 私のものは次のとおりです。
adbutils==0.11.0
alembic==1.6.5
allure-pytest==2.8.12
allure-python-commons==2.8.12
altgraph==0.17.2
amqp==5.0.6
anyjson==0.3.3
apipkg==1.5
apkutils2==1.0.0
Appium-Python-Client==0.50
asgiref==3.3.1
atomicwrites==1.4.0
attrs==20.3.0
BeautifulReport==0.1.3
beautifulsoup4==4.9.3
billiard==3.6.4.0
blinker==1.4
cached-property==1.5.2
celery==5.0.5
certifi==2020.12.5
cffi==1.14.5
chardet==3.0.4
cigam==0.0.3
click==7.1.2
click-didyoumean==0.0.3
click-plugins==1.1.1
click-repl==0.2.0
colorama==0.4.4
comtypes==1.1.8
configparser==5.0.2
coreapi==2.3.3
coreschema==0.0.4
coverage==5.5
cryptography==3.2.1
cycler==0.10.0
DataRecorder==3.2.2
ddt==1.4.2
decorator==5.0.9
defusedxml==0.7.1
Deprecated==1.2.12
deprecation==2.1.0
diff-match-patch==20200713
Django==2.2.16
django-bootstrap==0.2.4
django-bootstrap3==15.0.0
django-bootstrap4==2.3.1
django-celery==3.3.1
django-celery-beat==2.2.0
django-ckeditor==6.1.0
django-cors-headers==3.7.0
django-crispy-forms==1.12.0
django-crontab==0.7.1
django-filter==2.4.0
django-haystack==3.0
django-import-export==2.5.0
django-js-asset==1.2.2
django-mdeditor==0.1.18
django-ranged-response==0.2.0
django-redis==4.12.1
django-rest-framework-mongoengine==3.4.1
django-simple-captcha==0.5.13
django-simpleui==2021.6.2
django-timezone-field==4.1.2
django-tinymce==3.3.0
djangorestframework==3.12.2
djangorestframework-jwt==1.11.0
dnspython==1.16.0
docopt==0.6.2
docutils==0.17.1
dogtail==0.9.10
dominate==2.6.0
DownloadKit==0.5.0
drf-extensions==0.7.0
drf-haystack==1.8.10
DrissionPage==3.1.1
easygui==0.98.2
elasticsearch==2.4.1
et-xmlfile==1.0.1
eventlet==0.30.2
execnet==1.8.0
facebook-wda==1.4.3
filelock==3.0.12
Flask==1.1.2
Flask-Bootstrap==3.3.7.0
Flask-Excel==0.0.7
Flask-Login==0.5.0
Flask-Mail==0.9.1
Flask-Migrate==2.0.0
Flask-Moment==1.0.1
Flask-Script==2.0.5
Flask-SQLAlchemy==2.4.4
FlowViewer==0.2.2
freetype-py==2.2.0
fsspec==2022.8.2
future==0.18.2
greenlet==1.1.0
HTMLReport==2.3.1
idna==2.10
importlib-metadata==2.1.1
iniconfig==1.1.1
itsdangerous==1.1.0
itypes==1.2.0
jdcal==1.4.1
Jinja2==2.11.2
jsonpath==0.82
kiwisolver==1.3.1
kombu==5.1.0
lml==0.1.0
loguru==0.7.0
logzero==1.7.0
lxml==4.6.3
Mako==1.1.4
Markdown==3.3.4
MarkupPy==1.14
MarkupSafe==1.1.1
matplotlib==3.3.3
mock==3.0.5
mongoengine==0.22.1
more-itertools==8.7.0
mpmath==1.2.1
mutagen==1.44.0
mysql-connector==2.2.9
mysqlclient==2.0.3
numpy @ file:///C:/Users/Administrator/Downloads/numpy-1.21.0-cp37-cp37m-win_amd64.whl
odfpy==1.4.1
opencv-python==4.7.0.72
openpyxl==3.0.5
packaging==20.8
pandas==1.1.5
ParamUnittest==0.2
pefile==2021.9.3
Pillow==8.3.1
pipreqs==0.4.11
pluggy==0.13.1
progress==1.6
prompt-toolkit==3.0.19
psutil==5.8.0
py==1.10.0
pyasn1==0.4.8
pycparser==2.20
pycryptodomex==3.9.4
pyelftools==0.27
pyexcel==0.6.6
pyexcel-io==0.6.4
pyexcel-webio==0.1.4
pyexcel-xlsx==0.6.0
pygame==2.0.1
Pygments==2.9.0
pyinstaller==4.10
pyinstaller-hooks-contrib==2022.2
PyJWT==1.7.1
pymongo==3.11.3
PyMySQL==0.10.1
PyOpenGL==3.1.5
pyOpenSSL==19.1.0
pyparsing==2.4.7
PyQt5==5.15.4
pyqt5-plugins==5.15.4.2.2
PyQt5-Qt5==5.15.2
PyQt5-sip==12.11.0
pyqt5-tools==5.15.4.3.2
pytest==6.2.4
pytest-assume==2.4.3
pytest-cov==2.8.1
pytest-forked==1.1.3
pytest-html==2.0.1
pytest-ignore-flaky==2.0.0
pytest-metadata==1.8.0
pytest-ordering==0.6
pytest-repeat==0.9.1
pytest-rerunfailures==10.3
pytest-xdist==1.31.0
python-alipay-sdk==3.0.1
python-crontab==2.5.1
python-dateutil==2.8.1
python-dotenv==0.21.0
python-editor==1.0.4
pythonnet==2.5.1
pytz==2021.1
pywebview==3.4
pywin32==300
pywin32-ctypes==0.2.0
pywinauto==0.6.8
PyYAML==6.0
QQLoginTool==0.3.0
qt5-applications==5.15.2.2.2
qt5-tools==5.15.2.1.2
redis==3.5.3
requests==2.24.0
requests-file==1.5.1
retry==0.9.2
rsa==4.8
ruamel.yaml==0.17.21
ruamel.yaml.clib==0.2.7
scipy @ file:///C:/Users/Administrator/Downloads/scipy-1.7.0-cp37-cp37m-win_amd64.whl
selenium==3.141.0
Serializer==0.2.1
simplejson==3.17.2
six==1.15.0
sklearn==0.0.post5
soupsieve==2.0.1
SQLAlchemy==1.3.20
sqlparse==0.4.1
sympy==1.7.1
tablib==3.0.0
texttable==1.6.3
tldextract==3.4.0
toml==0.10.2
tornado==6.1
turtle==0.0.2
Twisted==20.3.0
ua-parser==0.10.0
uiautomation==2.0.10
uiautomator2==2.16.7
uritemplate==3.0.1
urllib3==1.25.11
user-agents==2.2.0
vine==5.0.0
visitor==0.1.3
wcwidth==0.2.5
websocket-client==1.5.0
weditor==0.6.4
Werkzeug==1.0.1
whichcraft==0.6.1
win32-setctime==1.1.0
WMI==1.5.1
wordninja==2.0.0
wrapt==1.12.1
wxgl==0.7.2
wxPython==4.1.1
xlrd==1.2.0
xlrd2==1.2.6
XlsxWriter==3.0.2
xlutils==2.0.0
xlwings==0.21.4
xlwt==1.3.0
xmltodict==0.12.0
yarg==0.1.9
zipfile37==0.1.3
zipp==1.2.0
  • 実際には、それほど時間はかかりません。プロジェクトのニーズによって異なります。プロジェクトのルート ディレクトリに入り、次のコマンドを使用してプロジェクトの依存関係パッケージをエクスポートすることもできます。
pipreqs . --encoding=utf8 --force

9.2 アプリディレクトリの作成

  • ホスト マシン (インストールdockerマシン) 上に新しいディレクトリを作成し (私のディレクトリはホーム ディレクトリに作成されましたapp)、requirements.txtそこにファイルをコピーします。
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します

9.3 Dockerfileの作成

  • appディレクトリにファイルを作成します(Dockerfileファイル名はDockerfile接尾辞なしで でなければなりません)
    Dockerfile。その内容と説明は次のとおりです。
FROM python:3.7  #基于python:3.7这个基础镜像镜像构建镜像 
WORKDIR /home/noamanelson/app   #切换工作空间目录 
ADD ./requirements.txt /home/noamanelson/app #将python项目依赖包文件添加到镜像 
RUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple #安装依赖包 
CMD ["python3", "main.py"] #设置容器执行后自动执行的命令,这里start_all.py是我们自动化框架的执行入口文件

9.4 イメージビルドコマンドの実行

  • appディレクトリ内でイメージビルドコマンドを実行します(この手順を入れることもできイメージをビルドするbuild.shたびに再ビルドされますが、速度が遅くなりますので、環境が安定している場合は事前にビルドしておくことをお勧めします) )jenkins
docker build -t python3.7:autopy .

-t: イメージ名
ドット (.): ドットは、Dockerfile ファイルが配置されているディレクトリを示します。私は今アプリ ディレクトリにいます。ドットは現在のディレクトリを示します。

  • ビルドが成功すると、新しいイメージが表示されます。
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します

10 build.sh デザイン

  • build.sh内容は以下の通りで、コメントは改行で記述してください。
echo "运行容器python执行自动化"  
#输出日志
#-w=$WORKSPACE:指定workspace
#--volumes-from=jenkins_save01:将jenkins容器中的workspace映射到python容器中,此时jenkins中git拉下来的代码就会被映射进去
docker run --rm -w=$WORKSPACE --volumes-from=jenkins python3.7:autopy
echo "python执行自动化执行成功"
  • build.shプロジェクトのルート ディレクトリにコピーします。
    ここに画像の説明を挿入します
  • Gitコードをウェアハウスに送信します。
 git add .
 git commit -am'update'
 git push 

11 ビルドタスク

  • 以前にタスクを作成しました。
    ここに画像の説明を挿入します
  • 今すぐ構築:
    ここに画像の説明を挿入します
  • ビルド履歴:
    ここに画像の説明を挿入します
  • コンソール出力:
    ここに画像の説明を挿入します
  • スタイルが無効になっているため、テスト レポートを表示するときにスタイルは表示されずJenkinsCSS手動で解決する必要があります。
    ここに画像の説明を挿入します

12 レポートスタイルの解決

ここに画像の説明を挿入します

  • 次のコードを記述します。
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","")

ここに画像の説明を挿入します

  • 実行後の結果が空の場合は、問題がないことを意味します。
  • 再構築して、スタイル付きのテスト レポートを表示します。
    ここに画像の説明を挿入します
  • 上記の方法は一時的なものであり、Jenkins の再起動後に再度設定する必要があるため、Groovy プラグインをインストールすると、この問題を永久に解決できます。
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します

13 メールをチェックする

  • 写真を見ると、電子メールでも問題ないようです。

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/NoamaNelson/article/details/132037865