Jenkins+Ansible+GitLab持续交付平台搭建-第5篇
这篇文章将继续给大家介绍Jenkins+Ansible+GitLab持续交付平台搭建。
Jenkins+Ansible+GitLab持续交付平台搭建-第1篇
Jenkins+Ansible+GitLab持续交付平台搭建-第2篇
Jenkins+Ansible+GitLab持续交付平台搭建-第3篇
Jenkins+Ansible+GitLab持续交付平台搭建-第4篇
jenkins安装配置管理
jenkins使用安装配置
jenkins:开源持续集成工具
开发语言:java
功能:提供了软件开发的持续集成服务
特点:支持主流软件配置管理,配合实现软件配置管理,持续集成功能
jenkins安装前准备工作(cenOS7)
1.下载yum仓库源
# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
2.配置java版本8.0或8.0以上
#下载jdk
# http://www.oracle.com
#配置java环境变量
# vi ~/.bashrc
export JAVA_HOME=/usr/java/jdk1.8.0_77
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# source ~/.bashrc
# java -version
#切换deploy用户,给deploy用户配置java环境变量
# vi ~/.bashrc
export JAVA_HOME=/usr/java/jdk1.8.0_77
...
# source ~/.bashrc
# java -version
3.关闭系统防火墙
# systemctl stop firewalld
# systemctl disable firewalld
4.关闭SELINUX并重启系统,关闭强制访问安全策略
# vi /etc/sysconfig/selinux
…
SELINUX=disabled
...
#reboot
jenkins安装与初始化配置
1.yum源安装jenkins最新版本
# yum -y install jenkins
2.创建jenkins系统用户
# useradd deploy
3.更改jenkins启动用户与端口
# vi /etc/sysconfig/jenkins
....
JENKINS_USER=deploy
JENKINS_PORT=8080
..
4.启动jenkins
#编辑/etc/rc.d/init.d/jenkins添加java路径
# vi /etc/rc.d/init.d/jenkins
# Search usable Java as /usr/bin/java might not point to minimal version required by Jenkins.
candidates="
...
/usr/java/jdk1.8.0_77/bin/java
# systemctl start jenkins
# systemctl stop jenkins
# systemctl status jenkins
#启动jenkins
# java -jar jenkins
jenkins job的介绍
jenkins job构建
jenkins是由若干个job任务结构
Freestyle job
1.需要在页面添加模块配置项与参数完成配置
2.每个job仅能实现一个开发功能
3.无法将配置代码化,不利于job配置迁移与版本控制
4.逻辑相对简单,无需额外学习成本
Pineline job
1.匹配持续集成与持续交付的管道(持续集成简称CI,是一种我们软件开发过程中的周期实现,我们通过将我们的代码仓库与jenkins集成使我们开发人员每次代码提交都能够在我们的jenkins上自动任务的build构建,这样子就能帮助我们开发团队第一时间发现问题与解决问题;持续集成简称CD,是在持续集成的基础上,可以将我们构建好的软件版本通过jenkins的自动化测试部署等多个程序持续安全快速的交付到用户手中)
2.所有模块,参数配置都可以体现为一个pipeline脚本
3.jenkins可以编写定义多个stage构建一个管理工作集
4.所有配置代码化,方便job配置迁移与版本控制
5.需要pipeline脚本语法基础
最后Freestyle和 Pineline最大的任务不同,Freestyle方便配置,不易于项目管理维护,Pineline方面项目管理,但相对需要一定的学习成本;
jenkins job
jenkins job构建配置环境准备(cenOS7)
1.配置jenkins server本地GitLab DNS
#远程登录jenkins服务端
# ssh root@172.16.89
# vi /etc/hosts
172.16.87.88 gitlab.example.com
2.安装git client,curl工具依赖
# yum install -y git curl
3.关闭系统Git http.sslVerify安全认证
# git config --system http.sslVerify false
4.添加jenkins后台Git client user与email注册
# 系统管理-->系统设置-->Git plugin(user/email)
5.添加jenkins后台Git Credential凭据
# 凭据-->jenkins-->全局凭据-->添加凭据(GitLab仓库用户@密码)
jenkins freestyle job构建配置
1.创建一个freestyle project任务
# 新建任务-->选择一个自由风格任务
2.编辑描述信息
#~~~
3.参数配置
选项参数:
name:deploy_env
Choices:dev、prod
Description:Test
文本参数:
Name:version
Default Value:1.0.0
4.源代码管理(将GitLab代码克隆到jenkins本地)
#添加Source Code Management
# Repository URL:https://gitlab.example.com/root/xj_aml.git
Credentials:选择已添加的凭证
5.Build配置
# shell执行脚本
#!/bin/sh
export PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
# Print env variable
echo "[INFO] Print env variable"
echo "Current deployment envrionment is $deploy_env" >> test.properties
echo "THe build is $version" >> test.properties
echo "[INFO] Done.."
# Check test properties
echo "[INFO] Check test properties"
if [ -s test.properties ]
then
cat test.properties
echo "[]INFO] Done.."
else
echo "test.properties is empty"
fi
echo "[INFO] Build fini shed.."
pipeline job
jenkins pipeline job编写规范
pipeline基础架构:
1.所有代码包裹在pipeline{}层内
2.stage{}层用来包含该pipeline所有stage子层
3.stage{}层用来包含具体我们需要编写任务的steps{}子层
pipeline{
agent any
environment{
host=’test.example.com’
user='deploy’
}
stages{
stage('build’){
steps{
sh “cat $host
echo $deploy
}
}
}
}
agent区域:
1.agent定义pipeline在哪里运行,可以使用any,node或具体的jenkins node主机名等。
例:如果我们要指定在node1上执行,可以写成:agent{node{label 'node1’}}
environment区域:
1.”变量名称=变量值”定义我们的环境变量
2.可以定义全局环境变量,应用所有的stages任务
pipeline{
agent any
environment{
PATH=”/bin:/sbin:/usr/bin”
}
stages{
stage('build’){
environment {
JAVA_HOME=”/usr/lib/jre”
}
steps{
sh “cat $host”
echo $deploy
}
}
}
}
script区域(可选)
pipeline{
agent any
stages{
stage('build'){
steps{
echo "HelloWord "
script{
def servers = ['node1','node2']
For (int i=0; I<server.size();++i){
echo "testing ${server[i] server"
}
}
}
}
}
}
常用steps区域
1.echo:打印输出
2.sh:调用linux系统shell命令
3.git url:调用git模块进行git相关操作
pipeline{
agent any
environment{
user = 'deploy '
}
stages{
stages('build '){
steps{
echo $deploy
sh "cat 'HelloWorld ' "
git url:
"https://root@gitlab.exmaple.com/root/test.git "
}
}
}
}
示例:
1.创建一个test.pipeline project流水线
2.添加描述信息
3.pipeline脚本配置
#!groovy
pipeline {
agent {node {label 'master'}}
environment {
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin"
}
parameters {
choice(
choices: 'dev\nprod',
description: 'choose deploy environment',
name: 'deploy_env'
)
string (name: 'version', defaultValue: '1.0.0', description: 'build version')
}
stages {
stage("Checkout test repo") {
steps{
sh 'git config --global http.sslVerify false'
dir ("${env.WORKSPACE}") {
git branch: 'master', credentialsId:"6a9471fb-16dd-4c90-8b68-9ab6879ad8a2", url: 'https://172.16.87.88/root/test-repo.git'
}
}
}
stage("Print env variable") {
steps {
dir ("${env.WORKSPACE}") {
sh """
echo "[INFO] Print env variable"
echo "Current deployment environment is $deploy_env" >> test.properties
echo "The build is $version" >> test.properties
echo "[INFO] Done..."
"""
}
}
}
stage("Check test properties") {
steps{
dir ("${env.WORKSPACE}") {
sh """
echo "[INFO] Check test properties"
if [ -s test.properties ]
then
cat test.properties
echo "[INFO] Done..."
else
echo "test.properties is empty"
fi
"""
echo "[INFO] Build finished..."
}
}
}
}
}
此系列会在我们TestOps公众号定期更新,请随时关注哟~