Tickets Documents Updates ログイン

私は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://earth1223@git.cloudzcp.io': 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 を選択します。

SCM 銀 Git を選択します。

Jenkinsfileの位置を設定します。

Repository URL 에 Git 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 画面で実行中のビルドを確認できます。

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

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