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公众号定期更新,请随时关注哟~

(0)

相关推荐