https://jenkins.io/zh/doc/book/pipeline/ 官方教程,可以中文。Jenkinsfile就是把pipeline內容保存到文件,然后提交到svn等版本控制庫中。安裝blue ocean流水線插件。
打開后如下圖所示:
修改Jenkins有別的命名空間的權限
# rbac.yaml文件添加內容如下,后提交 --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: jenkins-myself roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: admin subjects: - kind: ServiceAccount name: jenkins2 namespace: kube-ops
添加svn-get項目,使用SCM方式獲取pipeline流水線文件
其中Jenkinsfile-svn-get文件內容如下,流水線定義步驟為:從svn上拉取nginx源碼 --> 安裝編譯時依賴文件 --> 編譯 --> 把編譯后的文件打包 --> 調用定義的dockerfile開始構建鏡像 --> 推送鏡像到倉庫 --> 調用kubectl完成鏡像部署(這里也可以定義yaml文件來實現)
node('haimaxy-jnlp'){ checkout( [ $class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [ [cancelProcessOnExternalsFail: true, credentialsId: '1', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: 'svn://192.168.31.9/nginx'] ], quietOperation: true, workspaceUpdater: [$class: 'UpdateUpdater'] ] ) stage('yum'){ sh 'rpm --rebuilddb && yum --nogpgcheck -y install pcre-devel zlib-devel gcc' } stage("build nginx"){ sh './configure --prefix=/usr/local/nginx && make && make install' } stage('tar'){ sh 'tar zcvf nginx.tar.gz /usr/local/nginx' } stage('docker build'){ sh 'docker build -t 192.168.31.9:5000/jenkins-build-nginx -f dockerfile . ' } stage('docker push'){ sh 'docker push 192.168.31.9:5000/jenkins-build-nginx' } stage('kubectl run'){ sh 'kubectl run nginx --image=192.168.31.9:5000/jenkins-build-nginx --image-pull-policy=Always --namespace=default' } }
dockerfile文件內容如下
FROM 192.168.31.9:5000/openvz-centos7 ADD nginx.tar.gz / RUN echo 'daemon off;' >> /usr/local/nginx/conf/nginx.conf CMD /usr/local/nginx/sbin/nginx
最終效果如下: