标签: deployment

从 Chef recipe 返回而不会引发异常

有没有办法从 Chef recipe 返回而不引发异常?

说我有一个很长的食谱。我想在它的开头添加一个 ruby​​ 块,它将检查某些条件(例如目录是否存在)并停止处理配方(但继续执行 run_list 的其余部分),如果条件成功则不会引发异常。

条件执行 (only_if/not_if) 不能解决问题,因为我必须将条件添加到配方中的每个资源调用中,而它们可能有很多。

Opscode 的 wiki 中有一条评论,评论者询问相同但没有答案。

deployment configuration-management chef

5
推荐指数
1
解决办法
5983
查看次数

如何通过 gpo 轻松部署 MS 修补程序 KB959628 exe/msp?

我获得了一个 Microsoft 修补程序,我需要在整个域中部署该修补程序。我想使用 GPO,因为用户没有管理员权限并且 Office 不是从管理点部署的。它是在个人基础上随机部署的。我尝试将 exe 转换为 msi,但是当我运行 msi 时,它只是提取了 MSP 文件。

我是否可以通过 GPO 在不同版本的 Office 2003 中部署 MSP 或 EXE?

我拿了一份 Pro11.msi 并尝试运行 MSIexec.exe /a "[outlook.msi path]" /P "[Outlook.exe path]" 并且与 MSP 文件相同。两次我都收到一条错误消息“无法打开安装包。请联系应用程序供应商以验证这是一个有效的 Windows 安装程序包”。

另一个解决方案是否可以通过 WSUS 进行部署?

windows deployment group-policy

5
推荐指数
1
解决办法
8645
查看次数

GPG 在部署脚本中验证 git 标签

我们希望我们的部署过程直接从我们的 git 存储库中提取,但只有在签名时才激活新的更改(通过 git tag -s在使用 GPG 签名)签名。我发现很少有使用 GPG 验证 git 标签的工作流示例,所以我不确定是否有此类事情的“最佳实践”。

到目前为止,我们所拥有的看起来是这样的:

# discard erroneous local changes
git reset --hard HEAD

# get changes
git fetch
start=$(git rev-parse FETCH_HEAD)

# get new tags
git fetch --tags

# find most recent release tag
tag=$(git describe --abbrev=0 --match "release-*" $start)

if git tag -v $tag; then
  git checkout $tag
  ...do stuff...
fi
Run Code Online (Sandbox Code Playgroud)

这有意义吗?特别是,为了避免在部署过程中进行错误的本地更改git reset --hard HEAD,这样做是正确的吗?此外,记住FETCH_HEAD似乎是必要的,其他明智的标签随后HEAD不会出现在git describe. 有没有另一种方法可以做到这一点?

或者,如果您有一个使用签名标签进行验证的文档化部署工作流程,我会对指向它的链接感兴趣。

deployment git

5
推荐指数
1
解决办法
237
查看次数

如何自动化网站部署到生产,包括缩小 CSS/JS?

目前,我正在使用以下手动过程将我的 PHP 网站从登台部署到生产:

  • 使用在线 YUI 压缩工具缩小 CSS 和 JavaScript 文件。
  • 将原始 CSS 和 JavaScript 文件移动到另一个目录(以备份它们),然后用缩小的 CSS 和 JavaScript CSS 文件替换它们。
  • 开始将所有文件从我的临时服务器复制到我的 Windows PC。
  • 删除暂存 .htaccess 和索引文件,这样它们就不会被复制到生产服务器(这些文件具有暂存环境的特定内容)。
  • 打开 WinSCP 并转到生产服务器上的 Web 根目录,然后将主索引文件切换为“正在进行的更新”,这样如果任何访问者访问该站点,他们就会收到一条消息,说它暂时关闭。
  • 然后使用 WinSCP 从我的 PC 复制到生产 Web 服务器(这会覆盖服务器上的所有现有文件),大约需要 4 分钟才能看到有很多文件。
  • 使用 SSH 登录生产服务器并运行大约 5 个命令来为各种可写目录设置适当的权限,并确保所有内容仍在 www-root 组下。我认为使用 SSH 的上传过程会更改所有现有权限。
  • 将“正在进行的更新”索引文件切换回正常索引。

整个过程非常复杂,大约需要 5-10 分钟,我每次对网站进行更改时都必须这样做,因此它变成了一件苦差事。

现在有没有办法使用一些脚本工具来自动化这个过程?或者是否有一个很好的部署工具,人们可以使用它来完成所有这些工作?我的临时和生产机器是基于 Ubuntu 12.04 服务器的,所以我可能可以使用 bash 脚本来完成一些工作。

我可以看到到目前为止可以进行的一些改进是:

  • 向我的网站添加一些代码,以便它检测它是在 Staging 还是 Production 中,然后根据环境使用原始或缩小的 CSS/JavaScript 文件。这将节省我手动交换文件。
  • 使用命令行 YUI 压缩器并在需要时从脚本文件运行它。
  • 使用类似 rsync 的东西,这样它只会将更改的文件从我的登台服务器复制到生产服务器,而不是覆盖每个文件

我工作过的一家公司使用Fabric 命令行工具来自动化部署和做这种事情。但是,这是一个不错的选择还是有更好的工具?

linux ssh deployment rsync fabric

5
推荐指数
1
解决办法
1984
查看次数

使用 RPM 部署 Python 应用程序的首选方法是什么?

我是 dev-ops 方面的新手,我一直在努力将 Python 应用程序打包到 RPM(使用 python setup.py bdist_rpm)通过 Yum 部署到 centos VM。Chef 用于管理虚拟机。作为持续部署过程的一部分,Python 应用程序将在 virtualenv 中运行。

RPM 是否应该是智能的和自包含的,执行诸如创建/启动 virtualenv 环境、pip 安装所需的依赖项,然后最终配置一个 init 进程(在这种情况下为 virtualenv 启动 uwsgi REST 服务器进程)等操作?

或者,Chef recipe 是否应该管理构建 virtualenv 和 pip 安装依赖项,而 RPM 本身做一个简单的“python setup.py install”来将我的 Python 模块加载到 virtualenv 的 pythonX.Y/site-packages 文件夹中?

对“yum install/reinstall”调用(比如通过自动化过程)的后续操作适用于任何一种方法,但前者需要更复杂的 RPM,这可能不是“最佳实践”,对吗?前者确实允许独立安装,以后可以更干净地删除,并且更好地分离开发人员(Python)和开发操作员(厨师)之间的问题。请就“通常”所做的事情提出建议。

deployment python rpm chef

5
推荐指数
1
解决办法
1624
查看次数

我应该将部署设置保存在单独的存储库中吗?

我正在学习 Salt Stack 以将我的 Python 应用程序部署到 AWS 上的各个生产阶段。现在我在一个大存储库中拥有我所有的源代码和盐状态。

将 minion 状态文件保存在我的源中是否有任何实际或安全考虑?或者我应该把它们分开,为什么?

如果我确实将我的状态文件移动到一个单独的 salt-states 存储库中,我应该在哪里保存我的masterminion配置文件,或者它们不属于版本控制?

deployment version-control saltstack

5
推荐指数
1
解决办法
921
查看次数

组策略安装失败错误 %%1274

好吧,我已经花了一个上午的时间来解决一个非常艰难的问题。

PC 是带有 SP1 和所有 MS 补丁的 Win7 64 位机 常见错误 每个人都熟悉:从策略软件安装中分配应用程序 Adob​​e Reader X MUI 失败。错误是:%%1274

未能将更改应用到软件安装设置。通过组策略为该用户部署的软件的安装已延迟到下一次登录,因为必须在用户登录之前应用更改。错误是:%%1274

  1. gpupdate /force /boot
  2. 完成:始终在计算机启动和登录时等待网络 = 已启用
  3. 完成:启动策略处理等待时间 = 30, 120
  4. 完成:更新了网卡驱动程序
  5. 完成:删除 HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Group Policy
  6. 完成:GPO 权限检查:经过身份验证的用户具有读取访问权限
  7. 完成:共享权限检查:每个人都有完全访问权限
  8. 完成:文件夹权限检查:经过身份验证的用户具有读取和执行权限
  9. 完成:文件权限检查:继承
  10. 完成: PSExec -i -s cmd.exe 以确保我可以访问网络文件
  11. 完成: PSExec -i -s cmd.exe + 重新运行 explorer.exe 并手动启动 MSI 工作正常(他们安装)
  12. 完成:我遇到过带有空格的网络共享不起作用的情况,所以我添加了一个没有空格的共享名,但安装程序在该软件包(以及所有其他软件包)上仍然失败。

我已经在某些 WiFi 卡上看到过这种情况,但是这台计算机使用的是以太网。

有没有办法查看 MSIExec 日志以确切了解发生了什么?

顺便说一句,虽然所有旧的组策略设置都已应用,但我最近添加的一些 IE10 设置也拒绝应用。

deployment group-policy windows-server-2008-r2

5
推荐指数
1
解决办法
8294
查看次数

使用 Windows 部署工具安装 MSA(托管服务帐户)

我必须为一个将运行 IIS 和 MSMQ 的项目安装几个新的应用程序服务器 (2012R2)。我需要编写完整安装的脚本,因此我需要能够更改 IIS 应用程序池的权限。我计划为此使用 MSA,因为我不必在部署脚本中处理密码。

我的问题是“部署解决方案代理”在机器上作为本地系统运行,它无权更新 AD 中的所需设置以在本地机器上“安装”MSA。

有没有人让这个工作?我假设我可以委派特定计算机帐户的权限,但这也可能会变得混乱。

windows active-directory deployment windows-server-2012-r2 managed-service-accounts

5
推荐指数
0
解决办法
551
查看次数

在真实硬件上进行自动化软件测试

我目前正在工作的一个小型测试农场工作,尤其是在运行测试后重置机器的部分让我有些头疼。
在我们决定获得几台具有不同硬件配置的专用测试机器之前,计划是在一台使用 Hyper-V 的机器上运行测试,因此之后的清理只是删除实际 VM 的问题。
不幸的是,重置整台机器在时间上要贵一些,而且如果你经常这样做的话,我猜多年来硬件也会磨损。

我相信仅仅卸载已安装的软件是不够的,因为系统上可能会留下一些文件/可再发行文件,这使得后续的测试运行不太有用。
我还相信在测试机器上运行 Hyper-V 虚拟机会对测试结果产生不利影响,尤其是在较弱的硬件配置上。

我真的很想知道是否有一些现有的解决方案可以解决这个问题,以及最聪明的方法是什么。

automation windows deployment automated-testing

5
推荐指数
2
解决办法
120
查看次数

是否可以通过 CloudFormation 模板填充 S3 存储桶?

我需要将我的 CF 模板(GraphQL 架构、Lambda 源等)的一些文件存储到 S3 存储桶中,该存储桶也(希望)在同一模板中定义,因为这似乎是直接删除内容之外的唯一方法进入模板来做。我也在尝试提前考虑 CI/CD,如果检查这些文件并且 CI/CD 工具适当地移动它们会很好。

有没有办法将文件从模板复制到 S3?大多数人如何使用 CI/CD 做到这一点?

deployment amazon-web-services continuous-integration amazon-cloudformation aws-cli

5
推荐指数
1
解决办法
2406
查看次数