Gitlab利用Webhook实现Push代码后的jenkins自动构建

之前部署了Gitlab的代码托管平台和Jenkins的代码发布平台。通常是开发后的代码先推到Gitlab上管理,然后在Jenkins里通过脚本构建代码发布。这种方式每次在发版的时候,需要人工去执行jenkins上的构建动作,有时显得过于繁琐。于是就想到了Gitlab的Webhook功能,通过Webhook的相关设置,可以实现代码Push后,自动去触发jenkins上的构建动作,这样就不需要人工干预去执行发版操作了。设置如下:

1)Jenkins上的操作

通常,jenkins在项目配置时是可以配置远程构建触发器,设置好jenkins的回调url后就可以让jenkins进行自动构建。这就需要先下载Gitlab Hook Plugin 插件。登陆Jenkins,分别点击”系统管理”->”插件管理”->”可选插件”,选择Gitlab Hook Plugin

未分类

然后构建相应的项目工程,比如下面的test-wx(下面最关键的是第2步中查看url,然后用这个url回调地址去Gitlab的webhook上添加)
a)先设置代码的git下载路径,这里通过ssh方式(需要提前将Jenkins本机的key添加到Gitlab上)

未分类

b)查看jenkin生成回调地址。在任务重构建触发器下获取回调URL。下面的URL那一行只有Gitlab Hook Plugin插件下载成功后才能显示。

未分类

c)然后设置代码发布的推送脚本

未分类

2)Gitlab上的操作

登陆Gitlab上的testwx3项目中,添加webhook(用上面Jenkins中生成的回调url)

未分类

然后点击这个项目的”Settings”

未分类

未分类

添加成功后,点击此webhook后面的test进行测试

未分类

如果返回Hook successfully executed.表示配置成功。
这样,下次push代码后,就会自动触发jenkins上相关的构建工程进行自动发布了!无需人工干预~

未分类


如上设置后,比如在gitlab的testwx3项目代码库中push一个test.txt文件,然后测试下是否自动发布了

未分类

然后去Jenkins上查看,如下发现已经自动发布了!

未分类

最后去目标机器192.168.1.19的/tmp/testwx目录下发现test.txt文件已经发布过来了~

未分类

Gitlab通过Webhook实现Push代码后Jenkins自动构建

1. 生成Gitlab的Access Token

点击用户下面的Settings, 如下图

未分类

再点击Access Tokens, 填写Name, 点击Create personal access token 生成Access Token

未分类

2. Jenkins安装插件

需要安装GitLab Plugin, Gitlab Hook Plugin

3. 在Jenkins中配置Gitlab API token

点击系统设置

未分类

填写Connection name, 如gitlab.abc.com
填写Gitlab host URL, 如 http://gitlab.abc.com

未分类

点击Add按钮,在弹出框中填写步骤1生成的Access Token

未分类

4. 配置源码管理

Repository URL示例: [email protected]:gopher/demo.git

未分类

点击Add按钮,在弹出框中按下图填写。注意:jenkins所在的机器上要先生成公钥、私钥,且在用户目录下。

未分类

5. 生成回调地址和Secret Token

在构建触发器中选中Build when a change is pushed to GitLab,GitLab webhook URL即是回调地址,如下图中红线处,例如: http://jenkins.abc.com/project/demo

未分类

再点击上图中的高级按钮,这时会出现高级选项, 如下图,点击Generate按钮生成Secret Token

未分类

6. 配置Gitlab的webhook

假如GItlab中有一个项目demo,那么先进入这个项目,然后,再点击Settings >> Integrations

未分类

填写步骤5中生成的回调地址,和Secret Token, 再点击Add Webhook创建Webhook, 最后点击test测试下是否配置成功.

未分类

除了 pull 和 push 你应该知道 git 的操作

git 仓库简单示意图

| 工作区(Working) | 暂存区(Staging) | 版本库(Local repo)| 远程仓库(Remote repo)|

    |---- git add ---->|--- git commit --->|---- git push --->|
    |----------- git commit -am  --------->|---- git push --->|
    |<- git checkout --|<--- git reset ----|<--- git pull ----|
    |<--------- git reset --hard HEAD -----|<--- git pull ----|

与远程分支建立追踪关系(tracking)

git branch --set-upstream master origin/master

设置 rebase 让历史变得清晰

git config --global branch.autosetuprebase always # 所有分支
git config branch.master.rebase true # 指定分支

查看 git 配置信息

git config --list

禁止终端显示中文文件名为 xxxxxx 形式

git config --global core.quotepath false

更美观的输出 log

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative -10
git log

查看简要的 log

git log --oneline --5

强制更新,覆盖本地修改

git fetch --all
git reset --hard origin/master

操作撤销(还没有 push)

git reset --soft 3ce07 # 回滚到多个提交之前,但保留没有提交的改变(不回滚工作区和缓存区)
git reset --hard HEAD # 回滚到最近一次的提交(会回滚工作区和缓存区)

操作撤销 (已经 push)

git revert c011e # 用一个新提交来消除一个历史提交所做的修改

版本撤销

git log
git reset --hard e54dd31

修改 commit 注释

git commit --amend -m "Fixes bug #42"

版本恢复

git reflog
git reset --hard c80ae4f

隐藏工作区

git stash # 暂存改动(默认备注)
git stash save "暂存头部样式修改" # 暂存改动,自定义备注
git stash list # 查看暂存的改动列表
git stash pop --index stash@{0} # 释放指定暂存项
git stash pop # 释放全部暂存的改动
git stash drop # 删除暂存的改动

查看修改日志

git log --author=yida # 查看特定成员的更新记录
git log --grep="等待页面" # 按关键字搜索更新记录
git log ./package.json # 查看指定文件的更改日志

打 Tag 操作

git tag v0.9 # 在 HEAD 打"轻 tag"
git tag -am "xxx" v0.9 # 在 HEAD 打"注解 tag"
git tag v0.9 a032c # 在指定提交打"轻 tag"
git tag -a v0.1 -m "xxx" a032c # 在指定提交打"注解 tag"
git tag # 查看打过的 tag
git tag -n # 查看打过的 tag 及注解
git push origin v1.0 # 将 tag 推送到远程
git push origin --tags # 推送全部尚未推送到远程的 tag
git tag -d v0.9 # 删除本地 tag
git push origin :refs/tags/v0.9 # 从远程删除 tag

基于某个 tag 创建新分支

假设在你的主分支上有一个 tag 为 v1.0 , 主分支的名字为 master:

git branch new_branch v1.0 # 以 tag v1.0 创建新的分支 newbranch
git checkout new_branch # 切换到分支 newbranch
git push origin new_branch # 把本地 newbranch 分支提交到远程仓库

添加忽略文件

echo '*~' >> .gitignore
git add .gitignore

添加全局忽略文件

git config --global core.excludesfile ~/.gitignore_global
vim ~/.gitignore_global

加入要忽略的文件名

Git 使用问题

问题1:怎样设置 git 操作免输账号密码?

1、在主文件夹下创建文件 .git-credentials, 用vim编辑:

cd ~
touch .git-credentials
vim .git-credentials

2、在 .git-credentials 添加 https://{username}:{password}@github.com,例如:

https://yida:[email protected]

3、在终端下执行命令:

git config --global credential.helper store

4、查看到 ~/.gitconfig 文件新加入一项配置:

[credential]
helper = store

以后 git 操作就不再需要密码验证

问题2:怎样设置 git 忽略已经被提交的文件?

git update-index --assume-unchanged .ftpconfig # 忽略跟踪 .ftpconfig
git update-index --no-assume-unchanged .ftpconfig # 恢复跟踪 .ftpconfig
git ls-files -v | grep -e "^[hsmrck]" # 查看当前被忽略、已经纳入版本库管理的文件

问题3: 如何把在本地 A 分支上的一个 commit(7b31b7)放到本地 B 分支上?

git checkout B
git cherry-pick 7b31b7

问题4. 查看谁弄乱了文件 index.php 的代码?

git blame index.php

问题5. 怎样恢复丢失的提交?

git reflog # 查看该所有操作日志 -- 例如,丢失的提交信息如下:
# 794b305 HEAD@{24}: rebase: 修改开户状态相关
git branch recover-branch 794b305 # 在丢失的 commit(794b305) 上创建一个新分支, 即可恢复此次提交