在此过程中,提出了使Powershell脚本自动化交付的想法,并使系统管理员之间的团队工作与在不同服务器上运行的脚本同步。 本文专为不熟悉git,gitlab,ci / cd和其他devop麻烦的简单Win管理员而设计,因此,如果您有兴趣,可以咨询cat。
让我们从工作中出现的问题开始
- 缺乏版本控制;
- 在完成脚本时同事之间的不一致;
- 同事离开时丢失有用的脚本;
- 手动将脚本交付到执行位置;
- 平淡的混乱。
在孤立的情况下,所有这些问题实际上都是很小的,但是当所有这些问题都已经达到团队规模和大量脚本时,我想按顺序进行处理。
为了简化我的生活,我使用了出色的Gitlab产品,该产品已经与我们一起部署并被编码器使用。 我将不考虑
gitlab和
gitlab-runner 的安装过程,只是要澄清一下,我们已经有一个配置了
gitlab的域授权和一个单独的带有Windows
PowerShell的 Windows运行器,它们将执行我们的部署任务。 对于脚本编写,我使用了出色的
Visual Studio Code 。
我们在gitlab中组织工作
所以我们开始吧,对于初学者来说,我们需要在gitlab中建立一个小组,其中将包括我们所有的系统管理员。
接下来,将我们的同事添加到具有开发者权限的成员中,您可以开始创建项目。 我们在小组中创建项目,以便我们的同事可以自动访问该项目。
创建项目后,在第一页上将提供有关“下一步操作”主题的所有提示。 就我们而言,我们需要从gitlab中的工作站启动现有文件。 例如,所有这些都位于目录“ E:\ scripts \ powershellmegaproject”中。 使用适当的提示并在您的计算机上执行:
cd E:\scripts\powershellmegaproject git init git remote add origin http://gitlab.domain.net/sysadminsdev/powershellmegaproject.git git add . git commit -m "Initial commit" git push -u origin master
宾果! 现在,来自“ E:\ scripts \ powershellmegaproject”目录的所有文件都在我们的项目中。
接下来是什么? 打开VSCode并尝试更改此目录中的我们的powershell脚本。 保存文件后,我们将在“源代码管理”部分中看到一条通知,您可以在其中看到所做的更改并进行提交。 接下来,我们推送到服务器:
让我们在gitlab中查看项目网站,其中将包含文件的实际内容,并且在提交历史中您可以跟踪更改。
CI / CD设置
现在是时候配置脚本向服务器的交付了。 为了使CI / CD正常工作,您的项目必须有运行器。 您可以在admin gitlab中指定它-运行程序,也可以使用共享运行程序。
现在到项目。 为了使CI / CD正常工作,您需要创建一个.gitlab-ci.yml文件,其中带有我们项目所在目录中的动作说明(转到gitlab-CI / CD-Pipelines菜单时,也可以看到有关此操作的提示和帮助)。 您可以选择各种传递文件的方法,从复制文件到rsync或git pull到所需的服务器。 由于我们正在考虑最简单的方案,因此它将仅复制powershell。 为此,您需要使目标服务器上的文件夹的脚本在网络上公开可用,并为运行gitlab-runner服务的用户提供更改访问权限。
用简单的内容填充.gitlab-ci.yml:
deploy_stage: variables: DEST_DIR: \\srv-megaserver\scripts\powershellmegaproject script: - remove-item -path $DEST_DIR\* -recurse - gci -Recurse | Copy-Item -Destination $DEST_DIR
在这里,我们在变量中写入目录的路径(在其他项目中,您可以简单地复制此文件并更改目标目录),并使用简单的powershell命令,首先删除目录的全部内容,然后将项目中的所有内容复制到此文件夹中。
提交,推送更改并检查。 在我们服务器上的文件夹中,所有文件都应更新。 您可以在gitlab-ci / cd-管道的同一部分中看到Pipeline的状态和执行,这是成功执行的示例:
Running with gitlab-runner 11.3.1~beta.4.g0aa5179e (0aa5179e) on gl-runner2-windows a24eda81 Using Shell executor... Running on SRV-GL-RUNNER2... Fetching changes... HEAD is now at e6e9a2c update ci file From http://gitlab.domain.net/sysadminsdev/powershellmegaproject e6e9a2c..5f5cfce master -> origin/master Checking out 5f5cfceb as master... Skipping Git submodules setup $ remove-item -path $DEST_DIR\* -recurse $ gci -Recurse | Copy-Item -Destination $DEST_DIR Job succeeded
假设已经在此服务器上配置了一个任务,以从调度程序中的项目执行此脚本,因此,我们总能获得实际项目文件的执行。同事怎么了?
很简单,为项目创建一个文件夹,以ps / cmd进入该文件夹,然后将项目克隆到自己的位置。
cd e:\projects git clone http://gitlab.domain.net/sysadminsdev/powershellmegaproject.git
一切,然后只需通过打开文件夹,进行提交和推送即可在VSCode中工作。
结果是我们取得了什么?
- 所有脚本都存储在存储库中;
- 整个管理组都可以使用脚本;
- 所有的变化都可以在故事中看到;
- 任何新创建的管理员都可以立即看到所有的进展,而不必在服务器周围跑来跑去,只需找出“在哪里做”即可;
- 所有生产性变更都会自动发送到“生产性工作场所”。
我们消除了所有问题,也大大简化了我们的团队生活。
红利
将README.md文件添加到项目目录中,以描述这些脚本中发生的情况。
添加一个Changelog文件来描述更改。
ps:您还能做什么? 您可以在docker中扭曲运行器, 可以在ansible中配置调度程序 ,您仍然可以做很多更复杂的事情,但是本文的目的是简化对初学者的理解。