本章的主题将围绕CI/CD和DevOps.
DevOps是开发和运营的结合,并且利用一系列工具配合软件开发,核心目的是提高企业交付软件的速度
展开说,DevOps可以
DevOps涉及规划、开发、交付和维护四个阶段。
规划阶段通常被视为DevOps的第一阶段。但是规划其实依赖于上一轮的反馈(正面或者负面)。
团队需要快速接受反馈,适应变化。这就需要软件开发具有一种全新的能力——敏捷。
敏捷开发是一个用于描述迭代软件开发的术语。迭代软件开发通过在短增量完成工作(通常称为sprint冲刺)来缩短DevOps周期。
sprint冲刺通常长达一到四周,一般是两周。而传统开发会提前规划大型项目,并根据计划完成它们,可能耗时数个月。
每次冲刺交付生产质量代码都需要敏捷开发团队来加快速度。每一次冲刺 (sprint) 周期都会完成一整轮的编码、测试和QA等任务。
CI/CD对敏捷开发至关重要,一般是团队在启动新项目时处理的第一项任务之一。借助CI/CD,可避免缓慢、易错且耗时的手动部署过程。
—’
要讲清楚CI/CD,我们还要了解一个概念:软件开发生命周期
软件生命周期(Software Development LifeCycle) 是指软件的产生直到成熟的全部过程(软件开发过程)。
一般来说就是包含了规划,设计,实施,集成和测试,交付部署,和后期维护等阶段。
这种说法是受到了早期软件生命周期模型—瀑布流模型的影响。现代的软件开发往往不是一次性的,而是要不断更新,增加新的代码,迭代部署新的版本。再持续迭代的过程中,我们需要引入自动化流水线来频繁交付/部署应用系统,也就是所谓的CI/CD。
CI/CD是DevOps团队构建、打包、测试和部署应用程序的一种一致的、自动化的方式。
持续集成会定期构建项目新开发的代码更新,使用自动化工具对整合后的代码进行验证和测试,并集成到类似Git这样的代码存储库中。
持续集成(CI)可以帮助开发人员快速的提交且合并代码变动。一旦代码提交完成,系统就会通过自动构建应用并运行不同级别的自动化测试来验证这些更新。如果自动化测试发现新代码和现有代码之间存在冲突,CI可以帮助开发人员尽早修复错误。
CD发生在CI的构建与自动测试之后,持续交付可自动将已验证的代码发布到存储库。
另一种CD Continuous Deployment
持续部署,指的是自动将代码变动从存储库发布到生产环境。
有时"持续交付"也包含了持续部署流程
我们没必要纠结于这些语义,只需记得 CI/CD 其实就是一个用于实现应用开发中的持续自动化的流程。
CI负责定期构建项目新开发的代码更新,使用自动化工具对整合后的代码进行验证和测试,并集成到代码存储库中。
CD负责将合并和验证的代码自动发布到存储库中,最后将准备好的版本交付到生产环境中
创建默认用户(我使用用户名ubuntu,密码ubuntu
)
将用户加入sudoers
# use root account
su -
# modify sudoers file
visudo
添加ubuntu ALL=(ALL) NOPASSWD:ALL
安装ssh server
sudo apt update
sudo apt install openssh-server
sudo systemctl status ssh
sudo ufw allow ssh
安装ifconfig,获取虚拟机IP
sudo apt install net-tools
ifconfig | grep broadcast
获取虚拟机IP之后,回到主机,远程登录至虚拟机服务器
Jenkins官方给了一个比较复杂的安装步骤
# This is the Debian package repository of Jenkins to automate installation and upgrade. To use this repository, first add the key to your system:
curl -fsSL https://pkg.jenkins.io/debian/jenkins.io.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null
# Then add a Jenkins apt repository entry:
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null
# Update your local package index, then finally install Jenkins:
sudo apt-get update
sudo apt-get install fontconfig openjdk-11-jre
sudo apt-get install jenkins
针对Ubuntu,推荐直接使用以下指令
# Update existing packages
sudo apt-get update
# Install Java
sudo apt install -y default-jdk
# Download Jenkins package.
# Add a key to your system
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
# Add the following entry in your /etc/apt/sources.list:
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
# Update your local package index
sudo apt-get update
# Install Jenkins
sudo apt-get install -y jenkins
# Start the Jenkins server
sudo systemctl start jenkins
# Enable the service to load during boot
sudo systemctl enable jenkins
# Verify Jenkins status
sudo systemctl status jenkins
访问虚拟机的8080
端口
第一次访问一个新的 Jenkins 实例时, 要求使用自动生成的密码对其进行解锁。
在 Unlock Jenkins 页面, 粘贴密码到 Administrator password 字段并点击 Continue。
echo "Hello World"
echo "Current data and time is $(date)"
打开/tmp/script.sh
#! /bin/bash
echo "Hello, $NAME1 and $NAME2"
保存/tmp/script.sh
,启动Jenkins
NAME1=Tom
NAME2=Jerry
/tmp/script.sh $NAME1 $NAME2
General > This project is parameterized
修改/tmp/script.sh
NAME1=$1
NAME2=$2
/tmp/script.sh $NAME1 $NAME2
echo "Build Number is $BUILD_NUMBER"
echo "Build ID is $BUILD_ID"
echo "Build URL is $BUILD_URL"
echo "Build Tag is $BUILD_TAG"
推荐阅读Jenkins : Building a software project
Manage Jenkins > Configure System > Global Properties > Environment variables
Name: username
value: ubuntu_10.0.0.215
echo "Build Number is $BUILD_NUMBER"
echo "Build ID is $BUILD_ID"
echo "Build URL is $BUILD_URL"
echo "Build Tag is $BUILD_TAG"
echo "$username"