Jenkinsでdotnet coreの自動化を教えてあげる
10812 ワード
Jenkinsセクション
まず、Jenkinsが必要です.リンクをダウンロードします.https://jenkins.io/download/
私达は公式サイトの教程をインストールしてjenkinsをインストールして、教程をインストールして略....
うん?ハンドルって言ったでしょ?あなたの妹の
はい、私たちはやはり手のチュートリアルに来ました.
まずJDK 8をインストールします
インストール元を追加してから直接apt-get installでいいです.次はubuntuのインストールコマンドです.他のシステムは自分で遊べばいいです.
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
ダウンロードwar+起動Jenkins
ダウンロードリンク:http://mirrors.jenkins.io/war-stable/
この中で最新のダウンロードを探して、私の今の最新のは2.107.2であるべきです
ダウンロードしたwarの後、現在のディレクトリにjenkins-homeフォルダを作成し、JENKINS_を設定します.HOME環境変数はjenkins-home(設定しなくても良い、デフォルトは~/.jenkins)
wget http://mirrors.jenkins.io/war-stable/2.107.2/jenkins.war;
mkdir ~/jenkins-home;
export JENKINS_HOME=~/jenkins-home;
tmux;
java -jar jenkins.war
端末が終了してからjenkinsが死なないように、バックグラウンドプロセスを開いてjenkinsを走ることをお勧めします.
だから私は先にtmuxを開けてからjava-jar jenkinsを走ります.war.
次の図を示します.
次にinitialAdminPasswordの出力に注意してください
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
XXXXXXXXXXXXXX
This may also be found at: /root/jenkins-home/secrets/initialAdminPassword
この時点で現在のホストにアクセスする8080ポートにはjenkinsが起動していることがわかり、しばらく待つとjenkinsログインページが表示されます.
このとき上のXXXXXXXXXXXXXXXXXXXXをコピーし、入力クリックしてjenkinsアカウントのパスワード情報を配置し続けるなどします.
次にデフォルトのプラグインをインストールする.
ここでも数分待たなければならないと思います.機械の性能とネットワークの速度を見てください.
インストールが完了するとログインアカウントのパスワードが設定され、インストールプロンプトの設定が完了します.
最後にjenkinsページに入るとこうなります.
今ではjenkinsを走り出しました.よく使われるプラグインもあります.
私たちはまずdotnet core dockerコンパイル発表に関するものを作ってから戻ってjenkinsの任務を続けます.
dotnet core dockerパッケージ
プロジェクトディレクトリの下にDockerfileファイルを新規作成します.内容は次のとおりです.
FROM microsoft/aspnetcore-build:2.0 AS build-env
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out
# build runtime image
FROM microsoft/aspnetcore:2.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", " dotnet core .dll"]
このDockerfileは基本的に現在のディレクトリのファイルをaspnetcore-buildミラーにコピーし、中でコンパイルしてからaspnetcore:2.0ミラーに公開します.
最後にdotnet coreプログラムを実行することを指定します
ソース:https://github.com/DaoCloud/dotnet-docker-samples
docker build+runスクリプト(jenkinsでスクリプトをコンパイルする必要はありません)
HouseCrawler.Webを例にとると、
#!/bin/sh
image_version=`date +%Y%m%d%H%M`;
echo $image_version;
cd ~/code/58HouseSearch/HouseCrawler.Core/HouseCrawler.Web;
git pull --rebase origin master;
docker stop house-web;
docker rm house-web;
docker build -t house-web:$image_version .;
docker images;
docker run -p 8080:80 -v ~/docker-data/house-web/appsettings.json:/app/appsettings.json -v ~/docker-data/house-web/NLogFile/:/app/NLogFile --restart=always --name house-web -d house-web:$image_version;
docker logs house-web;
上のbuild+runスクリプトを通じて、dotnet coreプログラムをコンパイルし、docker imagesにパッケージ化し、そのまま走り出しました.
しかし、私たちが望んでいるのは自動化されたコンパイル配置であり、jenkinsを走らせたので...
Jenkins job構成
新しいジョブ
jenkinsのトップページを開き、左側で「新規タスク」(newJob)を選択します.以下の図です.
新しいjobに名前を付けて、図のように「フリースタイルのソフトウェアプロジェクトを構築する」を選択します.
ソースウェアハウスの追加
確認後、Job構成ページに入り、ソース管理でgitを選択します.図のように:
git倉庫に権限が必要な場合は権限を配置する必要がありますが、私は一般的にjenkinsホストの公開鍵をgit倉庫に直接追加するので、ここでは直接'From the Jenkins master~/に配置します.ssh’は、アカウントのパスワードでアクセスするなどしてもよい.
"Branch Specifier(blank for‘any’)"デフォルトmasterブランチは、自分のニーズに応じて異なるブランチを記入します.
トリガの構築と環境の構築は先にスキップして、私たちは気にしないで、後でします.
ビルド
「構築手順の追加」をクリックし、「Execute shell」を選択すると、次の図が表示されます.
前のスクリプトを覚えていますか?ソースコードのパスを修正して入れます.
# , jenkins-home workspace
cd ~jenkins-home/workspace/ /Dockerfile ;
image_version=`date +%Y%m%d%H%M`;
echo $image_version;
# docker container
docker stop house-web;
# container
docker rm house-web;
# build tag
docker build -t house-web:$image_version .;
docker images;
# build
docker run -p 8080:80 -v ~/docker-data/house-web/appsettings.json:/app/appsettings.json -v ~/docker-data/house-web/NLogFile/:/app/NLogFile --restart=always --name house-web -d house-web:$image_version;
docker logs house-web;
jenkinsホストとプログラム実行ホストが1台のマシンにない場合は、上のスクリプトを実行ホストに直接置いてstart_と命名することをお勧めします.XXX.sh.
上の命令は直接
ssh username@ IP '~/start_XXX.sh'
ps:jenkinsホストでssh無ログインを構成することを覚えています
トリガの構築
トリガを構築することは、構築タスクをいつトリガーするかを選択することであり、いくつかの方法があります.
ここで4つ目の案を選び、Generic Webhook Triggerプラグインをインストールします.次に、なぜこのようにしたのかをすぐに教えてあげます.
Generic Webhook Triggerプラグインは「システム管理-管理プラグイン-オプションプラグイン」の中で直接「Generic Webhook Trigger」のインストールを検索すればよい.
前の構築手順のスクリプトから分かるように、jenkinsホスト上でdocker buildを使用するか、パブリッシュターゲットホスト上でbuildを使用するか、
buildプロセスが遅い、また、ミラーがホストorターゲットホスト上に発生し、docker imagesも管理されていない.
何かいい方法がありますか.うん、あるね.アリクラウドコンテナミラーサービスを直接使用してミラーを構築
アリクラウド-コンテナミラーリングサービスの使用
まずアリクラウドにログインし、コンテナミラーサービスに入ります.アドレスはhttps://cr.console.aliyun.com/
初めて入るにはネーミングスペースを作成する必要があります.一般的には会社名やあなたの名前で終わります.
次に「ミラーウェアハウスの作成」を選択する.
地域選択-名前空間選択-倉庫名(ミラー名)を記入-要約を記入-コードソースを設定(GitHub/アリクラウドcode/Bitbucket/プライベートGitlab/ローカルGitなどをサポート)
構築設定選択「コード変更時にミラーを自動的に構築」を選択し、構築ブランチを目的のブランチとして選択し、Dockerfileのソースコードへのパスを入力して保存します.
次に管理プラットフォームに入ってみましょう.
「すぐに構築」をクリックし、ログを表示します.
この時、私たちはdocker pull registry-internalを使います.cn-hangzhou.aliyuncs.com/あなたのネーミングスペース/あなたのミラー名はこのアリクラウドbuildの成功したミラーに引っ張ることができます.
ミラーbuildの問題が解決しました.では、どのようにしてミラーを実行ホストに自動的にパブリッシュしますか?
この時webhookがまた出てきた.
Jenkins webhookトリガ構成
アリクラウドミラー構築サービスの中には、webhookのものがあります.公式紹介はここです.アリクラウド-webhook管理
ここに私たちのwebhookアドレスを記入する必要があります.前に私が無端に選んだ4つ目の案を覚えていますか.それからインストールしたGeneric Webhook Triggerプラグインについてきてください.
私たちはこの商品でwebhook APIを提供しています.
プロセスを整理します.
git倉庫コードの変化->アリクラウドコンテナ構築サービスの起動->ミラーを構築した後にwebhookをトリガー->jenkinsアリクラウドのwebhookを受信した後にjobをトリガーして配置スクリプトを実行->配置スクリプトアリクラウドミラーrunを使用する->完了します.
引き続きGeneric Webhook Triggerを構成します.
Generic Webhook TriggerでサポートされているネーミングトリガURL形式は次のとおりです.
http://jenkins :token @jenkins IP:8080/generic-webhook-trigger/invoke?token=
Jenkinsログイン名とtokenは「アカウント-設定-API Token-Show API Token...」に表示されますので、見つけたら記入してください.
最後のtokenパラメータは、実は「構築トリガ」の「リモート構築をトリガ」のパラメータであり、job名の使用を推奨する.ここの構成は大体こうです.
最後にjenkinsのグローバルセキュリティ設定で「Prevent Cross Site Request Forgery exploits(Prevent Cross Site Request Forgery exploits)」オプションをオフにする必要があります.これにより、アリクラウドのwebhookが実現します.
手動でブラウザにアクセスhttp://jenkinsログインユーザー名:token認証コード@jenkins IP:8080/generic-webhook-trigger/invoke?token=トリガ名対応jenkins Jobが正常に実行できる場合は、プロセス全体がokであることを示します.
最後に、「アリクラウド-コンテナミラーサービス-対応ミラーウェアハウス-webhook-レコードの追加」に戻ります.
PS:webhook名称は特殊文字or"-"などを持たないでください.そうしないと、ずっと保存に失敗して、名前が合法ではないので、午後30分もこの穴に穴があいています.
ここまで来て、私たちは基本的に大功を成し遂げた.
最後にjenkinsのスクリプトを変更して、ローカルbuild dockerではなく、アリクラウドミラーサービスで構築されたミラーを直接持って走ればいいです.
# docker container
docker stop house-web;
# container
docker rm house-web;
docker pull ;
# build
docker run --restart=always --name contianer ;