CI/CD Manager はソースリポジトリ (Gitea) を管理し、ビルドおよびデプロイ用に Pipeline (Jenkins) を構成します。
名前空間にDocker Secretを追加する
Secretは、パスワード、OAuthトークン、sshキーなどの重要な情報を維持するためのものです。この情報をシークレットに置くことは、Pod定義またはDocker Imageにそのまま置くよりも安全で柔軟です。
次の手順に従って、上記で作成したHarborアカウントにDocker Secretを追加します。
- Secret タブをクリックします。
- Secret リストの右上にある (Secret 追加) ボタンをクリックします。
- 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 は以下のルールで生成します。
Service | Credentials 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 を選択します。
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 画面で実行中のビルドを確認できます。
オンライン相談
問い合わせ