Jenkins+使用gitlab的api,新建提交合并分支,语言shell

8 篇文章 0 订阅

Jenkins

环境docker化

版本2..263.4

gitlab

环境docker化

版本13..7

api v4

原因:说要按分支 按流程 合并 发版,python3 也有一堆api 测了下一堆报错就不多说了,

下面还是可以优化一下的,多个项目的时候可能出现点一次只执行了提交 ,还没合并,那就再点一次

1gitlab配置令牌,不多说了给个api权限,百度一大堆

2

配置到环境变量 文件都是docker里配置 需要权限的话docker exec -it -u root id或者name bash

/etc/profile.d/gitlab_api.sh

export GITLAB_URL=http://你的URL前缀没有尾斜杠
export GITLAB_API_URL=${GITLAB_URL}/api/v4/projects
# ${GITLAB_URL}/profile
export GITLAB_USER_ID=你的用户ID(数字)
# ${GITLAB_URL}/profile/personal_access_tokens
export GITLAB_PRIVATE_TOKEN=你的Token

Jenkins 构建执行shell脚本

#!/usr/bin/env bash
#新环境 刷新 使用
source /etc/profile 1>/dev/null 2>&1
#项目id
export CI_PROJECT_ID=2
#项目的分支test
export CI_COMMIT_REF_NAME=test
#项目分支master
export TARGET_BRANCH=master
#创建提交分支 把test合并到master
/opt/createMR.sh
#停一秒,就怕请求合并还没完全生效,导致合并失败,点击一次就合成成功
sleep 1s
#接受合并分支请求
sh /opt/acceptMR.sh

为啥加#!/usr/bin/env bash 是因为Build step 'Execute shell' marked build as failure这个报错

最后一行sh  也是因为Build step 'Execute shell' marked build as failure其实可以sh都 美观一点

/usr/bin/env: ‘bash\r’: No such file or directory 忘了又搞成win创建文件了,vim可以修改 但还是用linux创建 复制粘贴快

 

/opt/createMR.sh

#!/usr/bin/env bash
set -e

# https://docs.gitlab.com/ee/api/merge_requests.html#create-mr

echo "
  curl -X POST \"${GITLAB_API_URL}/${CI_PROJECT_ID}/merge_requests\"
    --header \"PRIVATE-TOKEN: ******\"
    --header \"Content-Type: application/json\"
    --data
      \"{
        \\\"id\\\": ${CI_PROJECT_ID},
        \\\"source_branch\\\": \\\"${CI_COMMIT_REF_NAME}\\\",
        \\\"target_branch\\\": \\\"${TARGET_BRANCH}\\\",
        \\\"title\\\": \\\"jenkins auto merge requests\\\",
        \\\"assignee_id\\\":\\\"${GITLAB_USER_ID}\\\"
      }\"
    --silent
"

createMR=`curl -X POST "${GITLAB_API_URL}/${CI_PROJECT_ID}/merge_requests" \
  --header "PRIVATE-TOKEN:${GITLAB_PRIVATE_TOKEN}" \
  --header "Content-Type: application/json" \
  --data "{
      \"id\": ${CI_PROJECT_ID},
      \"source_branch\": \"${CI_COMMIT_REF_NAME}\",
      \"target_branch\": \"${TARGET_BRANCH}\",
      \"title\": \"jenkins auto merge requests\",
      \"assignee_id\":\"${GITLAB_USER_ID}\"
    }" \
  --silent`

echo "$createMR
"

createMR_iid=$(echo $createMR | cut -d ':' -f 3 | cut -d ',' -f 1)

if [[ $createMR_iid != *[0-9] ]]; then
  exit 1
fi

/opt/acceptMR.sh

#!/usr/bin/env bash
set -e

# https://docs.gitlab.com/ee/api/merge_requests.html#list-project-merge-requests

echo "
curl \"${GITLAB_API_URL}/${CI_PROJECT_ID}/merge_requests?state=opened&source_branch=${CI_COMMIT_REF_NAME}\"
  --header \"PRIVATE-TOKEN:${GITLAB_PRIVATE_TOKEN}\"
  --silent 
"

listMR=`curl "${GITLAB_API_URL}/${CI_PROJECT_ID}/merge_requests?state=opened&source_branch=${CI_COMMIT_REF_NAME}" \
  --header "PRIVATE-TOKEN:${GITLAB_PRIVATE_TOKEN}" \
  --silent`

echo "$listMR
"

listMR_iid=$(echo $listMR | cut -d ':' -f 3 | cut -d ',' -f 1)

if [[ $listMR_iid != *[0-9] ]]; then
  exit 1
fi


# https://docs.gitlab.com/ee/api/merge_requests.html#accept-mr

echo "
curl -X PUT \"${GITLAB_API_URL}/${CI_PROJECT_ID}/merge_requests/$listMR_iid/merge\"
    --header \"PRIVATE-TOKEN: ******\"
    --silent
"

acceptMR=`curl -X PUT "${GITLAB_API_URL}/${CI_PROJECT_ID}/merge_requests/$listMR_iid/merge" \
  --header "PRIVATE-TOKEN: ${GITLAB_PRIVATE_TOKEN}" \
  --silent`

echo "$acceptMR
"

acceptMR_iid=$(echo $acceptMR | cut -d ':' -f 3 | cut -d ',' -f 1)

if [[ $acceptMR_iid != *[0-9] ]]; then
  exit 1
fi

最后给权限

chmod 755 /opt/createMR.sh
chmod 755 /opt/acceptMR.sh

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值