1. 程式人生 > >jenkins2.0+pipeline體驗筆記

jenkins2.0+pipeline體驗筆記

早在兩年前,記錄過一篇hudson的部署專案的筆記。

在實際的應用中,隨著專案的增加才逐漸感覺到通過之前的介面方式,通過一步步的配置去完成專案的自動部署是多麼麻煩的事情。

特別是對於採用maven的聚合工程來管理的專案,在配置時就顯得更為複雜繁瑣了。當修改某一配置變化時,(如所需要部署的伺服器IP變化)需要配過配置一個一個的進行配置,繁瑣這點顯得尤為突出。

我想hudson(jenkins)的作者應該也想到了這一點,為了解決這一問題,在jenkins2.0中,他們就推出了pipeline的功能,可以讓開發者通過groovy部署指令碼來完成專案的整個部署。在使用了幾次後,感覺確實挺方便的。

環境:

linux ubuntu


以下是我的體驗時的主要步聚:

安裝jenkins

設定國內阿里雲源地址

 vim /etc/apt/sources.list

#deb包
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse  
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse  
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse  
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse  
##測試版源  
deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse  
# 原始碼  
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse  
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse  
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse  
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse  
##測試版源  
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse  
# Canonical 合作伙伴和附加  
deb http://archive.canonical.com/ubuntu/ xenial partner  
deb http://extras.ubuntu.com/ubuntu/ xenial main  

再:sudo apt-get update

安裝jenkins

wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins

此操作會在系統上建立一個名為jenkins的使用者

執行完成後,netstat -antp一下,看是否jenkins的預設

8080埠是否啟動起來了


簡單配置

輸入管理員密碼:


[email protected]:~# cat /var/lib/jenkins/secrets/initialAdminPassword
7a5d5156d27c430985a55f6a71e47de7
[email protected]:~# 

配好後,出現瞭如下問題:

提示:This Jenkins instance appears to be offline.

[email protected]:~#  find / -name "hudson.model.UpdateCenter.xml"

find: 鈥run/user/1000/gvfs鈥 Permission denied

/var/lib/jenkins/hudson.model.UpdateCenter.xml

[email protected]:~# vim /var/lib/jenkins/hudson.model.UpdateCenter.xml

<?xml version='1.0' encoding='UTF-8'?>

<sites>

  <site>

    <id>default</id>

    <url>http://updates.jenkins.io/update-center.json</url>

  </site>

</sites>


先找到配置,再將https的修改為http

再重啟:

 service jenkins restart

讓輸入密碼,但我還沒有設定密碼

於是只能找重置的辦法了

admin密碼重置

先找到jenkins的配置檔案

仍然是find一把

[email protected]:/# find / -name "jenkins"
/run/jenkins
find: ‘/run/user/1000/gvfs’: Permission denied
/etc/logrotate.d/jenkins
/etc/default/jenkins
/etc/init.d/jenkins
/var/lib/jenkins
/var/cache/jenkins
/var/log/jenkins
/usr/share/jenkins

從結果中,看到了/etc/default/jenkins

這個檔案為jenkins的預設配置檔案,於是開啟看一下吧

# defaults for Jenkins automation server

# pulled in from the init script; makes things easier.
NAME=jenkins

# location of java
JAVA=/usr/bin/java

# arguments to pass to java

# Allow graphs etc. to work even when an X server is present
JAVA_ARGS="-Djava.awt.headless=true"

#JAVA_ARGS="-Xmx256m"

# make jenkins listen on IPv4 address
#JAVA_ARGS="-Djava.net.preferIPv4Stack=true"

PIDFILE=/var/run/$NAME/$NAME.pid

# user and group to be invoked as (default to jenkins)
JENKINS_USER=$NAME
JENKINS_GROUP=$NAME

# location of the jenkins war file
JENKINS_WAR=/usr/share/$NAME/$NAME.war

# jenkins home location
JENKINS_HOME=/var/lib/$NAME

# set this to false if you don't want Jenkins to run by itself
# in this set up, you are expected to provide a servlet container
# to host jenkins.
RUN_STANDALONE=true

# log location.  this may be a syslog facility.priority
JENKINS_LOG=/var/log/$NAME/$NAME.log
#JENKINS_LOG=daemon.info

# OS LIMITS SETUP
#   comment this out to observe /etc/security/limits.conf
#   this is on by default because http://github.com/jenkinsci/jenkins/commit/2fb288474e980d0e7ff9c4a3b768874835a3e92e
#   reported that Ubuntu's PAM configuration doesn't include pam_limits.so, and as a result the # of file
#   descriptors are forced to 1024 regardless of /etc/security/limits.conf
MAXOPENFILES=8192

# set the umask to control permission bits of files that Jenkins creates.
#   027 makes files read-only for group and inaccessible for others, which some security sensitive users
#   might consider benefitial, especially if Jenkins runs in a box that's used for multiple purposes.
#   Beware that 027 permission would interfere with sudo scripts that run on the master (JENKINS-25065.)
#
#   Note also that the particularly sensitive part of $JENKINS_HOME (such as credentials) are always
#   written without 'others' access. So the umask values only affect job configuration, build records,
#   that sort of things.
#
#   If commented out, the value from the OS is inherited,  which is normally 022 (as of Ubuntu 12.04,
#   by default umask comes from pam_umask(8) and /etc/login.defs

# UMASK=027

# port for HTTP connector (default 8080; disable with -1)
HTTP_PORT=8080


# servlet context, important if you want to use apache proxying

由此可得知道,jenkins的目錄為/var/lib/jenkins

找到admin的目錄:

/var/lib/jenkins/users/admin

找到<passwordHash>節點的內容(圖中黑色的那一串)換成#jbcrypt:$2a$10$DdaWzN64JgUtLdvxWIflcuQu2fgrrMSAMabF5TSrGK5nXitqK9ZMS

換為111111

再次重啟,後登入, admin 111111

之後找到【系統設定】,進入【外掛安裝】

安裝一些必要的外掛,pipline和maven

待外掛安裝完成

 部署專案

建立pipline專案


選擇pipline(流水線)

再選擇Pipeline Syntax,因為我對pipline的語法不熟悉,就用它來生成

在piplineSyntax中選擇克隆程式碼,先把程式碼down下來,輸入git的地址,再點選生成按鈕即可


生成後,程式碼拷貝到pipline 程式碼框中,為了檢視下是否成功了,儲存後,點選立即構建

如構建成功,則會將程式碼down到jenkins的workspace目錄下

如我這裡的此目錄下:/var/lib/jenkins/workspace/JAVA_ONLINE_IDE



我測試時的指令碼程式碼如下:

/**
 * @author: haiyangp
 * @date: 2017/12/17
 * desc: 將專案部署到阿里雲伺服器指令碼
 */
node {
    def HOST_PWD = "your_host_password,eg:123456"
    def HOST_USERNAME = "your_host_user,eg:root"
    def HOST_NAME = "your_host_name,eg:192.168.1.103"

    stage('get clone') {
        checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], gitTool: 'Default', submoduleCfg: [], userRemoteConfigs: [[url: 'https://github.com/puhaiyang/onlineJavaIde.git']]])
    }

    stage('mvn test') {
        withMaven(maven: 'M3') {
            sh "mvn test"
        }
    }

    stage('mvn install') {
        withMaven(maven: 'M3') {
            sh "mvn install"
        }
    }

    stage('depoly') {
        sh 'sshpass -p  ' + HOST_PWD + ' ssh  -o StrictHostKeyChecking=no ' + HOST_USERNAME + '@' + HOST_NAME + ' ls'
        sh 'sshpass -p  ' + HOST_PWD + ' scp  -o StrictHostKeyChecking=no  target/*.jar ' + HOST_USERNAME + '@' + HOST_NAME + ':.'
        echo 'haha'
    }
    //    -p:指定ssh的密碼
    //    -o StrictHostKeyChecking=no 避免第一次登入出現公鑰檢查。也就是避免出現


    stage('restart') {
        timeout(time: 1, unit: 'DAYS') {
            input message: 'Approve deployment?', submitter: 'it-ops'
        }
    }

}
其中,有很多功能都是之前的jenkins版本無法完成的功能。如input功能,提示一個訊息出來,再通過submitter指定這個提示的訊息框只允許哪些使用者可以點選


相關推薦

jenkins2.0+pipeline體驗筆記

早在兩年前,記錄過一篇hudson的部署專案的筆記。 在實際的應用中,隨著專案的增加才逐漸感覺到通過之前的介面方式,通過一步步的配置去完成專案的自動部署是多麼麻煩的事情。 特別是對於採用maven的聚合工程來管理的專案,在配置時就顯得更為複雜繁瑣了。當修改某一配置變化時,

Devops關鍵工具及技術(二)—Jenkins2.0 Pipeline

在上一篇文章Devops關鍵工具及技術(一)—Jenkins 容器化中,我們實現了Jenkins的容器化,並利用Jenkins的Docker外掛實現Slave容器雲。並使用了基本的pipeline。這篇文章我們將會介紹Jenkins2.0的Pipeline。 P

redis client 2.0.0 pipeline 的list的rpop bug

edi resp response pub pop clas space finally void 描寫敘述: redis client 2.0.0 pipeline 的list的rpop 存在嚴重bug,rpop list的時候,假設list已經為空的時候,rpop出

node+webpack環境搭建 vue.js 2.0 基礎學習筆記

build tao 2.0 png 模板 gis mage tps 環境 npm install -g vue //全局安裝vue npm install -g webpack //全局安裝webpack npm install -g vue-cli

jenkins2.0以後的版本提供自動部署和遠程部署功能?

pro uil 順序 重新 並發 自動構建 完成後 遠程部署 完成 metting result comment: 持續集成:dev上使用 持續部署:在dev/uat/prod上使用 1、指定時間自動構建--發布第二天掛了?每次構建需要重新編譯?qa和uat使用同一套部

Django 2.0.3 使用筆記

復數 imp ural 3.5 個人博客 con ron 中文名 字段 運行環境: Python 3.5.2 Django 2.0.3 Django Admin中model顯示為中文 定義model時,定義一個Meta對象,設置需要顯示的中文名稱。verbose_name

ECS主動運維2.0體驗升級,事半功倍

存儲摘要: 阿裏雲致力於提供更好用的運維體驗,讓您使用ECS的過程更透明、高效,並實現更加標準化、自動化的運維方式。基於主動運維2.0,您使用ECS雲服務器的體驗更加流暢,而且利用系統事件,不再依賴於工單聯系客服,可以通過自助處理的方式響應主動運維實例重啟,減少對系統可靠性和業務連續性的影響。 雲服

libui-node體驗筆記

kotlin 屬性設置 渲染 date arch shu sta 實現 路徑 簡介 libui-node是基於libui庫的node封裝.libui庫是一個簡便的將本地原生的GUI封裝的C語言庫,並支持各平臺(Mac,Linux,windows)。官網提供了第三方封裝文檔,

Vue 2.0的學習筆記:Vue的過濾器

保持 computed title 添加 處理 顏色 一個 神奇 bubuko 轉自: https://www.w3cplus.com/vue/how-to-create-filters-in-vuejs.html 過濾器的介紹 1、在Vue中使用過濾器(Filters)

vue-cli 3.0體驗

img 項目 alt 3.x ini cti eight for clean 一. 準備   1.卸載vue-cli 1.x 或2.x版本,npm uninstall -g vue-cli   2.node版本需 8.9 及以上 二. 安裝   1. 安裝3.x版本 npm

010-Ambari2.7.0&HDP3.0新版體驗

最近Ambari釋出了最新版本2.7.0,HDP棧版本為3.0.0。本篇我們先了解一下新版本的功能及安裝體驗。 關注公眾號,獲取最新文章 Ambari2.7.0 New Feature 1. The Ambari UI, Ambari Server, and Ambari Agen

Effective Objective-C 2.0 總結與筆記(第二章)—— 物件、訊息、執行期

第二章:物件、訊息、執行期 ​ “物件”就是“基本構造單元”,開發者可以通過物件來儲存並傳遞資料。物件之間傳遞資料並執行任務的過程就是“訊息傳遞”。程式執行起來後,為其提供相關支援的程式碼就是“Objective-C執行期環境”,它提供了一些使得物件之間能夠傳遞訊息的重要函式,並且包括建

Effective Objective-C 2.0 總結與筆記(第一章)—— 熟悉Objective-C

第一章:熟悉Objective-C ​ 本章主要是對Objective-C進行一個瞭解,通過介紹Objective-C的語法,來講解Objective-C的基礎知識。 第1條:瞭解Objective-C語言的起源 Objective-C語言採用“訊息結構”而非“函式呼叫”

餓了麽vue-cli3.0+cube-ui筆記

vue-cli lin 直接 fig 們的 dex browser stc size 1、目錄結構 模板文件是public裏的index.html,運行項目的時候,會引用src/main.js(入口文件) 詳細文檔在這裏:https://cli.vuejs.org/zh/

餓了麼vue-cli3.0+cube-ui筆記

1、目錄結構 模板檔案是public裡的index.html,執行專案的時候,會引用src/main.js(入口檔案) 詳細文件在這裡:https://cli.vuejs.org/zh/config/#pwa public:放著html模板和靜態資源,public/index.html 檔

Activiti 6.0快速體驗~!

今天我們測試一下Activiti6.0快速體驗一下,簡單的瞭解下流程,首先我們說明下我們的環境,主要是在linux上進行體驗,具體環境如下: java 1.8.0_111 tomcat 8 contOS 7 1、首先通過wget方法獲取activiti6.0版本的zip包,

0 深度學習筆記

接下來將進行以下的學習: 深度前饋網路 深度學習中的正則化 深度模型中的優化 卷積網路 序列建模:迴圈和遞迴網路 實踐方法論 應用 線性因子模型 自編碼器 表示學習 深度學習中的結構化概率模型 蒙特卡羅方法 直面配分函式

AS3 0基礎學習筆記 3 認識類結構

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

AS3 0基礎學習筆記 2 物件

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!