歡迎大家在 [Patreon](https://www.patreon.com/ewanvalentine) 上向我提供更多諸如此類的素材。在本系列的這一章節,我們將簡要介紹使用 [CircleCI](http://circleci.com/) 與我們的其中一項服務建立持續整合。[CircleCI](http://circleci.com/) 是一款不可思議的工具,它有一個非常實用的免費平台。這個平台就是 SaaS, 因此與 Jenkins 不同的是,它是被完全管理的。同時它的配置和建立非常直截了當。此外,[CircleCI](http://circleci.com/) 也使用 Docker 鏡像(images),所以你可以在如何管理你的構建上有很多創意。確保你已經註冊並且創造了賬戶。首先讓我們在 [CircleCI](http://circleci.com/) 中建立一個工程。在左側菜單中,點擊 “add project”。如果你已經將你的 github 賬戶串連到你的 [CircleCI](http://circleci.com/) 賬戶,你應該可以看到你的微服務 git 倉庫出現在列表中。點擊 “follow project”。你將看到一個請求頁面,你可以選擇你樂於使用的作業系統和語言。確保 Linux 和 Go 被選中。然後點擊開始構建。這將創造一些預設的配置,但是我們需要在構建能開始正常工作之前,增加我們自己的配置到此代碼倉庫中。所以在我們的服務中(我將為此使用我們的委託服務),在項目根目錄建立一個檔案夾 `mkdir .circleci`,然後在此檔案夾下建立一個檔案 `touch .circleci/config.yml`。現在讓我們開始增加我們的構建配置。```version: 2jobs: build: working_directory: /app docker: # Here we select the Docker images we wish to use # in order to build our service. # We're using a container I made, which configurs the Google Cloud SDK # Kubernetes, and a few other utils. This is open-source, and you can find # the repo here https://github.com/EwanValentine/gcloud-docker-kubernetes # # Then we're using the docker image itself, so that we can build docker containers. - image: ewanvalentine/gcdeploy:latest environment: GCLOUD_PROJECT_NAME: shippy-freight GCLOUD_CLUSTER_NAME: shippy-freight-cluster CLOUDSDK_COMPUTE_ZONE: europe-west2-a # This is a google service key, which allows us to authenticate # our build process with our cluster. # You need to generate a service key, such as the one we generated # in part 7. You can copy the contents of this and encode it using base64. # Then add the base64 string into your environment variables, in the settings # of this build project. To find this, click on the spanner icon in your build. # Then click on environment variables, click add variable, with the name GCLOUD_SERVICE_KEY # then paste the base64 string of your service key into the value and save that. GOOGLE_APPLICATION_CREDENTIALS: ${HOME}/gcloud-service-key.json - image: docker:17.05.0-ce-git environment: DOCKER_TAG_PREFIX: "eu.gcr.io/$GCLOUD_PROJECT_NAME/shippy-consignment-service" DOCKER_TAG: "$DOCKER_TAG_PREFIX:$CIRCLE_SHA1" steps: - checkout - setup_remote_docker - run: name: Install dependencies # Fetches the base64 encoded service key content, decodes it into a file again. # Then sets the gcloud project name from the environment variables we set above. # Then we set the cluster name, the compute region/zone, then fetch the credentials. command: | echo $GCLOUD_SERVICE_KEY | base64 --decode -i > ${HOME}/gcloud-service-key.json && \ gcloud auth activate-service-account --key-file ${HOME}/gcloud-service-key.json && \ gcloud config set project $GCLOUD_PROJECT_NAME && \ gcloud --quiet config set container/cluster $GCLOUD_CLUSTER_NAME && \ gcloud config set compute/zone ${CLOUDSDK_COMPUTE_ZONE} && \ gcloud --quiet container clusters get-credentials $GCLOUD_CLUSTER_NAME - deploy: name: Push application Docker image command: | make deploy```為了使之生效我們需要做一些事情,我在評論中已經談到了這一點,但它是一個重要的步驟,所以我想重申這一部分。我們需要Google雲端服務鑰匙,正如我們在[第 7 章](https://studygolang.com/articles/12799)建立的那個,然後我們需要將此鑰匙加密成 base64 並作為我們構建工程設定中的一個環境變數來儲存。因此找到你的Google雲端服務鑰匙,然後運行 `$ cat <keyname>.json | base64`,並複製得到的字串。回到 [CircleCI](http://circleci.com/) 你的項目來,點擊右上方的齒輪,然後選擇左側邊欄目中的環境變數。建立一個環境變數,命名為`GCLOUD_SERVICE_KEY`,然後粘貼前面得到的 base64 字串作為其值,並儲存。上述操作可以在 circleci 內儲存任何安全資訊,且使代碼倉庫不熟任何敏感性資料影響。它將這些存取金鑰儲存在操作團隊的控制之下,而不僅限於任何可以存取碼倉庫的人員。現在我們的構建配置中,用來對我們組進行身分識別驗證的變數,其內容被解碼為一個檔案。大功告成,相當簡單。我們擁有 CI 作為我們的一個服務。作為一個產品服務,在你執行部署步驟之前,你可能會首先運行你的測試案例。查看[這篇文檔](https://circleci.com/docs/2.0/)然後看看你能用 circle 做哪些有趣的東西。由於 circle 使用Docker 容器,你甚至可以加一個資料庫容器,以便於你運行整合測試。發揮你的創造力,最大限度使用這些特性。如果你覺得這一系列的文章對你有用,且你裝了廣告攔截器(沒有人會責怪你),考慮打賞一下我撰寫這些文章所付出的時間和努力吧!謝謝!https://monzo.me/ewanvalentine或者,在[Patreon](https://www.patreon.com/ewanvalentine)上向我提供更多諸如此類的素材。
via: https://ewanvalentine.io/microservices-in-golang-part-9/
作者:Ewan Valentine 譯者:MAXAmbitious 校對:polaris1119
本文由 GCTT 原創編譯,Go語言中文網 榮譽推出
本文由 GCTT 原創翻譯,Go語言中文網 首發。也想加入譯者行列,為開源做一些自己的貢獻嗎?歡迎加入 GCTT!
翻譯工作和譯文發表僅用於學習和交流目的,翻譯工作遵照 CC-BY-NC-SA 協議規定,如果我們的工作有侵犯到您的權益,請及時聯絡我們。
歡迎遵照 CC-BY-NC-SA 協議規定 轉載,敬請在本文中標註並保留原文/譯文連結和作者/譯者等資訊。
文章僅代表作者的知識和看法,如有不同觀點,請樓下排隊吐槽
240 次點擊