匠心精神 - 良心品质腾讯认可的专业机构-IT人的高薪实战学院

咨询电话:4000806560

通过Ansible创建基于Linux和AWS的CI/CD流水线

通过Ansible创建基于Linux和AWS的CI/CD流水线

在当今软件开发行业中,CI/CD已成为了日常开发工作中不可或缺的一环。CI/CD流水线可以帮助开发者在每次代码提交时自动执行测试、构建和部署等操作,从而实现快速且稳定的交付。本文将介绍如何使用Ansible创建基于Linux和AWS的CI/CD流水线。

1. 准备工作

在开始之前,我们需要准备以下工具和环境:

- Ansible:用于自动化配置和管理各种设备和系统的工具,具有轻量级、可扩展和安全的优点。
- Linux服务器:作为CI/CD流水线的托管环境,可选择Ubuntu、Debian等常用Linux发行版。
- AWS账号:作为CI/CD流水线的部署目标,需要在AWS上创建EC2实例等资源。
- Git仓库:作为代码存储和版本管理的平台,本文使用GitHub作为例子。

2. 配置Ansible

首先,我们需要在本地安装Ansible。可以使用以下命令来安装:

```
sudo apt update
sudo apt install ansible
```

安装完成后,我们需要在本地创建Ansible的配置文件ansible.cfg,内容如下:

```
[defaults]
inventory = ./hosts.ini
remote_user = ubuntu
```

这里的inventory指定了Ansible要管理的主机清单文件,remote_user指定了远程主机的用户名。我们可以将这个配置文件与Ansible的执行命令一起使用。

接下来,我们需要创建主机清单文件hosts.ini,指定要在哪些主机上执行任务,内容如下:

```
[web]
192.168.1.10
```

这里的[web]表示组名,后面的IP地址则是要管理的主机的IP地址。如果需要在多个主机上执行任务,可以在清单文件中添加更多的组和主机。

3. 编写Ansible Playbook

在创建了Ansible的配置文件和主机清单文件后,我们可以编写Ansible Playbook,在远程主机上执行一系列任务。在这个例子中,我们需要在Ubuntu服务器上部署CI/CD流水线的各个组件,包括Git、Jenkins、Docker和AWS CLI等。

新建一个名为deploy.yml的文件,编写以下内容:

```
- hosts: web
  become: true
  tasks:
  - name: Install Git
    apt:
      name: git
      state: present

  - name: Install Jenkins
    apt:
      name: jenkins
      state: present

  - name: Install Docker
    apt:
      name: docker.io
      state: present

  - name: Install AWS CLI
    apt:
      name: awscli
      state: present
      
  - name: Start Docker service
    systemd:
      name: docker
      state: started
      enabled: yes

  - name: Install Jenkins plugins
    become_user: jenkins
    get_url:
      url: "https://updates.jenkins-ci.org/download/plugins/git/4.6.0/git.hpi"
      dest: "/var/lib/jenkins/plugins/git.hpi"
    notify:
      - Restart Jenkins

  handlers:
    - name: Restart Jenkins
      become_user: jenkins
      systemd:
        name: jenkins
        state: restarted
```

这个Playbook定义了在Ubuntu服务器上执行的一系列任务。比如,首先安装Git、Jenkins和Docker等软件包,然后安装AWS CLI,并启动Docker服务。接下来,我们在Jenkins上安装Git插件,并在安装完成后重启Jenkins服务。

在这个例子中,我们使用了notify和handlers指定了一个触发机制。当安装Git插件成功后,会触发Restart Jenkins这个handler,用于重启Jenkins服务。

4. 创建AWS IAM用户

在部署CI/CD流水线之前,我们需要在AWS上创建一个IAM用户,用于Jenkins执行AWS CLI命令时的身份验证。可以使用以下步骤创建用户和API密钥:

- 登录AWS控制台,进入IAM服务。
- 在左侧菜单栏中,选择“用户”,点击“添加用户”。
- 输入用户名称和访问类型,选择“编程访问”,点击“下一步”。
- 选择要为用户授予的权限,可以选择现有策略或自行创建。本例中我们选择“AdministratorAccess”策略,即拥有完全的AWS管理权限。
- 在“标签”界面中,可以选择添加标签,也可以跳过。
- 在“审核”界面中,确认用户名、访问类型、权限和标签等信息,然后创建用户。
- 在用户列表中,选择刚才创建的用户,点击“安全凭证”。
- 在“安全凭证”中,可以创建API密钥。点击“创建访问密钥”,然后下载或复制访问密钥和私有密钥。

5. 部署CI/CD流水线

现在,我们可以使用Ansible Playbook开始部署CI/CD流水线。执行以下命令:

```
ansible-playbook -i hosts.ini deploy.yml
```

这个命令会在Ubuntu服务器上执行deploy.yml这个Playbook,并自动安装Git、Jenkins、Docker和AWS CLI等组件,并配置Jenkins插件和AWS IAM用户。执行完成后,我们可以通过浏览器访问Jenkins服务,进行进一步的配置。

在Jenkins中,我们需要配置一个新的作业,用于执行CI/CD流水线。可以使用以下步骤进行配置:

- 在Jenkins界面中,点击“新建任务”。
- 输入任务名称,选择“流水线”作业类型,然后点击“OK”。
- 在“流水线配置”中,选择“定义一个流水线脚本”,并输入以下脚本:

```
pipeline {
    agent {
        docker {
            image "python:3.7"
        }
    }
    stages {
        stage("Build") {
            steps {
                git url: "https://github.com/example/repo.git" // 替换成自己的Git仓库地址
                sh "pip install -r requirements.txt"
            }
        }
        stage("Test") {
            steps {
                sh "python -m unittest discover"
            }
        }
        stage("Deploy") {
            environment {
                AWS_ACCESS_KEY_ID = credentials("AWS_ACCESS_KEY_ID")
                AWS_SECRET_ACCESS_KEY = credentials("AWS_SECRET_ACCESS_KEY")
            }
            steps {
                sh "aws s3 cp ./ s3://my-bucket --recursive" // 替换成自己的S3存储桶
            }
        }
    }
}
```

这个流水线包含三个阶段,分别是构建、测试和部署。具体来说,构建阶段首先从Git仓库拉取代码,然后安装项目所需的依赖;测试阶段执行项目的单元测试;部署阶段将项目的构建结果上传到AWS S3存储桶。

在这个流水线中,我们使用了Docker代理和Jenkins凭据安全性,保证流水线执行的稳定和可靠。同时,我们也可以根据自己的需求,增加其他阶段,例如代码质量检查、性能测试等等。

6. 总结

通过使用Ansible,我们可以轻松创建基于Linux和AWS的CI/CD流水线。通过Playbook的方式,我们可以自动化地配置和管理流水线的各个组件,并使得流水线的创建和管理变得更加简单和快速。同时,在Jenkins和AWS上的配置,也可以根据自己的需求进行进一步的优化和扩展,以满足不同的业务需求。