赞
踩
系统环境:
在 Jnekins 安装后,一般都会默认安装上 Git 插件,在写 Pipeline 脚本时候,也经常使用 Git 插件从 Git 仓库拉取项目进行编译,可以说使用 Git 已经是日常化操作,如何使用 Git 插件从 Git 远程仓库拉取与推送代码更是常用命令,这里介绍下如果通过 Git 插件进行这些操作。
这里为了演示方便,使用的是 Github 仓库。
一般安装完 Jenkins 会自动安装 Jenkins Git
插件,不过该插件也需要和 Git
工具配合使用,要求 Jenkins
所在服务器上也要安装 Git
并且配置环境。由于 Jnekins 安装现在有多种方式,常用的则是服务器上直接 Jenkins War
包启动,或者使用 Jenkins Docker
镜像启动 ,根据这两种情况,则:
Docker 启动各种工具与组件已经是大势所趋,所以,本人也是基于 Docker 镜像方式安装的 Jnekins,下面检查下是否安装 Git 插件以及配置 Git 环境。
打开 系统管理->全局工具设置->Git 工具 查看是否配置下面参数:
使用 Git 前还得提前配置 Git 环境,例如,配置 Git 仓库的用户名/密码的凭据,操作如下,打开 凭据->系统->全局凭据->添加凭据 添加 git 仓库的 "用户名/密码信息":
git-global-credentials
,如果不设置则系统会生成一个随机 ID 值(不太直观)。创建一个 Jenkins Pipeline Job,然后配置里面的脚本,里面输入一些 Git 命令,然后进行测试。
这里使用是 Groovy Script 形式的 Jnekins Pipeline 脚本。
进入 Jenkins Job 配置,然后拉倒最后输入 groovy 语法的 pipeline 脚本对 Git 工具进行测试,查看 Git 命令是否能执行:
脚本内容如下:
- node(){
- sh "git version"
- }
配置 Job 完成后,进入到 Job 中,然后点击 "立即构建" 安装执行 Pipeline 脚本:
然后输入日志内容如下:
- Started by user 管理员
- Running in Durability level: PERFORMANCE_OPTIMIZED
- [Pipeline] Start of Pipeline
- [Pipeline] node
- Running on Jenkins in /var/jenkins_home/workspace/git-test
- [Pipeline] {
- [Pipeline] sh
- + git version
- git version 2.11.0
- [Pipeline] }
- [Pipeline] // node
- [Pipeline] End of Pipeline
- Finished: SUCCESS
接下来写一个完整的 Pipeline 脚本,脚本中使用 Git 插件进行 Git 远程仓库代码拉取与推送,脚本写法如下,这里分步骤进行。
远程仓库代码拉取可以直接使用 git 插件提供好的方法执行拉取操作,使用如下:
- node(){
- stage("Git 远程仓库拉取"){
- git url: "https://github.com/my-dlq/test.git",
- credentialsId: "git-global-credentials",
- branch: "master"
- }
- }
GROOVY
上面执行了远程代码拉取,不过在实际使用中,我们经常会拉取远程代码,然后修改一些内容,然后再 commit 与 push 到远程仓库,这些操作在 Pipeline 中的用法如下:
- node(){
- // 先执行从远程 Git 仓库拉取代码
- stage("Git 远程仓库拉取"){
- git url: "https://github.com/my-dlq/test.git",
- credentialsId: "git-global-credentials",
- branch: "master"
- }
- // 再执行添加新的文件,然后推送到远程 Git 仓库
- stage("推送到 Git 远程仓库"){
- withCredentials([usernamePassword(credentialsId:"git-global-credentials",
- usernameVariable: "GIT_USERNAME",
- passwordVariable: "GIT_PASSWORD")]) {
- // 配置 Git 工具中仓库认证的用户名、密码
- sh 'git config --local credential.helper "!p() { echo username=\\$GIT_USERNAME; echo password=\\$GIT_PASSWORD; }; p"'
- // 配置 git 变量 user.name 和 user.emai
- sh 'git config --global user.name "my-dlq"'
- sh 'git config --global user.email "mynamedlq@163.com"'
- // 创建新的文件,存入 git 项目,内容为当前时间,方便后续测试
- sh 'date | tee aaa.txt'
- // 将文件推送到 git 远程仓库
- sh 'git add -f aaa.txt'
- sh 'git commit -m "进行 git 测试"'
- sh 'git push -u origin master'
- }
- }
- }
注意:上面配置的 Git 环境中的 user.name 和 user.email 一定要和 Github 中用户设置的保持一致,不然会导致权限验证错误。
修改测试 Job 的配置,设置其中的 Pipeline Script 为上面的测试 Git 脚本:
然后执行任务构建,可以看到下面日志信息:
- Started by user 管理员
- Running in Durability level: PERFORMANCE_OPTIMIZED
- [Pipeline] Start of Pipeline
- [Pipeline] node
- Running on Jenkins in /var/jenkins_home/workspace/git-test
- [Pipeline] {
- [Pipeline] stage
- [Pipeline] { (Git 远程仓库拉取)
- [Pipeline] git
- using credential git-global-credentials
- > git rev-parse --is-inside-work-tree # timeout=10
- Fetching changes from the remote Git repository
- > git config remote.origin.url https://github.com/my-dlq/test.git # timeout=10
- Fetching upstream changes from https://github.com/my-dlq/test.git
- > git --version # timeout=10
- using GIT_ASKPASS to set credentials Github 用户名/密码凭据
- > git fetch --tags --progress -- https://github.com/my-dlq/test.git +refs/heads/*:refs/remotes/origin/* # timeout=10
- > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
- > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
- Checking out Revision b2bafc3cffb6321a0d088d87f95dc410199a2276 (refs/remotes/origin/master)
- > git config core.sparsecheckout # timeout=10
- > git checkout -f b2bafc3cffb6321a0d088d87f95dc410199a2276 # timeout=10
- > git branch -a -v --no-abbrev # timeout=10
- > git branch -D master # timeout=10
- > git checkout -b master b2bafc3cffb6321a0d088d87f95dc410199a2276 # timeout=10
- Commit message: "进行 git 测试"
- > git rev-list --no-walk b2bafc3cffb6321a0d088d87f95dc410199a2276 # timeout=10
- [Pipeline] }
- [Pipeline] // stage
- [Pipeline] stage
- [Pipeline] { (推送到 Git 远程仓库)
- [Pipeline] withCredentials
- Masking supported pattern matches of $GIT_USERNAME or $GIT_PASSWORD
- [Pipeline] {
- [Pipeline] sh
- + git config --local credential.helper !p() { echo username=$GIT_USERNAME; echo password=$GIT_PASSWORD; }; p
- [Pipeline] sh
- + git config --global user.name ****
- [Pipeline] sh
- + git config --global user.email mynamedlq@163.com
- [Pipeline] sh
- + date
- + tee aaa.txt
- Sat Apr 25 16:01:10 UTC 2020
- [Pipeline] sh
- + git add -f aaa.txt
- [Pipeline] sh
- + git commit -m 进行 git 测试
- [master a3a9ae2] 进行 git 测试
- 1 file changed, 1 insertion(+), 1 deletion(-)
- [Pipeline] sh
- + git push -u origin master
- To https://github.com/****/test.git
- b2bafc3..a3a9ae2 master -> master
- Branch master set up to track remote branch master from origin.
- [Pipeline] }
- [Pipeline] // withCredentials
- [Pipeline] }
- [Pipeline] // stage
- [Pipeline] }
- [Pipeline] // node
- [Pipeline] End of Pipeline
- Finished: SUCCESS
已经验证能顺利的拉取与推送项目到远程 Git 仓库,到此结束。
来源:http://www.mydlq.club/article/82/
‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧
推荐阅读
【3】CPU中的程序是怎么运行起来的 必读
【5】设计模式之简单工厂模式、工厂模式、抽象工厂模式的对比【羽林君】本公众号全部原创干货已整理成一个目录,回复[ 资源 ]即可获得。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。