Jenkins在Google Cloud的自動化安裝

雲計算 軟件 腳本語言 DNS 零空科技 2017-04-18

【摘要】我們一直在為服務提供商研究新的創新的解決方案,使得各個領域都可以使用我們的服務. 因此我們需要一個普遍性的google cloud雲平臺解決方案。這個平臺可以解決移動應用和桌面應用的部署和build工作,同時簡化使用google cloud平臺的工具

除了應用程序平臺本身,還需要精簡和重複的自動化流程和技術部署,以支持每個平臺環境的配置,並支持所有標準的SDLC開發任務,以滿足行業或組織要求

面對選擇IaaS / PaaS提供商和開發技術的任務時,谷歌雲平臺和Firebase是明顯的選擇

  • 為什麼選擇Firebase?

  1. Firebase為現代應用程序開發提供了最佳選擇,支持Android,iOS和Web

  2. Firebase與Google OAuth驗證集成out of the box(OOTB)

  3. Firebase支持Google,Email / Password,Github,Facebook,Twitter的聯合身份驗證提供商,甚至支持自定義實現

  4. Firebase為您的應用程序數據和使用情況提供Analytics

  5. Firebase提供應用程序測試自動化和視頻播放的執行與Test Lab的Android和iOS應用程序

  6. Firebase由Google Cloud Platform基礎架構資源和服務提供100%的支持

  7. 閱讀更多關於Firebase features

  • 為什麼谷歌雲平臺?

  1. GCP provides ...

  2. GCP支持集成...

  3. GCP在Kubernetes的集裝箱計算領域處於領先地位,並提供最實用和最易於管理的解決方案

  4. GCP是一個真正的No-Ops平臺,具有最方便的工具,如他們的Cloud Shell和Stackdriver監控解決方案

  • 試點平臺配置

GCP Cloud Shell說明

需要在GCP控制檯中從Google Cloud Shell運行以下說明。 這些腳本及其中使用的工具將自動配置為支持FSO平臺的CI / CD進程的Jenkins, 配置Compute Engine VM映像.

  • 需要的工具:

1.在您的本地開發環境中安裝firebase-tools包:

npm install -g firebase-tools

2.確保您在GCP項目的帳戶中擁有管理員/所有者權限

步驟:

  1. 在us-east1創建新的GCP項目

  2. 通過Firebase Web控制檯將GCP項目導入到Firebase

  3. 為我們的環境配置獲取一個Firebase CI token

    a. 在jenkins VM中,運行以下命令獲取CI token

  4. 啟用新GCP項目的計費

  5. 在新的Firebase項目上啟用“Blaze”計費包

  6. 啟用/配置以下API

    a. Cloud Resource Manager

  7. 在此沙箱項目的Firebase項目中啟用密碼驗證提供程序(以支持Android測試)

    a. 導航到與此GCP項目關聯的Firebase項目,然後從左側面板菜單中單擊Auth

  8. 在GCP項目中創建OAuth ID

    a. Go to API Manager > Credentials

  9. 獲取我們的環境配置文件的Firebase數據庫密碼

    a. Navigate to Firebase Console > Project Settings > Database > Show Secret copy the value into our config file.

  10. Clone your devops project

  11. 通過替換您的環境值創建您的GCP環境配置

    export GCP_PROJECT_ID="cicd-test"

注意:不要修改以下變量:JENKINS_URL,SLACK_CI_SERVER

./create-jenkins-instance.sh -f ./config.env

運行後腳本手動任務

1. 複製新推出的Jenkins Compute Engine VM的外部IP地址

2. In the google project, navigate to Networking > Cloud DNS:

使用以下模式創建2個新的DNS記錄:

Jenkins在Google Cloud的自動化安裝

  • 腳本是如何工作的

讀取config

set explicitly through the packerInstall functionPACKER_HOME=""

1. 安裝packer

verifyToolExists()

2. 創建firewall規則

gcloud compute firewall-rules create $rule_name --allow $rule_port --target-tags $rule_tags

3. 創建存儲配置文件的bucket

4. 創建ssh key

TIMESTAMP=`date +%s`

5. 創建 deploy key and webhook

6. 使用 gsutil 複製 config文件到bucket

7. 創建 service account gcloud iam service-accounts create

8. 更新 service account role

create a service account for performing deployments etcgcloud iam service-accounts create $SVC_ACCT_NAME --display-name "$SVC_ACCT_NAME-jenkins" > /tmp/service-account.infostore the name of the service-account so that we can perform actions on itSVC_ACCT_EMAIL=cat /tmp/service-account.info | grep 'email' | awk '{print $2}'the output from the create command for service accounts no longer provides the email, so we must build it ourselves for now...SVC_ACCT_EMAIL="$SVC_ACCT_NAME@$GCP_PROJECT_ID.iam.gserviceaccount.com"grant the required roles for the jenkins service-account to interact with the required servicesupdateProjectIamRole $GCP_PROJECT_ID $SVC_ACCT_EMAIL "roles/appengine.deployer"

9. Packer 去build image文件

Jenkins-master.vars

{

Jenkins-master.json

{

10. 從packer build出來的image, 用gcloud 創建 image

gcloud compute instances create $SVC_ACCT_NAME-jenkins --image $PACKER_IMAGE_NAME --custom-cpu 4 --custom-memory 8GiB --zone $GCE_AZ --boot-disk-type pd-standard --boot-disk-size 250GB --tags http-server,https-server,http-appserver --maintenance-policy MIGRATE

11. 部署一個sample to unlock default app engine

clone the google repo and deploy a dummy app-engine app to unlock the 'default' module so that we can begin doing real deploymentsAPP_ENGINE_DIR="/tmp/app-engine-setup-$TIMESTAMP"

12. 創建default container engine cluster(kubernets cluster)

gcloud container clusters create default --num-nodes 5

13. 安裝kubectl in jenkins vm

gcloud components install kubectl
  • 我們如何部署產品

每個產品的repo Jenkinsfile

  1. 部署之前,到jenkins vm裡面創建ssh key給你想要部署的程序使用

  2. 創建webhook

  3. A sample Jenkinsfile is like, 假定你已經有configMap.yaml, deployment.yaml 和service.yaml

configMap.yaml

apiVersion: v1

Deployment.yaml

apiVersion: extensions/v1beta1

service.yaml

apiVersion: v1

Dockerfile

FROM mhart/alpine-node:6we need grpc in node, thats why we add libc6-compatRUN \

Jenkinsfile

def config

現在你可以到kubernetes cluster裡面查看你的應用程序

Note, we can also integrate with container build trigger to build images for us.

https://cloud.google.com/conta ... ggers

  • 如需瞭解零空信息更多資訊及最新進展,敬請關注公眾號:零空科技&魔法隧道

相關推薦

推薦中...