Dev Toolsメニューは、開発プロセスに必要なOpen Sourceツールを提供します。提供されるツールには、ジオメトリ管理ツールであるGitea、ソフトウェアBinary管理、およびProxy用のSonatype Nexus、Image保存用のHarborがあります。このページでは、各ツールの簡単な使い方を学びます。
Source Repository - Gitea
Gitソリューションは、大規模に構築されたソリューションとクラウドソリューションに分けられます。代表的なクラウドソリューションとしてGithubがあります。クラウドソリューションを使用すると、パブリックネットワークであるため、セキュリティ上の問題やコストの問題が発生する可能性があります。 Modernization Platform は、構築型ソリューションである Gitea を基本として提供します。 Gitea のアカウントと権限は Modernization Platform のアカウント、権限と連動します。
Giteaに接続する
コンソール画面のプロジェクトメニューDev Tools> Sourceからアクセスできます。
Giteaのアカウントは、コンソールにログインしたアカウントと連動します。初回接続時にパスワードを入力することになり、このとき入力するパスワードを通じてGitにプル、プッシュなどの命令を実行できます。
ユーザーに権限を付与する
プロジェクトメンバーにGiteaの権限を付与することは、プロジェクトアドミンまたはユーザー管理者の役割を持つユーザーのみが可能です。
コンソール画面の[プロジェクト]メニュー[Administrator]> [Members]に移動します。権限を付与するユーザー ID または edit ボタンをクリックして詳細画面に移動します。
ユーザーにロールを直接付与するか、ロールを持つグループにユーザーを追加して権限を付与できます。ユーザーに複数の権限が同時に付与されている場合は、最も高い権限が適用されます。
リポジトリを作成する
Git Repository とは、ファイルやフォルダを保存して管理するリポジトリです。通常、アプリケーションごとにリポジトリを1つずつ作成して使用します。
Giteaでは、Repositoryは自分のアカウントまたは組織の子に作成できます。自分のアカウントサブには誰でもリポジトリを作成できます。組織の子にRepositoryを作成するには、その組織にRepositoryを作成する権限が必要です。コンソールでgit-administratorまたはgit-writerの役割を与えられたユーザーのみが、組織の子にRepositoryを作成できます。 Modernization platform v2.0では、Giteaの組織はコンソールのProjectと1:1にマッピングされ管理されています。組織名は{realm} - {project}として生成されます。
組織の右上隅にある+ボタンをクリックして新しいリポジトリを選択するか、組織名の下にある新しいリポジトリボタンをクリックします。
必要な所有者とリポジトリ名を入力し、[リポジトリの作成]ボタンをクリックします。
- 所有者: リポジトリを個人アカウントの子に作成するか、組織の子に設定するかを決定します。
- リポジトリ名:リポジトリの名前を入力します。
- 可視性:Repositoryをpublicにするかどうかを選択します。 public にすると、Gitea にログインしていない anonymous ユーザーも Repository のソースを表示できます。
- 説明:リポジトリの説明を入力します。
- Issue Labels : Repository に Issue を登録するときに使用できる Label set を指定できます。
- .gitignore : Gitea は Language ごとに .gitignore ファイルのサンプルを提供します。目的の.gitignoreを選択します。
- ライセンス:対応するリポジトリのライセンスを選択できます。
- README:RepositoryのReadmeファイルを生成するかどうかを選択できます。
- リポジトリの初期化:チェックしてリポジトリを作成すると、6、7、8で選択したファイルが自動的に追加されます。
- リポジトリの作成: リポジトリが作成されます。
ソースをダウンロード
レポジトリのソースコードはgit cliを介してダウンロードできます。レポジトリのメイン画面でチェックアウトURLを確認できます。
$ git clone https://GITEA-URL/realm-myproject/my-application.git Cloning into 'my-application'... Username for 'https://GITEA_URL': testuser Password for 'https://testuser@GITEA_URL': remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done.
ソースコードを最初にダウンロードした場合は、git cloneコマンドを使用してダウンロードできます。一度ソースをダウンロードした後に変更をダウンロードするときは、git pullを使用してください。
ソースを上げる
ローカルに追加、変更したソースコードをgit cliを介してアップロードできます。
変更されたソースコードのリストを確認する - git status
$ git status On branch master Your branch is up to date with 'origin/master'. Untracked files: (use "git add <file>..." to include in what will be committed) Application.java nothing added to commit but untracked files present (use "git add" to track)
Application.javaというファイルが追加されましたが、Untracked状態であることを確認できます。 Git は Untracked 状態のファイルを Commit ターゲットに入れません。
変更したソースコードを追跡する - git add
$ git add Application.java $ git status On branch master Your branch is up to date with 'origin/master'. Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: Application.java
git addを実行した後に再びstatusを確認すると、ファイルがトレースリストに含まれていることを確認できます。
ソースコードをコミットする - git commit
$ git commit -m "Add Application.java" [master 76f4940] Add Application.java 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Application.java
git commit コマンドを使用すると、変更されたファイルを commit できます。このとき commit は Local Repository に commit したことを意味し、 remote (Gitea サーバー) にアップロードするためには git push まで行う必要があります。
git commit の前に commit するユーザー情報が設定されている必要があります。
$ git config --global user.email "testuser@sk.com" $ git config --global user.name "user name"
ソースコードをアップロードする - git push
$ git push origin BRANCH_NAME Username for 'https://GITEA_URL': testuser Password for 'https://testuser@GITEA_URL': Counting objects: 3, done. Delta compression using up to 8 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 289 bytes | 289.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) remote: . Processing 1 references remote: Processed 1 references in total To https://GITEA_URL/realm-myproject/my-application.git 40cddcc..76f4940 master -> master
git push コマンドの後の origin は remote リポジトリ (gitea サーバ) を意味します。 BRANCH_NAMEは、ソースをアップロードするgitのブランチ名を入力します。
参考資料
Gitea 公式ガイド
Git 使い方
Nexus
NexusはSonatypeによって作成されたストレージ管理ツールです。 Java Library、Node module、Container Imageなど、さまざまなFormatのリポジトリを作成できます。自分で開発したライブラリをアップロードしたり、メインリポジトリ(Maven Repository、NPM Repositoryなど)ミラーとして使用できます。
一般ユーザーはNexusにログインできるアカウントを発行しないため、リポジトリの作成などの使用が必要な場合は管理者に依頼する必要があります。
コンソール画面のプロジェクトメニューDev Tools> Nexusからアクセスできます。
NexusのBrowseメニューにアクセスすると、Repositoryのリストを確認できます。 Repository の maven、npm などの Format が存在します。各フォーマットごとにproxy、hosted、groupの3種類を設定できます。 proxy は文字通り外部の (M2 repository など) Repository を proxy する Repository です。この proxy タイプの Repository によって外部 Repository のデータをキャッシュし、閉じた環境でもライブラリを受け取ることができるようになります。 hostedは、自分で作成したライブラリをアップロードできるRepositoryです。 group は proxy と hosted Repository を結合できる Repository です。 Groupで囲まれた順序に従って、順番にライブラリが存在するかどうかを検索します。
Maven Mirrorで使用する
ローカル開発環境またはCIビルド環境がprivate(閉鎖ネットワーク)の場合、public(internet)のメインリポジトリからライブラリを受信できないことがあります。この場合、NexusをMirrorとして使用してライブラリを受け取ることができます。
settings.xmlファイルを使用すると、pom.xmlファイルを変更せずにmavenの動作方法を変更できます。
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd"> ... <mirrors> <mirror> <id>modernizationplatform</id> <name>Modernization Platform Nexus</name> <url>NEXUS_REPOSITORY_URL</url> <mirrorOf>*</mirrorOf> </mirror> </mirrors> ... </settings>
NexusのRepositoryにはそれぞれURLがあります。 RepositoryリストのURL copyボタンをクリックすると、そのRepositoryのURLを取得できます。 settings.xmlファイルのNEXUS_REPOSTIROY_URLは、RepositoryのURLを入力します。通常、proxyとhostedを囲んだgroup typeのRepositoryを使用します。
mirrorOf は、pom.xml ファイルで指定したリポジトリの id を入力します。 Mavenは、pom.xmlファイルに別々のrepositoryを指定しなかった場合は、defaultとしてcentral(https://repo.maven.apache.org/maven2)を使用します。すべてのライブラリをNexus経由で受け取るには、mirrorOfを*として指定します。
例のように settings.xml ファイルを作成し、使用している IDE (eclipse、vscode、intelliJ など) 環境に合わせて settings.xml ファイルを表示するように設定します。
Gradle Proxyで使用する
Gradleを使用していても、Nexusをライブラリリポジトリとして活用してビルドを実行できます。
プロジェクトの build.gradle ファイルの内容を以下のように変更します。
repositories { // mavenCentral() maven { url "NEXUS_REPOSITORY_URL" } }
通常、 mavenCentral() を介して maven central (https://repo.maven.apache.org/maven2) を使用します。この部分を削除してNexusを見るように設定を変更するだけです。
Harbor
アプリケーションをContainerとして実行するには、Container Imageをビルドする必要があり、そのImageを格納するImageリポジトリが必要です。最も広く知られているサービス形式のリポジトリとして、Docker Hubがあります。 Docker Hubを使用するとコストやセキュリティの問題がある可能性があるため、Modernization Platformはインストール可能なストレージであるHarborを提供します。
Harborはインストール可能なオープンソースのImageリポジトリです。 Container Image、Helm chartのリポジトリとして使用され、役割に応じたアクセス制御、イメージの脆弱性チェックなどの機能を提供します。
Harborにアクセスする
コンソールのプロジェクトメニューからDev Tools> Imagesを介してアクセスできます。
Harborのアカウントはコンソールのアカウントと連動します。 Modernization platform v2.0 で初めてユーザー作成時には、まだ Harbor にアカウントがない状態になります。そのアカウントで Modernization platform コンソールにログインし、Harbor にアクセスすると Harbor アカウントが自動的に作成されます。
ユーザーに Harbor 権限を付与する
プロジェクトメンバーにHarborの権限を付与することは、プロジェクトアドミンまたはユーザー管理者の役割を持つユーザーのみが可能です。
Harborの権限管理はプロジェクトごとに設定できます。 Modernization platform v2.0にプロジェクトを作成すると、Harborにプロジェクトが自動的に作成され、コンソールでユーザーに権限を付与すると、Harborのプロジェクトに自動的に権限が追加されます。
コンソール画面の[プロジェクト]メニュー[Administrator]> [Members]に移動します。権限を付与するユーザー ID または edit ボタンをクリックして詳細画面に移動します。
ユーザーにロールを直接付与するか、ロールを持つグループにユーザーを追加して権限を付与できます。ユーザーに複数の権限が同時に付与されている場合は、最も高い権限が適用されます。
Image アップロード
アップロードするImageにタグを追加する
Harbor に Image をアップロードするには、その Image に Harbor の URL と tag を付与する必要があります。
$ docker tag {IMAGE_NAME}:{TAG} {HARBOR_URL}/{PROJECT}/{IMAGE_NAME}:{TAG}
- IMAGE_NAME: アップロードする元の画像の画像名です。
- TAG: アップロードする元の画像の画像タグです。
- HARBOR_URL : Harbor の接続 URL です。プロトコルを削除した Harbor のドメイン名のみを使用します。 ex) harbor.cloudzcp.net
- PROJECT : Harbor に生成されたプロジェクト名を入力します。
Docker login
ローカル環境のImageをHarborにアップロードするには、HarborのアカウントとCLI Secretで認証(docker login)を行う必要があります。このとき使用するログインアカウント名は、コンソールのユーザーアカウント名と同じです。 CLI Secret は以下のように照会できます。
Harbor画面で、右上のユーザー名> User Profileメニューをクリックします。
ポップアップウィンドウのCLI secret copyボタンをクリックすると、secretがクリップボードにコピーされます。
$ docker login tworld-registry.skt.cloudzcp.com Username: {USERNAME} Password: {CLI_SECRET} Login Succeeded
USERNAME : 사용자의 로그인 계정을 입력합니다.
Password : 위에서 복사한 CLI secret 값을 입력합니다.
Image アップロード
docker pushコマンドを使用してHarborにImageアップロードを実行します。
$ docker push {HARBOR_URL}/{PROJECT}/{IMAGE_NAME}:{TAG} The push refers to repository [{HARBOR_URL}/{PROJECT}/{IMAGE_NAME}] cfd97936a580: Pushed latest: digest: sha256:febcf61cd6e1ac9628f6ac14fa40836d16f3c6ddef3b303ff0321606e55ddd0b size: 527
{HARBOR_URL}/{PROJECT}/{IMAGE_NAME}:{TAG} の値は、上記のタグを追加した値を使用します。
Image ダウンロード
docker pull コマンドを使って Harbor から Image をダウンロードします。
HarborのプロジェクトがPrivateの場合(ほとんどはPrivateです)、Imageをアップロードするときと同じように、docker loginを最初に実行する必要があります。
$ docker pull {HARBOR_URL}/{PROJECT}/{IMAGE_NAME}:{TAG} latest: Pulling from {PROJECT}/{IMAGE_NAME} 24fb2886d6f6: Pull complete Digest: sha256:febcf61cd6e1ac9628f6ac14fa40836d16f3c6ddef3b303ff0321606e55ddd0b Status: Downloaded newer image for {HARBOR_URL}/{PROJECT}/{IMAGE_NAME}:{TAG}
{HARBOR_URL}/{PROJECT}/{IMAGE_NAME}:{TAG} の値は、上記のタグを追加した値を使用します。