使用 Azure Pipelines 将项目部署到物理机
Deploy artifacts to physical machine with Azure Pipelines
我有一个使用 Azure 管道构建的项目,工件被发送到文件共享和 Azure DevOps。自托管代理当前用于构建我的项目的管道。现在我想将我的工件部署到我公司网络中的物理计算机上。 Artifacts是支持"silent installation mode"的安装文件,所以我用PowerShell执行对应的文件就可以全部安装了
我的问题是:我应该怎么做才能实现我的目标?我认为我会简单地创建一个发布管道(我使用 Microsoft 的经典 UI 管道编辑器)并添加必要的任务。最后一切都会像这样:
- 从构建产品的计算机复制工件 (A)
到要安装产品的计算机 (B)。
- 执行主要服务所需的服务安装
申请。
- 从主应用程序执行安装。这是
正确的做法还是我应该选择别的东西?
还有一个问题。我不太清楚我应该如何划分部署阶段,因为:步骤1仍然由计算机A上的代理完成。步骤2和3应该已经由另一个代理完成。因此,计算机 B 上也必须有一个代理(我总共需要两个代理,一个用于计算机 A 上的构建管道,一个用于目标计算机 B)。对吗?
我们有一个具有类似要求的 Web 应用程序,当我们将应用程序部署到该位置时,我们需要包含特定于位置的文件。
我不确定这是最佳路线,但我们在部署管道中使用了 Ansible。我们的 Ansible 剧本利用主机文件,其中包含要部署的位置和 jar 版本的变量。
同样,我们的情况不同,但应该一样。
例如,您也许可以这样做...
您的 Ansible 清单(主机)文件可能如下所示
[servers]
xxx.xxx.xxx.xxx
[all:vars]
app_name=mfgweb
env=qa
app_version=2020.03.4
*** If your artifact is a jar file
jar_group=com.somegroup
jar_name=some_jar <-- note: no extentsion
jar_version=2019.11.3
你的剧本可能看起来像这样
---
- hosts: localhost
connection: local
tasks:
- name: Find old working directories
find:
paths: /tmp
patterns: 'ansible.*'
file_type: directory
age: 2d
register: tmp_dirs
- name: Cleanup old working directories
file:
path: "{{ item }}"
state: absent
loop: "{{ tmp_dirs.files | map(attribute='path') | list }}"
- name: Create working directory
tempfile:
state: directory
suffix: work
register: workdir
- name: Download artifact
maven_artifact:
group_id: "{{ jar_group }}"
artifact_id: "{{ jar_name }}"
version: "{{ jar_version }}"
repository_url: "{{ artifacts_url }}"
username: "{{ artifacts_user }}"
password: "{{ artifacts_password }}"
verify_checksum: never
dest: "{{ workdir.path }}/{{ app_name }}/"
这只是一个示例,但您可以使用 yum and/or pip 在您的 playbook 中安装所需的软件。
Deploy artifacts to physical machine with Azure Pipelines
我觉得你已经很接近答案了,但我不确定我提供的建议是否是最好的,因为它更多的是一个品味问题,你可以在下面查看我的建议。
我们可以通过计算机 A 上的一个代理来实现这一点:
- 使用 Remote Copy 任务通过 计算机 A.
上的代理将工件复制到 computer B
- 在 计算机 A.
上使用 Powershell execute install files with command line arguments on remote computer 代理
这样的话,我们就不需要在B机上新建agent,也不需要划分部署阶段。
我有一个使用 Azure 管道构建的项目,工件被发送到文件共享和 Azure DevOps。自托管代理当前用于构建我的项目的管道。现在我想将我的工件部署到我公司网络中的物理计算机上。 Artifacts是支持"silent installation mode"的安装文件,所以我用PowerShell执行对应的文件就可以全部安装了
我的问题是:我应该怎么做才能实现我的目标?我认为我会简单地创建一个发布管道(我使用 Microsoft 的经典 UI 管道编辑器)并添加必要的任务。最后一切都会像这样:
- 从构建产品的计算机复制工件 (A) 到要安装产品的计算机 (B)。
- 执行主要服务所需的服务安装 申请。
- 从主应用程序执行安装。这是 正确的做法还是我应该选择别的东西?
还有一个问题。我不太清楚我应该如何划分部署阶段,因为:步骤1仍然由计算机A上的代理完成。步骤2和3应该已经由另一个代理完成。因此,计算机 B 上也必须有一个代理(我总共需要两个代理,一个用于计算机 A 上的构建管道,一个用于目标计算机 B)。对吗?
我们有一个具有类似要求的 Web 应用程序,当我们将应用程序部署到该位置时,我们需要包含特定于位置的文件。
我不确定这是最佳路线,但我们在部署管道中使用了 Ansible。我们的 Ansible 剧本利用主机文件,其中包含要部署的位置和 jar 版本的变量。
同样,我们的情况不同,但应该一样。
例如,您也许可以这样做...
您的 Ansible 清单(主机)文件可能如下所示
[servers]
xxx.xxx.xxx.xxx
[all:vars]
app_name=mfgweb
env=qa
app_version=2020.03.4
*** If your artifact is a jar file
jar_group=com.somegroup
jar_name=some_jar <-- note: no extentsion
jar_version=2019.11.3
你的剧本可能看起来像这样
---
- hosts: localhost
connection: local
tasks:
- name: Find old working directories
find:
paths: /tmp
patterns: 'ansible.*'
file_type: directory
age: 2d
register: tmp_dirs
- name: Cleanup old working directories
file:
path: "{{ item }}"
state: absent
loop: "{{ tmp_dirs.files | map(attribute='path') | list }}"
- name: Create working directory
tempfile:
state: directory
suffix: work
register: workdir
- name: Download artifact
maven_artifact:
group_id: "{{ jar_group }}"
artifact_id: "{{ jar_name }}"
version: "{{ jar_version }}"
repository_url: "{{ artifacts_url }}"
username: "{{ artifacts_user }}"
password: "{{ artifacts_password }}"
verify_checksum: never
dest: "{{ workdir.path }}/{{ app_name }}/"
这只是一个示例,但您可以使用 yum and/or pip 在您的 playbook 中安装所需的软件。
Deploy artifacts to physical machine with Azure Pipelines
我觉得你已经很接近答案了,但我不确定我提供的建议是否是最好的,因为它更多的是一个品味问题,你可以在下面查看我的建议。
我们可以通过计算机 A 上的一个代理来实现这一点:
- 使用 Remote Copy 任务通过 计算机 A. 上的代理将工件复制到
- 在 计算机 A. 上使用 Powershell execute install files with command line arguments on remote computer 代理
computer B
这样的话,我们就不需要在B机上新建agent,也不需要划分部署阶段。