接Jenkins+Gitlab+Ansible自动化部署(一)https://www.cnblogs.com/zd520pyx1314/p/10210727.html 和(二)https://www.cnblogs.com/zd520pyx1314/p/10213549.html

Jenkins是一个开源持续集成工具,提供了软甲你开发的持续集成服务,支持主流软件配置管理,配合实现软件配置管理,持续集成功能。是主流的运维开发平台,兼容所有主流开发环境,插件市场可与海量业内主流开发工具实现集成,Job为配置单位与日志管理,使运维与开发人员能协同工作。丰富的权限管理划分不同Job不同角色;强大的负载均衡功能,保证我们项目的可靠性。

Jenkins的安装、配置与管理

添加Jenkins yum仓库

官网地址
https://pkg.jenkins.io/redhat-stable/

安装

[root@jenkins ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
[root@jenkins ~]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
安装Java
[root@jenkins ~]# yum install -y java
[root@jenkins ~]# java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK -Bit Server VM (build 25.191-b12, mixed mode)
安装Jenkins
[root@jenkins ~]# yum list | grep 'jenkins'
jenkins.noarch
[root@jenkins ~]# yum install -y jenkins

创建Jenkins系统服务用户并配置

创建Jenkins系统服务用户
[root@jenkins ~]# useradd deploy
[root@jenkins ~]# cp /etc/sysconfig/jenkins{,.bak}
[root@jenkins ~]# vim /etc/sysconfig/jenkins
# 大约在29行,改为deploy用户
JENKINS_USER="deploy"
# 确定Jenkins端口号8080
JENKINS_PORT=""
更改目录权限
[root@jenkins ~]# chown -R deploy:deploy /var/lib/jenkins
[root@jenkins ~]# chown -R deploy:deploy /var/log/jenkins/
启动Jenkins
[root@jenkins ~]# systemctl start jenkins
[root@jenkins ~]# lsof -i:
# 这里发现端口没起来,查看日志发现
[root@jenkins ~]# cat /var/log/jenkins/jenkins.log
java.io.FileNotFoundException: /var/cache/jenkins/war/META-INF/MANIFEST.MF (Permission denied)
# 然后赋予deploy目录权限
[root@jenkins ~]# chown -R deploy:deploy /var/cache/jenkins/
[root@jenkins ~]# systemctl restart jenkins
[root@jenkins ~]# lsof -i:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java deploy 163u IPv6 0t0 TCP *:webcache (LISTEN)
启动成功

登录jenkins web管理界面

点击“Start using jenkins”

Jenkins Job构建

Freestyle Job与Pipeline Job区别:

Freestyle Job需要在页面添加模块配置项与参数完成配置;每个Job仅能实现一个开发功能;无法将配置代码化,不利于Job配置迁移与版本控制;逻辑相对简单,无需额外学习成本。

Pipeline Job匹配持续集成与持续交付的概念;所有模块、参数配置都可以体现为一个pipeline脚本;可定义多个stage构建一个管道工作集;所有配置代码化,方便Job配置迁移与版本控制;需要Pipeline脚本语法基础。

Jenkins Job构建之环境准备(添加Jenkins后台git client user与email)

1.配置Jenkins server本地GItlab DNS

[root@jenkins ~]# vim /etc/hosts
# 文件末尾添加如下一条记录
192.168.244.130 gitlab.example.com

2.安装git client,curl工具依赖

[root@jenkins ~]# yum install -y git curl

3. 关闭系统git http.sslVerify安全认证

[root@jenkins ~]# git config --system http.sslVerify false
[root@jenkins ~]# echo $?

4.添加Jenkins后台git client user与email

首先登录Jenkins web管理页面

在Git plugin选项中填写以下信息,点击保存

接下来添加凭据,点击“凭据”

点击“全局凭据”

点击“添加凭据”

添加完成会提示如下图所示

接着添加一个Jenkins freestyle job

点击“New 任务”

填写描述信息

添加参数

接着点击添加“文本参数”

添加完成后点击“save”即可,接着回到Jenkins首页,点击刚才创建的“test-freestyle-job”黑色小三角,找到“configure”选项,开始添加git源码管理

使用root登录gitlab,复制test-repo仓库地址

粘贴至下面

接着进行“build 配置”

在以下框内粘贴

#!/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 finished..."

接下来点击“Build with Parameters”

提示失败,点击红色失败按钮,查看日志并解决

可以看出还是之前的git有点问题,回到test-freestyle-job配置项,查看并确认

然后重新构建

可以看到已经成功构建。

接下来演示Jenkins Pipeline Job构建过程

Pipeline基础架构

1.所有代码包裹在pipeline{}层内

2.stages{}层用来包含该pipeline所有stage子层

3.stage{}层用来包含具体我们需要编写任务的steps{}子层

4.steps{}用来添加我们具体需要调用的模块语句

agent区域

  • agent定义pipeline在哪里运行,可以使用any,none,或具体的Jenkins node主机名等;例如:假定我们要特指在node1上执行,可以写成:agent{node1 {label 'node1'}}。

environment区域

  • “变量名称=变量值”定义我们的环境变量;
  • 可以定义全局环境变量,应用所有stage任务
  • 可以定义stage环境变量,应用单独的stage任务

script区域(可选)

  • 在steps内定义script{};
  • groovy脚本语言;
  • 用来进行脚本逻辑运算;

常用steps区域

  • echo:打印输出
  • sh:调用Linux系统shell命令
  • git url:调用git模块进行git相关操作

开始构建Jenkins Pipeline Job

首先登录到Jenkins web 管理页

点击“New 任务”

添加描述信息

添加pipeline script

pipeline script脚本内容(用上述复制下来的ID粘贴至credentialsId后)

#!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:"b974bdfd-bb73-4f0a-8a0d-85d867681ed0", url: 'https://root@gitlab.example.com/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..."
}
}
}
}
}

“保存”之后,点击“立即构建”

报错,点击查看报错信息

根据错误提示:没有找到对应参数的变量,是因为首次构建pipeline job时,参数没有被引用到当前pipeline job当中,返回test-pipeline-job主界面,此时的“立即构建”按钮会变为“Build with Parameters”,点击“Build with Parameters”

可以看到第二次构建是成功的,点击#2前的蓝色圆球查看输出信息

Started by user admin
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] node
Running on Jenkins in /var/lib/jenkins/workspace/test-pipeline-job
[Pipeline] {
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Checkout test repo)
[Pipeline] sh
+ git config --global http.sslVerify false
[Pipeline] dir
Running in /var/lib/jenkins/workspace/test-pipeline-job
[Pipeline] {
[Pipeline] git
> git rev-parse --is-inside-work-tree # timeout=
Fetching changes from the remote Git repository
> git config remote.origin.url https://root@gitlab.example.com/root/test-repo.git # timeout=10
Fetching upstream changes from https://root@gitlab.example.com/root/test-repo.git
> git --version # timeout=
using GIT_ASKPASS to set credentials
> git fetch --tags --progress https://root@gitlab.example.com/root/test-repo.git +refs/heads/*:refs/remotes/origin/*
> git rev-parse refs/remotes/origin/master^{commit} # timeout=
> git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=
Checking out Revision dd39fbeeb70dd5e2d545dfe084c3d540d106d6ef (refs/remotes/origin/master)
> git config core.sparsecheckout # timeout=
> git checkout -f dd39fbeeb70dd5e2d545dfe084c3d540d106d6ef
> git branch -a -v --no-abbrev # timeout=
> git branch -D master # timeout=
> git checkout -b master dd39fbeeb70dd5e2d545dfe084c3d540d106d6ef
Commit message: "Merge branch 'release-1.0.0' into 'master'"
> git rev-list --no-walk dd39fbeeb70dd5e2d545dfe084c3d540d106d6ef # timeout=
[Pipeline] }
[Pipeline] // dir
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Print env variable)
[Pipeline] dir
Running in /var/lib/jenkins/workspace/test-pipeline-job
[Pipeline] {
[Pipeline] sh
+ echo '[INFO] Print env variable'
[INFO] Print env variable
+ echo 'Current deployment environment is dev'
+ echo 'The build is 1.0.0'
+ echo '[INFO] Done...'
[INFO] Done...
[Pipeline] }
[Pipeline] // dir
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Check test properties)
[Pipeline] dir
Running in /var/lib/jenkins/workspace/test-pipeline-job
[Pipeline] {
[Pipeline] sh
+ echo '[INFO] Check test properties'
[INFO] Check test properties
+ '[' -s test.properties ']'
+ cat test.properties
Current deployment environment is dev
The build is 1.0.
+ echo '[INFO] Done...'
[INFO] Done...
[Pipeline] echo
[INFO] Build finished...
[Pipeline] }
[Pipeline] // dir
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

可以看到输出状态为“SUCCESS”,证明构建成功。

Jenkins+Gitlab+Ansible自动化部署(三)的更多相关文章

  1. Jenkins+Gitlab+Ansible自动化部署(四)

    接Jenkins+Gitlab+Ansible自动化部署(三)https://www.cnblogs.com/zd520pyx1314/p/10235394.html Jenkins应用 Jenkin ...

  2. Jenkins+Gitlab+Ansible自动化部署(五)

    Freestyle Job实现静态网站部署交付(接Jenkins+Gitlab+Ansible自动化部署(四)https://www.cnblogs.com/zd520pyx1314/p/102445 ...

  3. Jenkins+Gitlab+Ansible自动化部署(六)

    Pipeline Job实现Nginix+MySQL+PHP+Wordpress实现自动化部署交付(Jenkins+Gitlab+Ansible自动化部署(五)https://www.cnblogs. ...

  4. Jenkins+Gitlab+Ansible自动化部署(一)

    首先准备实验环境 虚拟机 主机名 IP地址 服务 系统版本 内核版本 Vmware Workstation 14 gitlab.example.com 192.168.244.130 gitlab  ...

  5. Jenkins+Gitlab+Ansible自动化部署(二)

    接Jenkins+Gitlab+Ansbile自动化部署(一):https://www.cnblogs.com/zd520pyx1314/p/10210727.html Ansible的配置与部署 工 ...

  6. 【开发工具】Jenkins+Gitlab实现自动化部署

    我在尝试在容器中安装Jenkins时,初衷是希望使用docker in docker 的模式来实现Jenkins slave容器按需创建.在实现的时候需要在Jenkins 中安装Kubernetes插 ...

  7. 基于Jenkins+Gitlab的自动化部署实战

    故事背景 一个中小型企业,是典型的互联网公司,当初期的时候可能运维只能标配到2~3人,此时随着公司的发展,项目会逐渐增多.前期部署项目可能都是手动的, 俗称“人肉部署”,这简直是无比的痛苦,不能忍受的 ...

  8. jenkins +gitlab +docker 自动化部署tomcat 项目

    实验环境 实验设备 三台服务器 centos 7.X 以上 内存 2-3G左右 192.168.1.195 (jenkins最新+ git 2.8+maven 3.5 +tomcat 8+java1. ...

  9. 从Docker 到Jenkins 到Ansible的部署经验

    从Docker 到Jenkins 到Ansible的部署经验 工作中,除了开发功能,还负责系统的部署工作.我从频繁的部署工作中,逐渐找到了一些偷懒的方法.从传统的Java -jar命令启动服务,到通过 ...

随机推荐

  1. 文件操作:os模块与os.path模块

    一.os与os.path 原创:http://www.cnblogs.com/lovemo1314/archive/2010/11/08/1871781.html os模块用于处理文件及文件夹,包括文 ...

  2. PS 滤镜— —图像偏移

    clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); I=imread ...

  3. [算法]Trie树

    我是好文章的搬运工,原文来自博客园,博主一线码农,选自”6天通吃树结构“系列,地址:http://www.cnblogs.com/huangxincheng/archive/2012/11/25/27 ...

  4. android如何查看网卡名和ip

    我们知道,在windows下查看ip地址用ipconfig,在Linux下查看ip地址用ifconfig.今天在使用android查看的时候ifconfig却不管用: 查找网上资料发现,原来默认ifc ...

  5. 原生js实现Canvas实现拖拽式绘图,支持画笔、线条、箭头、三角形和圆形等等图形绘制功能,有实例Demo

    前言 需要用到图形绘制,没有找到完整的图形绘制实现,所以自己实现了一个 - - 演示地址:查看演示DEMO 新版本支持IE5+(你没看错,就是某软的IE浏览器)以上任意浏览器的Canvas绘图:htt ...

  6. poj3208启示录——数位DP

    题目:http://poj.org/problem?id=3208 数位DP,首先按位数预处理出每一种位数的情况,包括有多少个魔鬼数和有多少个以6开头的非魔鬼数,以便递推.累加等等: 然后先找出第X个 ...

  7. Ubuntu——Python3.x——scikit-learn 安装

    修改默认Python (默认的是Python2.7) rm -rf /usr/bin/python ln -s /usr/bin/ptyhon3 /usr/bin/python 安装所需依赖: apt ...

  8. LINUX socket网络编程

    1. 网络中进程之间如何通信 进 程通信的概念最初来源于单机系统.由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进 程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如 U ...

  9. win7-64 mysql的安装

    1.https://jingyan.baidu.com/article/597035521d5de28fc00740e6.html 2.net start mysql 无法启动的3534的错误的解决办 ...

  10. win7 卸载ie10+ 重新安装ie8

    烦恼: erp系统不支持高版本ie10+ 项目开发测试需要安装了高版本ie 项目结束,为了方便使用erp,决定卸载ie11,重新安装ie8 解决方法: 1.win+R打开运行命令,键入appwiz.c ...