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無ログインを構成することを覚えています

トリガの構築


トリガを構築することは、構築タスクをいつトリガーするかを選択することであり、いくつかの方法があります.
  • Build periodicallyを使用して、タイミングorはNを隔てて一度コードを引いて
  • を構築する.
  • Poll SCM:ソースコードの変更(SCMソフトウェアのバージョン番号による)をタイミングチェックし、変更があれば構築
  • を実行する.
  • GitHub hook trigger for GITScm pollingまたは他のGitプラットフォームが提供するwebhook
  • Generic Webhook Triggerプラグインをインストール後、他のプラットフォームのwebhookを使用して構築タスクをトリガーする.

  • ここで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            ;
    

    私たちが何をしたかまとめてみましょう

  • 構築jenkins
  • Dockerfileファイルを作成し、パブリケーションを直接コンパイル+dockerミラーにパッケージ化+デプロイメントスクリプト
  • アリクラウドコンテナ構築サービスを使用してdockerミラーを構築し、構築に成功した後、webhookを使用してjenkins
  • に通知する
  • jenkins webhookトリガを構成し、配置スクリプト
  • をトリガーする
  • 他の項目/言語も基本的に同じ操作であり、違いはDockerfileの作成
  • にすぎない.
  • 完事...