Skip to content

Latest commit

 

History

History
145 lines (114 loc) · 6.08 KB

20230201-ws.md

File metadata and controls

145 lines (114 loc) · 6.08 KB

20230201ワークショップ

概要

overview

事前準備

Jenkinsの構築 (管理者向け)

ワークショップ管理者向けのJenkins構築設定. また、利用者分のPodで利用するPVCの事前作成が必要。

$ oc new-project app-devops
$ oc new-app jenkins-persistent --param ENABLE_OAUTH=true --param MEMORY_LIMIT=8Gi --param VOLUME_CAPACITY=20Gi --param DISABLE_ADMINISTRATIVE_MONITORS=true
...
--> Success
    Access your application via route 'jenkins-app-devops.apps.na311.openshift.opentlc.com'
    Run 'oc status' to view your app.


$ for i in `seq 1 10`
 do
   oc new-project user$i-development
   oc policy add-role-to-user edit system:serviceaccount:app-devops:jenkins -n user$i-development
   oc policy add-role-to-user edit user$i -n app-devops
 done

$ oc process -f openshift/custom-jenkins-agent.yaml | oc apply -n app-devops -f -
buildconfig.build.openshift.io/custom-jenkins-agent-maven created
imagestream.image.openshift.io/custom-jenkins-agent-maven created

$ oc start-build custom-jenkins-agent-maven -n app-devops

レポジトリのフォーク

Githubでこのレポジトリをフォークし、自分のアカウントにレポジトリをコピーしましょう。 また1箇所変更が必要です。Jenkinsfileの13行目を自分のプロジェクト名に変更しましょう。

$ vim Jenkinsfile
    deploy_project = "userX-development"

Jenkinsへのアクセス

Jenkinsへアクセスできるか確認しましょう。

Jenkins Job作成

アプリケーションのパイプラインを実行するためにJenkins Itemを作成する。

  1. "New Item"を選択
  2. Itemの種類は"Pipeline"を選択し、userX-jobの名前をつける。わかりやすいようにユーザ名を先頭に付けてください。
  3. "Build Triggers"項目で"Generic Webhook Trigger"にチェックを付け下記を設定する
    • token: 任意の文字列(他の人とかぶらないようにユーザ名を含めてください。)
  4. "Pipeline"の項目で実行するパイプライン定義を設定する
    • "pipeline script from SCM"を選択
    • SCMに"Git"を選択
    • Repository URLにはフォークした自分のレポジトリのURLを入力
    • Branches to buildは*/mainを入力
    • これでSave

GitレポジトリへWebhook設定

お使いのGitレポジトリへWebhookの設定を行う。 Generic Webhook Triggerの場合下記のURLでトリガーできる。

https://jenkins-app-devops.apps.cluster-wp8k2.wp8k2.sandbox430.opentlc.com/generic-webhook-trigger/invoke?token=<your-token>

パイプライン実行

ここまでできたらパイプラインを実行すれば、アプリケーションがデプロイされる。 アプリケーションの変更にも自動でデプロイできる状態だ。 レポジトリに任意の変更を加えてみよう。

jenkins-stage-view

動作確認

パイプラインが正常に終了すれば、みなさんの専用の環境でアプリケーションが起動している状態になります。
初回は、データベースがないため、アプリケーションの起動に一度失敗するが、データベースが起動後にアプリケーションが自動的に起動するはずです。

$ oc get pod -n userX-development
NAME                              READY   STATUS      RESTARTS   AGE
pipeline-practice-java-1-build    0/1     Completed   0          53m
pipeline-practice-java-1-deploy   0/1     Completed   0          50m
pipeline-practice-java-1-9cgtf    1/1     Running     0          50m
postgresql-1-deploy               0/1     Completed   0          50m
postgresql-1-hook-post            0/1     Completed   0          50m
postgresql-1-kk5nv                1/1     Running     0          50m

最後は起動したアプリケーションにブラウザから接続して確認してみよう。 URLはhttp://xxxxxxxxxxxx/hello or http://xxxxxxxxxxxx/freelancers

URLは下記から確認できる。

$ oc get route

なにが起きているのか解説

ここまでできたところで、一度なにが行われたのか解説します。

  • Jenkinsfile
    • test
    • application build
    • deploy
  • Jenkins agent

アプリケーションに変更を加える

テストを落としてみる

現状のサンプルアプリケーションでは/hello"hello": "world"を含むAPIを返すことがテストとして書かれています。 src/main/java/com/redhat/freelancer4j/freelancer/rest/HealthCheckEndpoint.javaの34行目の map.put("hello", "world"); を任意の文字列に変更してパイプラインを実行させてみよう(Webhookの設定をしていれば、自動的にパイプラインが実行されるはずです)。 パイプラインの結果がどうなったか確認してみましょう。

    @GET
    @Path("/hello")
    @Produces(MediaType.APPLICATION_JSON)
    public Map<String, String> getHello() {
        HashMap<String, String> map = new HashMap<>();
        map.put("hello", "world!!!!!");
        map.put("foo", "bar");
        return map;
    }

テストを変更してデプロイする

上で落ちてしまったパイプラインを修正するため、src/test/java/com/redhat/freelancer4j/freelancer/rest/HealtCheckEndpointTest.javaのテストを変更して変更をデプロイしてみます。デプロイ成功後、/hello に接続して、意図したようにアプリケーションが変更されていることを確認しましょう。

    @Test
    public void invokeHello() throws Exception {
        given().get("/hello").then().assertThat().statusCode(200).body("hello", equalTo("world!!!!!"));
    }

sonarqube連携

Sonarqubeドキュメントを参照

sonarqubeのURL: https://sonarqube-sonarqube-app-devops.apps.cluster-wp8k2.wp8k2.sandbox430.opentlc.com/