K8Sで+ジェンキンス+ githubの+環境パイプラインはdockerhub使用してアプリケーションを配備します

K8S +ジェンキンス+ githubの+ dockerhubでアプリケーションを展開:
ジェンキンスCI / CD達成するための2つの方法があります
シェルコードによって達成1、自由なスタイルを、
ジェンキンスコードまたはjenkinsfileファイルによって達成2、パイプラインの組立ライン、
メソッドを作成するには、2つの方法がありますパイプライン:
1は、 ;あなたはジェンキンスジェンキンスのWeb UIインターフェイスにコードを直接入力することができます
もJenkinsfileスクリプトファイルを作成することにより、プロジェクトのソースコードのライブラリに配置することができ、2

新しいプロジェクトの手順の構築:
1. GitHubの上で新しいプロジェクトを作成します。
2、ダウンローカル項目クローン
3、コーディング、dockerfile、jenkinsfile、YAMLファイルは、アプリケーション展開
4、GitHubのにアイテムコードプッシュを
5、ジェンキンスを使用。 CI / CDの実現
例を:
1、のGitHubのnginx-デモに新しいプロジェクトを(省略)
2、ローカル192.168.1.244にクローン化されたコード
$ Gitのクローンhttps://github.com/dongyali521521/nginx-demo
を除いて、第1のクローン各クローンは、最初に元のプロジェクトを削除してから、クローンしなければならない後
$ RM -rf nginxの-デモ
3、コードの変更
$のCDのnginxの-デモ/
$のVimのindex.htmlを
4に、修正GitHubのにコードをプッシュする
。$ gitの追加を
$コミットgitの「2222」-m
$ gitのgithubのユーザー名とパスワードを入力するためのプッシュ#
5は、CI / CDを実装するには、新しいタスクをジェンキンス

一般に、アプリケーション・ファイルのアプリケーション・コード、dockerfile、jenkinsfile YAMLおよび展開に加えて、ソースコード管理と一緒に配置されています。
前のCI / CD準備を実装する必要があります。プロジェクトの中で、少なくとも次のドキュメントが含ま
$のCDのnginxの-デモ/
$ LS
Dockerfile Jenkinsfile xxx.yaml index.htmlをREADME.mdを

:今度はCI / CD(パイプラインモード)を達成し、次のステップを含むK8Sでジェンキンスを使用して
1、Gitのハブからジェンキンススレーブポッド作業ディレクトリ/ホーム/ジェンキンス/エージェント/ワークスペース/パイプライン名にクローニングされたプロジェクトに
2、テスト
、3 Dockerfileミラー用いて構築
4、ミラーハブドッカーをプッシュするように構成されている
。5、単に内蔵修飾YAML画像ファイル名ミラー
6、アプリケーションをデプロイするクラスタK8S
コードが上記ステップジェンキンスマスタータスク構成インタフェースに入力することができまた、ライブラリプロジェクトファイルの管理Jenkinsfileソースに書き込むことができる
最初の4つのステップは、CIの段階に属し、二段階の最終段階は、CDに属し

ジェンキンスパイプラインいくつかの中核となる概念:
ノード:ノードは、ノードがノードジェンキンス、マスタまたはスレーブである
ステージ:ステージ、パイプラインステージの数に分割することができ、各々は、操作ステージのセットを表し
工程:ステップを、ステップが必須です操作部は、単語を印刷することができるミラードッカーを構築することができます

Jenkinsのコードでは、CI / CDは、ステップシミュレートし
、新しいタスク名---- ----組立ラインを
----スクリプトに次の行を入力して、すぐに建物を保存します

node('dongyali-jnlp') {
    stage('Clone') {
      echo "1.Clone Stage"
    }
    stage('Test') {
      echo "2.Test Stage"
    }
    stage('Build') {
      echo "3.Build Docker Image Stage"
    }
    stage('Push') {
      echo "4.Push Docker Image Stage"
    }
    stage('YAML') {
      echo "5. Change YAML File Stage"
    }
    stage('Deploy') {
      echo "6. Deploy Stage"
    }
}

nginxの-デモ・プロジェクトはすでに開発され、ハブのgitにアップロードされたと仮定し
た文書が含ま:
Dockerkfile k8s.yaml index.htmlをREADME.md
k8s.yamlすると、アプリケーションファイルをデプロイすることである
$のCD nginxの-デモ/
$のCAT Dockerfileを

FROM docker.io/nginx
MAINTAINER dongyali
ADD index.html /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx", "-g","daemon off;"]

$猫k8s.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-demo
  namespace: default
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx-demo
    spec:
      containers:
      - image: dongyali521521/nginx-demo:<BUILD_TAG>
        imagePullPolicy: IfNotPresent
        name: nginx-demo
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-demo
  namespace: default
spec:
  selector:
    app: nginx-demo
  type: NodePort
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    name: myapp-http

名前空間を指定しない場合はジェンキンススレーブポッドKUBE-OPSは、空間内で動作するため、デフォルトのアプリケーションは、K8SクラスタKUBE-OPS空間に展開されます。

ジェンキンスで上記の項目を展開し、次の開始:
適用後のたびにミラー再デプロイのgitのコミット構築するために、そのタグの記録のgitの使用は、ミラーをコミットするので
、時間に、安全のためにドッカハブを、暗号化がミラー構築をプッシュする必要がありますユーザー名とパスワード
の資格情報----店舗は、資格情報を追加するためのジェンキンス---- ----グローバル資格情報次ジェンキンにスコープ:
ユーザ名:ドッカハブユーザー名
パスワード:ドッキングウィンドウハブユーザパスワード入力
IDを:dockerHub、缶を何気なく後で書き込みを要求される
、ユーザーが選択した環境に展開するために、CD段階の前に手動での介入を必要とし始めた
http://192.168.1.243:30003
新しいタスク名---- ----パイプラインの
スクリプト以下のパイプラインで入力すぐに構築された内容を保存します----

node('dongyali-jnlp') {
    stage('Clone') {
        echo "1.Clone Stage"
        git url: "https://github.com/cnych/jenkins-demo.git"
        script {
            build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
        }
    }
    stage('Test') {
      echo "2.Test Stage"
    }
    stage('Build') {
        echo "3.Build Docker Image Stage"
        sh "docker build -t dongyali521521/nginx-demo:${build_tag} ."
    }
    stage('Push') {
        echo "4.Push Docker Image Stage"
        withCredentials([usernamePassword(credentialsId: 'dockerHub', passwordVariable: 'dockerHubPassword', usernameVariable: 'dockerHubUser')]) {
            sh "docker login -u ${dockerHubUser} -p ${dockerHubPassword}"
            sh "docker push dongyali521521/nginx-demo:${build_tag}"
        }
    }
    stage('Deploy') {
        echo "5. Deploy Stage"
        def userInput = input(
            id: 'userInput',
            message: 'Choose a deploy environment',
            parameters: [
                [
                    $class: 'ChoiceParameterDefinition',
                    choices: "Dev\nQA\nProd",
                    name: 'Env'
                ]
            ]
        )
        echo "This is a deploy step to ${userInput}"
        sh "sed -i 's/<BUILD_TAG>/${build_tag}/' k8s.yaml"
        if (userInput == "Dev") {
            // deploy dev stuff
        } else if (userInput == "QA"){
            // deploy qa stuff
        } else {
            // deploy prod stuff
        }
        sh "kubectl apply -f k8s.yaml --record"
    }
}

すべての建物、新しいジェンキンススレーブポッド開始します
Viewの展開を:
$ kubectl GET POD
実行のnginx-DEMO-65f6f679c6-5ljvd 1/1 0 34メートル
実行のnginx-デモ-65f6f679c6-p4g6m 1/1 0 34メートル
のnginx-demo-を実行-xr7mx 1/1 0 65f6f679c6 34メートル
$ kubectl GET SVC
のnginx-デモNodePort 10.103.13.141 <なし> 80:30185 / TCP、18時間の
HTTP:// HTTP://192.168.1.243:30185 /

次に、アプリケーションデプロイするには、次jenkinsfileファイルを使用して
、プロジェクトのディレクトリのnginx-デモでJenkinsfileファイルを追加するために、そしてハブのgitにアップロード
$のCDのnginxの-デモ/
$ CAT Jenkinsfile

node('dongyali-jnlp') {
    stage('Prepare') {
        echo "1.Prepare Stage"
        checkout scm
        script {
            build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
        }
    }
    stage('Test') {
      echo "2.Test Stage"
    }
    stage('Build') {
        echo "3.Build Docker Image Stage"
        sh "docker build -t dongyali521521/nginx-demo:${build_tag} ."
    }
    stage('Push') {
        echo "4.Push Docker Image Stage"
        withCredentials([usernamePassword(credentialsId: 'dockerHub', passwordVariable: 'dockerHubPassword', usernameVariable: 'dockerHubUser')]) {
            sh "docker login -u ${dockerHubUser} -p ${dockerHubPassword}"
            sh "docker push dongyali521521/nginx-demo:${build_tag}"
        }
    }
    stage('Deploy') {
        echo "5. Deploy Stage"
        def userInput = input(
            id: 'userInput',
            message: 'Choose a deploy environment',
            parameters: [
                [
                    $class: 'ChoiceParameterDefinition',
                    choices: "Dev\nQA\nProd",
                    name: 'Env'
                ]
            ]
        )
        echo "This is a deploy step to ${userInput}"
        sh "sed -i 's/<BUILD_TAG>/${build_tag}/' k8s.yaml"
        if (userInput == "Dev") {
            // deploy dev stuff
        } else if (userInput == "QA"){
            // deploy qa stuff
        } else {
            // deploy prod stuff
        }
        sh "kubectl apply -f k8s.yaml --record"
    }
}

Jenkinsfile、ライブラリ内の他のgitのハブのソースコードは、その最初のステップのクローンを作成する必要はありませんので、代わりにチェックアウトSCM

:次に構成タスク]インターフェイスオプションジェンキンス
パイプライン----からのパイプラインSCMスクリプト
SCM:Gitの
リポジトリのURL:https://github.com/dongyali521521/nginx-demo
資格情報:いいえ
構築に保存。

おすすめ

転載: blog.51cto.com/dongdong/2435877
おすすめ