前提
- すでにgithub accountを持っている
- ci/cdに関する基礎知識
ゴール
③の自動テストは書く開発言語に依存し、テストスクリプトも必要で準備するのはちょっと手間かかるため、今回は割愛させていただきます。
⑦のdeployの部分は別の記事で書く予定です。
ということで今回は①、②、⑤、⑥について説明し、alibaba cloud上でのCI/CDのフローをある程度イメージしていただければ幸いです。
1. github repoと最低限のファイルを準備
- repoの作成
- 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」をキーワードとして検索します。
- 個人版と企業版の二種類がありますが、今回は一旦個人版を使います。
個人版は無料で利用できますが、ビジネス用として制限がありまして、またSLAの保証もありませんので、ビジネス用途の場合は、企業版を使いましょう。
- 個人版と企業版の違いを示すページであり、個人版を選択します。
- ACRを初めて利用している場合は、ACRのlogin password設定画面が表示され、パスワードを設定しましょう。
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のトークンが有効である限り、一時的なトークンは有効です。
Namespaceを作成
- ACRの仕様上で,docker imageのrepoを作成するにはまずnamespaceを作っておかないとならない。
- namespaceは、リポジトリの権限やリポジトリ属性など、そのネームスペース配下のリポジトリの集合を効率的に管理することができます。
- namespaceは、複数のリポジトリの集合体です。会社名やチーム名、組織名など名前空間として使用するのは一般です。
- 個人版の場合は、namespaceが他のalibaba accountと共用するため、重複していない名前(alibaba cloud中で世界的に唯一の名前)をつける必要があります。
- 作られたnamespace:
docker imageのrepoを作成
3. circleci側の設定
circleciの新規アカウント作成
CircleCIを利用するにはGitHub, Github,Bitbucketのいずれのアカウントが必要です。あるいはメールアドレスで新規登録も可能です。
すでにアカウントを持っている場合は、このステップを飛ばしてください。
project(github上で新規のrepo)を設定
環境変数を設定
-
Contexts
はcircleci上でprojectsを跨いて環境変数をセキュリに共有する仕組みです。 - ACRへアクセスする認証情報をcircleciの環境変数に設定しておきます。
- つくられcontextsをクリック
- 環境変数を追加
- つくられた環境変数
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修正の詳細
- workflowsにcontext情報を追加
workflows: say-hello-workflow: jobs: - build-docker-image: context: - acr
- GitHub上のdockfileを使い、dockerイメージをビルドするには、下記のsetup_remote_dockerコマンドを使い、docker ビルド環境の作成が必要となります。
- setup_remote_docker: version: 20.10.14 docker_layer_caching: true
- 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の実行結果を確認
ACR側にpushされたimageを確認
5. CircleCIのテスト結果をSlackに通知する