これが私たちの環境です。
私の質問:
Keel のようなサードパーティのツールもありますが、Amazon ECR(ECRでのWebhookの問題)はサポートしていません。
任意の助けをいただければ幸いです。
同様のワークフローがあり、これが何らかの方向性の獲得に役立つことを願っています。私はCIにbitbucketパイプラインを使用していますが、Jenkinsも同様に動作するはずです。
これは、CIフローで行うことです。
my-cntnr:12
my-cntnr:12
)参照用のスクリプトは次のとおりです。
- composer install --no-interaction
- docker build -t cms .
- docker tag myrepo:latest 123456789.dkr.ecr.my-region.amazonaws.com/myrepo:$BITBUCKET_BUILD_NUMBER
- aws ecr get-login --no-include-email --region my-region >> login.sh
- sh login.sh
- docker Push 123456799.dkr.ecr.my-region.amazonaws.com/myrepo:$BITBUCKET_BUILD_NUMBER
- sh .docker/workload-update.sh // my curl script calling rancher API
注:Rancherを使用しているため、Rancher APIを使用してポッドとその構成を更新できます。
次に、KubernetesのECR認証情報部分について、シークレット(Kubernetesのみのエンティティ)を作成する必要があります。このシークレットはAWS ECRの詳細を使用して作成されます。次に、この秘密をpod.ymlでimage-pull-secretとして使用できます。これにより、k8にシークレットを使用し、ECRから画像を取得するように指示します
簡単に実行できる簡単なスクリプトがあります。
#
# RUN me where kubectl is available,& make sure to replace account,region etc
#
ACCOUNT=123456789
REGION=my-region
SECRET_NAME=${REGION}-ecr-registry
[email protected] ( can be anything)
#
# Fetch token (which will expire in 12 hours)
#
TOKEN=`aws ecr --region=$REGION get-authorization-token --output text --query authorizationData[].authorizationToken | base64 -d | cut -d: -f2`
#
# Create or replace registry secret
#
kubectl delete secret --ignore-not-found $SECRET_NAME
kubectl create secret docker-registry $SECRET_NAME \
--docker-server=https://${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com \
--docker-username=AWS \
--docker-password="${TOKEN}" \
--docker-email="${EMAIL}"
そして、これがpod.ymlでそれを使用する方法です
apiVersion: v1
kind: Pod
metadata:
name: my-app
labels:
app: my-app
spec:
containers:
- image: 123456789.dkr.ecr.my-region.amazonaws.com/my-repo
name: -cntnr
ports:
- containerPort: 8080
imagePullSecrets:
- name: my-secret-name ( this will be same as name of secret we created earlier)
プロセスについての詳細な記事も書いています。それを見つけてください こちら 。
環境間のプロモーションのためにGitOpsを使用してKubernetesの複数の環境でCI/CDを自動化し、プルリクエストで環境をプレビューする方法を確認したい場合は、チェックアウトしたいかもしれません DevOxx UKでのJenkins Xに関する最近の講演 ここでこれをGKEでライブデモします。 Jenkins Xは AWS、AKS、GKE、およびその他のkubernetesクラスター で動作しますが。
マスターブランチへの変更をマージすると、 Jenkins X はアプリの新しいセマンティックバージョン管理されたディストリビューション(pom.xml、jar、docker image、helmチャート)を作成します。その後、パイプラインはプルリクエストの生成を自動化し、GitOpsを介してすべての環境でアプリケーションを宣伝します。その後、アプリのリリースパイプラインの完了後にバージョンをロールバックすることを決定できます(環境パイプラインもあるため)。
はい、可能です。 KubernetesクラスターにAmazon ECRを使用できますが、 認証情報でシークレットを作成する が必要です。 Kubernetesクラスターに更新を自動的に展開するJenkinsのパイプラインを開発できます。このためには、トリガーを構成する必要があります。たとえば、イメージを構築する前のパイプラインが正常に完了したなどです。 kubernetes-plugin を使用してパイプラインを開発するか、新しいイメージタグでkubectl updateを呼び出すことができます。 helm など、展開用のデフォルト更新またはサードパーティツールを使用してクラスターを更新できます。
* updates
良いドキュメントがあります: AWS EC2 Container Registryを使用 JenkinsとKubernetesの場合、 kube2iam を使用することをお勧めします。これは、認証トークンの期限切れを回避するのに役立ちます。 KubernetesノードとJenkinsのカスタムロールを作成します。また、kube2iamのロールを割り当てる権限を追加することを忘れないでください。