4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Alibaba CloudでCI/CD pipelineを構築するbest practice(2)_CircleCI利用

Last updated at Posted at 2022-12-07

前提

  • すでにgithub accountを持っている
  • ci/cdに関する基礎知識

ゴール

③の自動テストは書く開発言語に依存し、テストスクリプトも必要で準備するのはちょっと手間かかるため、今回は割愛させていただきます。
⑦のdeployの部分は別の記事で書く予定です。
ということで今回は①、②、⑤、⑥について説明し、alibaba cloud上でのCI/CDのフローをある程度イメージしていただければ幸いです。
image.png

1. github repoと最低限のファイルを準備

  • repoの作成
    image.png
  • root directoryにDockerfileを用意
    FROM 'nginx:latest'
    RUN service nginx start
    
  • github repoのサンプルをご参考ください。

2. ACR側でdocker imageのrepoを作成

ACRはAlibaba Cloud Container Registryの略語となり、コンテナイメージの蓄積と管理するサービスです。AWSのACRのようなサービスです。

ACR全体

  • コンソールを開き、左上のオレンジ色マークをクリックし、「ACR」をキーワードとして検索します。
    image.png
  • 個人版と企業版の二種類がありますが、今回は一旦個人版を使います。
    個人版は無料で利用できますが、ビジネス用として制限がありまして、またSLAの保証もありませんので、ビジネス用途の場合は、企業版を使いましょう。
    image.png
  • 個人版と企業版の違いを示すページであり、個人版を選択します。
    image.png
    image.png
  • ACRを初めて利用している場合は、ACRのlogin password設定画面が表示され、パスワードを設定しましょう。
    image.png

ACRのaccess credentianlについて:

  • ACRのaccess credentianlはAlibaba Cloudのcredentail(root user/RAM user)とは別物です。そもそもACRはdockerhubみたいなものなので、こちらのaccess credentianlはdockerhubのlogin accountみたいなものだと考えばわかりやすいでしょう。
  • 以下の二種類があります
    • パスワード:パスワードは永久に有効です。パスワードがわからなくなった場合は、リセットできます。
    • テンポラリートークン: 一時的なトークンであり、1時間有効です。Security Token Service(STS)を利用して取得した場合、STSのトークンが有効である限り、一時的なトークンは有効です。

image.png

Namespaceを作成

  • ACRの仕様上で,docker imageのrepoを作成するにはまずnamespaceを作っておかないとならない。
  • namespaceは、リポジトリの権限やリポジトリ属性など、そのネームスペース配下のリポジトリの集合を効率的に管理することができます。
  • namespaceは、複数のリポジトリの集合体です。会社名やチーム名、組織名など名前空間として使用するのは一般です。
  • 個人版の場合は、namespaceが他のalibaba accountと共用するため、重複していない名前(alibaba cloud中で世界的に唯一の名前)をつける必要があります。
    image.png
    image.png
  • 作られたnamespace:
    image.png

docker imageのrepoを作成

  • 必要な情報を入力して作成
    image.png
  • code sourceを設定
    • たんなるdocker imageをbuildするだけなら、ACRができますが、今回はcircleciでCI周り(docker imageのbuildも含まれる)をやりたいので、「Local Repository」を選択
      image.png
  • ACRは直接githubなどとも連携できる。つまりcodeがgithubにpushされたら、ACRのほうでdocker imageをbuildすることができる。
  • AWSのACRはたんなるdocker imageの格納庫であり、docker imageをbuildするには別のサービスcodebuildが必要です。ですので、AWSをなれている方にとってはAlibaba cloudのACR自体もdocker imageをbuildできるのはちょっとびっくりするかもしれません。
    image.png
  • 作られたrepo
    • username: 該当alibaba accountのroot userのメールアドレス
    • password: 上記設定されたパスワード
      image.png

3. circleci側の設定

circleciの新規アカウント作成

CircleCIを利用するにはGitHub, Github,Bitbucketのいずれのアカウントが必要です。あるいはメールアドレスで新規登録も可能です。
すでにアカウントを持っている場合は、このステップを飛ばしてください。

  • 今回はgithubと連携したいので、「Githubで登録」のボタンをクリック
    image.png
    image.png
  • 連携したいgithub organizationを選択
    image.png

project(github上で新規のrepo)を設定

image.png

  • circleci用の設定ファイルconfig.ymlはまだないため、テンプレートを利用して新規作成する
    image.png
  • Hello Worldのサンプルテンプレートを利用
    image.png
  • そのままでコミット
    image.png

環境変数を設定

  • Contextsはcircleci上でprojectsを跨いて環境変数をセキュリに共有する仕組みです。
  • ACRへアクセスする認証情報をcircleciの環境変数に設定しておきます。
    image.png
    image.png
  • つくられcontextsをクリック
    image.png
  • 環境変数を追加
    image.png
    image.png
    image.png
  • つくられた環境変数
    image.png

circleci上でconfig.ymlを修正し、コミット

jobs:
  build-docker-image:
    # Specify the execution environment. You can specify an image from Dockerhub or use one of our Convenience Images from CircleCI's Developer Hub.
    # See: https://circleci.com/docs/2.0/configuration-reference/#docker-machine-macos-windows-executor
    docker:
      - image: cimg/base:stable
    # Add steps to the job
    # See: https://circleci.com/docs/2.0/configuration-reference/#steps
    steps:
      - checkout
      - setup_remote_docker:
          version: 20.10.14
          docker_layer_caching: true 
      - run:
          name: "acr login"
          command: "docker login --username=$username -p=$password registry-intl.ap-northeast-1.aliyuncs.com"
      - run:
          name: "push to acr"
          command: |
            TAG=$CIRCLE_SHA1
            docker build -t registry-intl.ap-northeast-1.aliyuncs.com/denniswang/circleci_ack:$TAG .
            docker push registry-intl.ap-northeast-1.aliyuncs.com/denniswang/circleci_ack:$TAG
# Invoke jobs via workflows
# See: https://circleci.com/docs/2.0/configuration-reference/#workflows
workflows:
  say-hello-workflow:
    jobs:
      - build-docker-image:
          context:
            - acr

config.yml修正の詳細

  1. workflowsにcontext情報を追加
    workflows:
      say-hello-workflow:
        jobs:
          - build-docker-image:
              context:
                - acr
    
  2. GitHub上のdockfileを使い、dockerイメージをビルドするには、下記のsetup_remote_dockerコマンドを使い、docker ビルド環境の作成が必要となります。
          - setup_remote_docker:
              version: 20.10.14
              docker_layer_caching: true 
    

    setup_remote_docker設定しない場合は、以下のエラーが発生します。
    image.png
    :

  3. acr loginやpushのコマンド(usernameとpasswordは環境変数から取得)
      - run:
          name: "acr login"
          command: "docker login --username=$username -p=$password registry-intl.ap-northeast-1.aliyuncs.com"
      - run:
          name: "push to acr"
          command: |
            TAG=$CIRCLE_SHA1
            docker build -t registry-intl.ap-northeast-1.aliyuncs.com/denniswang/circleci_ack:$TAG .
            docker push registry-intl.ap-northeast-1.aliyuncs.com/denniswang/circleci_ack:$TAG

4. 結果の確認

circleciの実行結果を確認

  • 正常にbuild&ACRにpushされていること
    image.png

image.png

ACR側にpushされたimageを確認

  • 問題なくimageがpushされていること
    image.png

5. CircleCIのテスト結果をSlackに通知する

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?