前言
随着多云环境和DevOps普及,越来多的DevOps工程师要面临云上与云下资源的自动化管理问题。 作为全球领先的Artifact Managenment软件供应商,JFrog的Artifactory也被众多知名企业采用,成为当前最流行的devops工具之一。那么通过什么方法能够在我们的云环境中快速部署一套Artifactory呢?相信大家都会立刻想起另外一个知名的IaC工具terraform。 JFrog正式提供了terraform插件,可以让大家通过IaC的方式快速部署Artifactory。
Terraform新增Artifactory插件
Terraform是HashiCorp提供的基础架构即代码工具,可用于以安全,可重复的方式构建,更改和管理基础架构。 使用称为HashiCorp配置语言(HCL)的配置语言,操作员和基础架构团队可以通过易于理解的自动化部署来管理环境。
Terraform的Artifactory Provider是一个免费插件,该插件扩展了HCL以能够构建Artifactory实例。它使基础架构管理员可以通过Terraform脚本配置Artifactory信息库,权限等。
一旦能够自动完成Artifactory的配置,便可以在多个Artifactory实例或数百个Artifactory实例中可靠地复制这些配置。
通过Terraform Provider加载Artifacotry配置
可以通过将以下代码段添加到.tf文件中来在Terraform脚本中启用该插件。 required_providers声明将自动从Terraform注册表中加载插件。
terraform {
required_providers {
artifactory = {
source = "jfrog/artifactory"
version = "2.2.4"
}
}
}
variable "artifactory_url" {
description = "The base URL of the Artifactory deployment"
type = string
}
variable "artifactory_username" {
description = "The username for the Artifactory administrator"
type = string
}
variable "artifactory_password" {
description = "The password for the Artifactory administrator"
type = string
}
provider "artifactory" {
# Configuration options
url = "${var.artifactory_url}"
username = "${var.artifactory_username}"
password = "${var.artifactory_password}"
}
需要注意以上配置文件通过明文存储Artifacotry的登录信息,因此对provider的配置文件建议通过权限设定用户读取的范围。另外也可以参考以下文章官方处理terraform中secrt信息的方法(https://blog.gruntwork.io/a-comprehensive-guide-to-managing-secrets-in-your-terraform-code-1d586955ace1#4df5)
并且Artifactory除了使用用户名/密码方式外,还可以使用API key或者access token方式进行访问。
通过resource方法创建Repositories
在使用terraform的artifactory 插件后可以resource字段定义一个Artifacotry的仓库,这个也是terraform标准语法对象,完全没有改变terraform玩家的使用习惯
# Create a new repository
resource "artifactory_local_repository" "pypi-libs" {
key = "terraform-pypi-libs"
package_type = "pypi"
repo_layout_ref = "simple-default"
description = "A pypi repository for python packages"
}
这里我们创建了一个名为terraform-pypi-libs的python仓库,同样地这个aritfactory插件同时还能通过resource方法创建remote合virtual类型的仓库。
通过resource配置Artifactory Users, Groups, and Permissions
同样可以将resource添加到Terraform脚本中,以配置可以使用特定权限访问Artifactory存储库的用户和组。例如,您可以编写脚本来为可以访问您创建的存储库的前端开发人员团队创建一组用户。
# Create a new Artifactory group for the team
resource "artifactory_group" "fe-group" {
name = "fe-dev"
description = "Front End Development Team"
admin_privileges = false
}
# Create new Artifactory users for the team
resource "artifactory_user" "fe-user-lead" {
name = "aliyahm"
email = "[email protected]"
groups = ["logged-in-users", "readers", “fe-dev”]
password = ${var.artifactory_default_pw}
}
resource "artifactory_user" "fe-user-dev1" {
name = "sanjayr"
email = "[email protected]"
groups = ["logged-in-users", "readers", “fe-dev”]
password = ${var.artifactory_default_pw}
}
resource "artifactory_user" "fe-user-dev2" {
name = "ericb"
email = "[email protected]"
groups = ["logged-in-users", "readers", “fe-dev”]
password = ${var.artifactory_default_pw}
}
# Create a new Artifactory permission target called fe-perm
resource "artifactory_permission_target" "fe-perm" {
name = "fe-perm"
repo {
includes_pattern = ["foo/**"]
excludes_pattern = ["bar/**"]
repositories = ["terraform-pypi-libs"]
actions {
users {
name = "markz"
permissions = ["read", "write"]
}
groups {
name = “fe-dev”
permissions = ["read", "write"]
}
}
}
}
除了管理存储库和凭证之外,Artifactory Terraform Provider还支持以下内容:
replication配置
您可以通过提供程序创建和管理Artifactory存储库复制。 设施可用于多站点复制配置或单个Artifactory复制。
证书
Artifactory证书资源可用于创建和管理Artifactory证书,以针对远程存储库进行客户端身份验证。
Data source
数据源使数据能够被提取或计算,以在Terraform配置中的其他地方使用。 Artifactory Provider为Artifactory存储库文件和Artifactory存储库中存储的文件的元数据提供了可用的数据源。
最后如果想了解所有Artifacotry terraform Provider的资源可以参考terraform官方指南:https://registry.terraform.io/providers/jfrog/artifactory/latest/docs