shopsys / deployment
简化了Shopsys平台应用程序在Kubernetes中的部署。它提供了一套直观的工具和配置,使您能够无缝编排和管理部署过程。
README
如何安装
-
安装包
composer require shopsys/deployment
-
将deploy-project.sh 复制到您的项目中到
deploy/deploy-project.sh
-
创建或复制 带有登录凭证的htpasswd文件到
deploy/basicHttpAuth
basicHttpAuth的默认登录为
username/password
关于如何更改http认证凭证的信息,请参阅更改HTTP认证 -
更新您的
gitlab-ci.yml
-
创建一个名为deploy的新阶段
stages: - build - test - review + - deploy - service
-
添加新的部署模板
.deploy: &deploy image: name: shopsys/kubernetes-buildpack:0.9 stage: deploy tags: - docker rules: - if: '$CI_PIPELINE_SOURCE == "schedule"' when: never script: - docker create -ti --name image ${TAG} bash - docker cp image:/var/www/html/var/ ./ - mkdir -p /root/.kube/ && echo "${KUBE_CONFIG}" > /root/.kube/config - chmod +x ./deploy/deploy-project.sh && ./deploy/deploy-project.sh deploy
-
添加用于部署开发和生产的作业
deploy:production: <<: *deploy resource_group: deploy_production variables: KUBE_CONFIG: ${KUBE_CONFIG_PROD} needs: - build rules: - if: '$CI_PIPELINE_SOURCE == "schedule"' when: never - if: '$CI_COMMIT_BRANCH == "master" || $CI_COMMIT_BRANCH =~ /^master-.*$/' when: manual allow_failure: false environment: name: production url: https://${DOMAIN_HOSTNAME_1} deploy:devel: <<: *deploy resource_group: deploy_devel variables: KUBE_CONFIG: ${KUBE_CONFIG_DEVEL} needs: - build - test:standards - test:functional - test:acceptance rules: - if: '$CI_PIPELINE_SOURCE == "schedule"' when: never - if: '$CI_COMMIT_BRANCH == "devel" || $CI_COMMIT_BRANCH =~ /^devel-.*$/' environment: name: devel url: https://${DOMAIN_HOSTNAME_1}
-
-
在Gitlab中设置环境变量(设置 -> CI/CD -> 变量)
-
推送更改并享受乐趣
环境变量
环境变量可以在Gitlab(设置 -> CI/CD -> 变量)中设置
如果您想定义自定义变量,请参阅定义自定义变量部分
*1)凭据可以在Gitlab(设置 -> 仓库 -> 部署令牌)中生成,仅具有read_registry
作用域
您可以添加自定义变量。不要忘记编辑deploy-project.sh
自定义部署
您可以通过将自定义清单放入项目中orchestration/kubernetes/
路径来覆盖Kubernetes清单
您需要镜像文件夹才能覆盖清单
创建新的cron实例
-
创建运行cron的新Phing目标
<target name="cron-customers" description="...."> <exec executable="${path.php.executable}" passthru="true" checkreturn="true"> <arg value="${path.bin-console}" /> <arg value="shopsys:cron" /> <arg value="--instance-name=customers" /> </exec> </target>
-
在部署配置文件deploy-project.sh中声明新的cron
键使用在步骤1中创建的Phing目标,值表示crontab定时器
... declare -A CRON_INSTANCES=( ["cron"]='*/5 * * * *' + ["cron-customers"]='*/5 * * * *' ) ...
添加更多或更少的域名
此示例将使用3个域名
-
为每个域名创建环境变量
-
... function deploy() { DOMAINS=( DOMAIN_HOSTNAME_1 DOMAIN_HOSTNAME_2 + DOMAIN_HOSTNAME_3 ) ...
定义自定义变量
- 创建环境变量
- 编辑deploy-project.sh
... declare -A ENVIRONMENT_VARIABLES=( ["DATABASE_HOST"]=${POSTGRES_DATABASE_IP_ADDRESS} ["DATABASE_NAME"]=${PROJECT_NAME} ["DATABASE_PORT"]=${POSTGRES_DATABASE_PORT} ) ...
左侧是应用程序中变量的名称,右侧是Gitlab中变量的名称。
设置自定义Redis版本
将新变量添加到deploy/deploy-project.sh
并指定您的redis版本
...
BASIC_AUTH_PATH="${BASE_PATH}/deploy/basicHttpAuth"
DEPLOY_TARGET_PATH="${BASE_PATH}/var/deployment/deploy"
+ REDIS_VERSION='redis:4.0-alpine'
function deploy() {
...
启用水平Pod自动扩展
将新变量添加到deploy/deploy-project.sh
以启用Pod自动扩展
- 启用此功能
... function deploy() { DOMAINS=( DOMAIN_HOSTNAME_1 ... ) + ENABLE_AUTOSCALING=true ...
- 如果您需要更多副本,则使用参数
MAX_PHP_FPM_REPLICAS
指定最大副本数(默认为2个副本)
如何仅启动某些域名
将新数组FORCE_HTTP_AUTH_IN_PRODUCTION
添加到deploy/deploy-project.sh
,其中包含应无HTTP认证不可访问的域名
... ) + # This setting has no effect when `RUNNING_PRODUCTION` is set to `0` + FORCE_HTTP_AUTH_IN_PRODUCTION=( + DOMAIN_HOSTNAME_2 + ) declare -A ENVIRONMENT_VARIABLES=( ...
更改HTTP认证
- 生成新的HTTP认证字符串(例如这里),或通过命令
htpasswd -nb username password
- 将新的HTTP认证字符串替换或添加到
deploy/basicHttpAuth
- 在
deploy/deploy-project.sh
中将新凭据设置到变量中
...
function deploy() {
DOMAINS=(
DOMAIN_HOSTNAME_1
...
)
+ HTTP_AUTH_CREDENTIALS="username:password"
...
白名单IP地址
只需将IP地址添加到deploy/deploy-project.sh
中的WHITELIST_IPS
变量即可
提示:最好将所有IP地址描述如下
# Some IP Another IP Some service WHITELIST_IPS="8.8.8.8, 217.23.44.23, 93.111.234.111"
在Slack中通知部署
您可以直接在Slack频道中启用部署的自动通知。它有一些功能
- 通知部署的开始,并预览功能
提示
如果您使用Jira,并在提交信息中使用[ABC-123]
,则它将自动创建一个链接到由JIRA_URL
环境变量指定的URL
提示
脚本会排除包含!ignore
关键词的提交
- 通知部署结束。有两种可能的警报 - 成功和错误
此脚本仅适用于Gitlab和Slack,但您可以通过覆盖deploy/slack-notification.py
来更改行为。对于Slack,您必须创建一个具有权限(chat:write
、chat:write.public
)的Slack应用。
下表中必须设置一些环境变量列表