目次
3: docker|jenkins\k8s\pass\git 間の関係
6.1 プロジェクト デプロイメント エラー コンテナー...
6.2 jenkins デプロイメント エラー: オブジェクトがありません...
7: 組立ラインでパス プラットフォーム プロジェクトを構築する方法
序文:
k8s の基本アプリケーション、サーバー クラスター、UI ページは、オリジナルのファクトリーから提供された運用ドキュメントに従って構築できますが、この記事ではこれに基づいてプロジェクトをデプロイし、サービスをアップグレードする方法についてのみ説明します。
1: パスプラットフォームの利点
パスプラットフォームを使用する理由
パス プラットフォームは主に、ソフトウェア リソース (ミドルウェア、オペレーティング環境) の迅速な供給と迅速な展開の問題を解決します。
2 つ目は、サーバーなどの問題によって展開上の問題や運用上の問題が発生した場合に備えて、生成された環境コードの動作環境 (つまり、イメージ) がテスト環境と一致していることを確認することです。
2: パスプラットフォームの関連要素
コンテナと仮想マシン:
1. コンテナはプロセスとして実行され、ホストのカーネルを他のコンテナと共有します。非常に軽量であり、仮想マシンが実行されると、それは完全なオペレーティング システムになります。
2.docker の基本コンポーネント:
Docker イメージ: ユーザーが Docker コンテナを作成するためのテンプレート。イメージに基づいて迅速にデプロイできます。
Docker コンテナ: 操作をミラーリングするエンティティ。各コンテナは完全な Linux システムに相当します。
docker ウェアハウス: ミラー イメージを保存するサーバー。jenkins がミラー イメージを作成するとき、ビルド後にウェアハウスにプッシュされます。
3.k8s
コアは呼び出しとスケジューリングであり、コンテナの操作を担当し、その後にサーバー コンテナのリソース、ネットワーク アクセス、ストレージ、セキュリティなどを管理します。
ノード: 通常のポッド、特定のサービス、管理
rancher: k8s 管理プラットフォーム ページ、一般的なプロジェクト管理用の ui ページ
3: docker|jenkins\k8s\pass\git 間の関係
1.docker イメージ、リモート git コードに依存
3. Jenkins は、スクリプトの実行、コードのコンパイル、2dcker イメージの生成、港湾倉庫のアップロード、およびプロジェクトを初期化するためのコンテナ ノード構成の k8s へのプッシュを担当します。
4. 構成に従ってプロジェクトを構築するためのリソースのスケジュール設定
5. パスが依存する動作環境は docker イメージに依存します
ドキュメントを改善するための TODO フォローアップ
4: プロジェクトでのパスの使用方法
簡単なポイントは、プロジェクト内に新しいスクリプト フォルダーを作成し、スクリプトとジェンキンを通じてビルド サービスを完了することです。
含まれるもの: イメージの生成、イメージのアップロード、展開ファイルの生成、サービスの展開。
たとえば、スクリプトは次のとおりです。
dockerfile: ミラー構成を作成し、jar を準備して、jar コマンドを開始します
テンプレート: デプロイメント ファイル、ポッドによって要求されたリソース (例: cpu\memory\pod\load\health check など)。
build.sh: mvn はクリーンとインストールに依存します
create: コンポーネント内のパラメータはスクリプト内で自動的に置き換えられ、最終的なテンプレート展開ファイルが生成されます。
getversion: イメージ ID を生成します
jenkinsfile: Jenkins ビルドサービス実行スクリプト (実行プロセス、ミラーイメージ、アップロード、マップのロード、変数の置換、k8s デプロイメント、その他のプロセス全体)
1.dockfile:
FROM IP:端口号/public/jdk-monitor:1.8.0
COPY ./项目名/target/jar包名.jar /app/项目名/service/
EXPOSE 8080
WORKDIR /app/项目名/service/
CMD java -javaagent:/jmx-exporter/jmx_prometheus_javaagent-javaagent-0.16.1.jar=6060:
/jmx-jmxexporter/prometheus-jmx-config.yaml
-jar ${JAVA_ARGS} ${JAVA_OPTS} /app/项目名/service/jar包.jar
--spring.config.location=/app/项目名/service/conf
2.build.sh
#!/bin/bash
mvn clean install
3.getversion:以git提交代码唯一值生成镜像id
#!/bin/bash
#接受变量
paths=$1
name=$2
id=$3
files=$(ls $paths)
ver= git reflog | head -n 1 | awk '{print $1}'
for file in $files
do
if [ "${file##*.}" = "jar" ];then
str = ${file#${name}-*}
version = ${name}-${id}-${ver}
echo $version
fi
done
4.create-configmap:替换变量,生成最终部署文件,以及生成configmap并上传服务
#!/bin/bash
#接受变量
PIPELINE_DIR=$1
APP=$2
ENV=$3
NAMESPACE=$4
IMAGE_REGISTRY=$5
PROJECT_NAME=$6
PORT=$7
PROJECT_ACTIVE=$3
BUILD_NUMBER=$9
PROJECT_VERSION=$8
mkdir -p ${PIPELINE_DIR}/deploy/${APP}/${ENV}
#开始替换项目配置变量,active
sed -i s/"PROJECT_ACTIVE"/"${PROJECT_ACTIVE}"/g
项目名/src/main/resources/application.yml
#迁移项目配置文件路径
cp 项目名称/src/main/resource/*.yml /app/项目名/service/
#生成k8s configmap,放到指定命名空间项目下
APPLICATION=${APP}/src/main/resources/application.yml
APPLICATION_DEV=${APP}/src/main/resources/application-dev.yml
kubectl -n ${NAMESPACE} crate configmap ${APP} --from-file=${APPLICATION} --from-file=${APPLICATION_DEV} --dry-run=client -o yaml > ${PIPELINE_DIR}/deploy/${APP}/${ENV}
/${APP}-configmap.yaml
#接收镜像id,替换部署文件
VERSION = 'sh ${PIPELINE_DIR}/getversion.sh 项目名、target ${APP} ${PROJECT_VERSION} '
#开始替换部署文件变量
#镜像仓库地址
sed -i s/"IMAGE_REGISTRY"/"${IMAGE_REGISTRY}" /g ${PIPELINE_DIR}/${APP}/Template.yaml
#项目名称(应用pod)
sed -i s/"PROJECT_NAME"/"${PROJECT_NAME}" /g ${PIPELINE_DIR}/${APP}/Template.yaml
#服务暴漏外部访问端口号
sed -i s/"SERCVER_PORT"/"${PORT}" /g ${PIPELINE_DIR}/${APP}/Template.yaml
#项目名(集群中项目总名称)
sed -i s/"APP"/"${APP}" /g ${PIPELINE_DIR}/${APP}/Template.yaml
#镜像id
sed -i s/"VERSION"/"${VERSION}" /g ${PIPELINE_DIR}/${APP}/Template.yaml
#命名空间
sed -i s/"NAMESPACE"/"${NAMESPACE}" /g ${PIPELINE_DIR}/${APP}/Template.yaml
#环境变量
sed -i s/"DEPLOY_ENV"/"${ENV}" /g ${PIPELINE_DIR}/${APP}/Template.yaml
cp ${PIPELINE_DIR}/${APP}/Template.yaml ${PIPELINE_DIR}/deploy/${APP}/${APP}-configmap.yaml
cp ${PIPELINE_DIR}/deploy/${APP}/${ENV}/${APP}-configmap.yaml ${PIPELINE_DIR}/deploy/${APP}/${APP}-项目配置config.yaml
ジェンキンスファイル:
テンプレート.yaml
yaml 中国語のコメント:
上記の Jenkins をデプロイするときの参照パラメーターの意味: