This article is not available in English, view it in Korean

私はCI / CD Managerです。

印刷

CI/CD Manager はソースリポジトリ (Gitea) を管理し、ビルドおよびデプロイ用に Pipeline (Jenkins) を構成します。

  1. 名前空間にDocker Secretを追加する
  2. ソースストアの作成と権限の設定
  3. ビルドとデプロイ Pipeline の構成
  4. ビルドとデプロイ Pipeline の実行

名前空間にDocker Secretを追加する

Secretは、パスワード、OAuthトークン、sshキーなどの重要な情報を維持するためのものです。この情報をシークレットに置くことは、Pod定義またはDocker Imageにそのまま置くよりも安全で柔軟です。

次の手順に従って、上記で作成したHarborアカウントにDocker Secretを追加します。


  1. Secret タブをクリックします。
  2. Secret リストの右上にある (Secret 追加) ボタンをクリックします。
  3. Secret追加ポップアップが表示されたら、タイプに合った情報を入力して[登録]ボタンをクリックします。

  • Secret Name: my-docker-secret
  • Secret Type: Docker Registry
  • docker-server(必須):Image Registry(Harbor)アドレス。
  • docker-username(必須):Image RegistryログインユーザーID
  • docker-password(必須):Image Registryログインユーザーパスワード
  • docker-email: Docker ログインユーザーのメール

ソースストアの作成と権限の設定

アカウントを作成する

ユーザーアカウントは、ZCPに登録されているユーザーアカウントと自動的には関連付けられません。新規加入の場合、Giteaにアクセスすると下記の新規加入画面が表示され、必要な情報を入力して新規に加入します。

(必ず登録するサブにユーザー名とメールは変更せず、パスワードのみ入力してアカウントを作成します。

その後、ZCPコンソールを介してソースリポジトリに接続すると、自動的にログインします。

リポジトリの作成

リポジトリ(Repository)はgitリモートリポジトリです。

Giteaのホーム画面で右上の+ボタンを押してから、新しいリポジトリをクリックします。

リポジトリの名前と説明などを入力し、[リポジトリの作成]ボタンをクリックします。

リポジトリが作成された画面です。

ソースコードをプッシュする

作成したリポジトリにソースコードをプッシュします。

本書で使用したサンプルソースコードは、  Hello ZCP (https://github.com/cnpst/hellozcp)にあります。

# サンプルソースコードのインポート > git clone https://github.com/cnpst/hellozcp.git Cloning into 'hellozcp'... remote: Enumerating objects: 25, done. remote: Counting objects: 100% (25/25), done. remote: Compressing objects: 100% (18/18), done. remote: Total 25 (delta 0), reused 25 (delta 0), pack-reused 0 Unpacking objects: 100% (25/25), done. 
# 오리지널 저장소 연결 끊기 > cd hellozcp > git remote remove origin 
# ZCP git 저장소 연결 추가 > git remote add origin https://git.cloudzcp.io/earth1223/new-repository.git 
# 소스 코드 Push > git push -u origin master Enumerating objects: 25, done. Counting objects: 100% (25/25), done. Delta compression using up to 8 threads Compressing objects: 100% (18/18), done. Writing objects: 100% (25/25), 46.95 KiB | 9.39 MiB/s, done. Total 25 (delta 0), reused 0 (delta 0) To https://git.cloudzcp.io/earth1223/new-repository.git * [new branch]      master -> master Branch 'master' set up to track remote branch 'master' from 'origin'.


リポジトリにソースコード Push が成功した様子です。


ビルドとデプロイ Pipeline の構成

ZCP コンソールで、DevOps サブの [ビルドとデプロイ] メニューをクリックします。

自分の Namespace と同じ Folder を選択します。

Credentialsを作成する

JenkinsがGiteaのソースをチェックアウトしてDocker registryにプッシュするには、各システムにログインするための認証情報が必要です。

自分の Folder に入り、左側の Credentials メニューをクリックします。

Credentials サブの Folder を選択し、Global credentials をクリックします。

左側の[Add Credentials]メニューを選択し、上記で作成したGiteaのID、Passwordを入力してCredential情報を生成します。

Credentials の ID は以下のルールで生成します。

ServiceCredentials ID
Gitea (GIT)GIT_CREDENTIALS
Harbor (Docker Registry)HARBOR_CREDENTIALS

Gitea, Harbor 両方の Credentials を生成した画面です。

Jenkinsfileを作成する

Jenkinsfile は、Jenkins pipeline でビルドをデプロイするための一連の動作 (Workflow) を定義するためのファイルです。

詳しくは Jenkins 公式文書  を参照してください。


ソースコードのRootにJenkinsfileというファイルを作成し、以下の内容を貼り付けます。

@Library('retort-lib') _ def label = "jenkins-${UUID.randomUUID().toString()}" 
def ZCP_USERID='zcpsample' def DOCKER_IMAGE='zcpsample/sam-springboot' def K8S_NAMESPACE='default' 
timestamps {    podTemplate(label:label,        serviceAccount: "zcp-system-sa-${ZCP_USERID}",        containers: [            containerTemplate(name: 'maven', image: 'maven:3.5.2-jdk-8-alpine', ttyEnabled: true, command: 'cat'),            containerTemplate(name: 'docker', image: 'docker:17-dind', ttyEnabled: true, command: 'dockerd-entrypoint.sh', privileged: true),            containerTemplate(name: 'kubectl', image: 'lachlanevenson/k8s-kubectl', ttyEnabled: true, command: 'cat')        ],        volumes: [            persistentVolumeClaim(mountPath: '/root/.m2', claimName: 'zcp-jenkins-mvn-repo')        ]) {            node(label) {            stage('SOURCE CHECKOUT') {                def repo = checkout scm            }                stage('BUILD') {                container('maven') {                    mavenBuild goal: 'clean package', systemProperties:['maven.repo.local':"/root/.m2/${JOB_NAME}"]                }            }                stage('BUILD DOCKER IMAGE') {                container('docker') {                    dockerCmd.build tag: "${HARBOR_REGISTRY}/${DOCKER_IMAGE}:${BUILD_NUMBER}"                    dockerCmd.push registry: HARBOR_REGISTRY, imageName: DOCKER_IMAGE, imageVersion: BUILD_NUMBER, credentialsId: "HARBOR_CREDENTIALS"                }            }                stage('DEPLOY') {                container('kubectl') {                    kubeCmd.apply file: 'k8s/service.yaml', namespace: K8S_NAMESPACE                    yaml.update file: 'k8s/deploy.yaml', update: ['.spec.template.spec.containers[0].image': "${HARBOR_REGISTRY}/${DOCKER_IMAGE}:${BUILD_NUMBER}"]                        kubeCmd.apply file: 'k8s/deploy.yaml', wait: 300, recoverOnFail: false, namespace: K8S_NAMESPACE                }            }        }    } }


Jenkinsfile で 4、5、6 行の内容を自分の設定に合わせて修正して保存します。

4:ZCPコンソールにログインするために使用する自分のアカウント

5:Docker Image 名。 {プロジェクト名}/{アプリケーション名}と入力します。プロジェクト名は、Harborによって作成されたPrivate Projectの名前です。

6: ZCP Console で作成した Namespace 名

Jenkinsfile Push する

作成したJenkinsfileをGitリポジトリにプッシュします。


# Jenkinsfile을 Index에 추가 > git add Jenkinsfile 
# Commit > git commit -m "Add Jenkinsfile" [master 4271304] Add Jenkinsfile 1 file changed, 48 insertions(+) create mode 100644 Jenkinsfile 
# Push > git push -u zcp-origin master Username for 'https://git.cloudzcp.io': earth1223 Password for 'https://[email protected]': Enumerating objects: 4, done. Counting objects: 100% (4/4), done. Delta compression using up to 8 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 1.07 KiB | 1.07 MiB/s, done. Total 3 (delta 1), reused 0 (delta 0) To https://git.cloudzcp.io/earth1223/new-repository.git   ca88947..4271304  master -> master Branch 'master' set up to track remote branch 'master' from 'zcp-origin'.


リポジトリにJenkinsfileが追加された様子です。

Jenkins Pipelineを作成する

左側の New Item または中央の新規アクションをクリックします。

Pipelineの名前を入力し、Pipelineを選択して[OK]ボタンをクリックします。

生成されたパイプラインの設定画面が表示されたら、パイプラインタブに移動します。


Definition コンボボックスに Pipeline script from SCM を選択します。

SCMGit を選択します。

Jenkinsfileの位置を設定します。

Repository URLGit Clone URL と入力します。 Clone URLはGitリポジトリ画面からコピーできます。 Gitリポジトリアドレスに.gitを付けることもできます。

Credentials で上記で作成したGit Credentialsを選択します。

Repository browser から gogs を選択します。

URL には、Gitリポジトリ画面のアドレスを入力します。 Clone URLから.gitを削除して入力します。

すべての値を入力して[保存]ボタンをクリックします。

ビルドとデプロイ Pipeline の実行

パイプラインが設定を保存すると、パイプラインステータス画面に移動します。

Pipelineを実行する

Pipelineを実行するには、画面左側のBuild Nowボタンをクリックします。

ビルドが実行されると、下部の Build History 画面で実行中のビルドを確認できます。

オンライン相談

問い合わせ

この回答は役に立ちましたか? はい いいえ

フィードバックを送信
お役に立てずに申し訳ございません。この記事を向上させるためにフィードバックをお願い致します。