jenkins2.0+pipeline體驗筆記

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

採用hudson部署javaWeb項目

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

特別是對於採用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端口是否啓動起來了



簡單配置

輸入管理員密碼:


root@ubuntu:~# cat /var/lib/jenkins/secrets/initialAdminPassword
7a5d5156d27c430985a55f6a71e47de7
root@ubuntu:~# 

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

提示:This Jenkins instance appears to be offline.

root@ubuntu:~#  find / -name "hudson.model.UpdateCenter.xml"

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

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

root@ubuntu:~# 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一把

root@ubuntu:/# 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(流水線)

我這裏創建了一個GITHUB上的項目,JAVA_ONLINE_IDE https://github.com/puhaiyang/onlineJavaIde



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

 

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



生成後,代碼拷貝到pipline 代碼框中,爲了查看下是否成功了,保存後,點擊立即構建

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

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




我測試時的腳本代碼如下:

https://github.com/puhaiyang/onlineJavaIde/blob/master/deploy/DeployToAliyun.groovy


/**
 * @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指定這個提示的消息框只允許哪些用戶可以點擊



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章