GitLab: 使用用户名/密码创建Access Token的示例脚本

在这里插入图片描述
这篇文章总结一下上篇文章的内容,整理了一个示例用的脚本,只需要传入admin用户名、密码和gitlab的url即可创建指定名称的apitoken。

环境准备

docker-compose文件

liumiaocn:gitlab liumiao$ cat docker-compose.yml 
version: '2'    
services:
  # Version Control service: Gitlab
  gitlab:
    image: gitlab/gitlab-ce:12.10.5-ce.0
    ports:
      - "32001:80"
    volumes:
      - ./log/:/var/log/gitlab
      - ./data/:/var/opt/gitlab
      - ./conf/:/etc/gitlab
    restart: "no"
liumiaocn:gitlab liumiao$ 

事前准备

创建如下目录:

liumiaocn:gitlab liumiao$ ls
docker-compose.yml
liumiaocn:gitlab liumiao$ mkdir -p log data conf
liumiaocn:gitlab liumiao$ ls
conf			data			docker-compose.yml	log
liumiaocn:gitlab liumiao$ 

启动

启动命令:docker-compose up -d

登录URL

  • http://localhost:32001

在这里插入图片描述
注:此处设定root用户密码为liumiaocn,后续将使用root/liumiaocn创建和获取Access Token。

事前确认

在这里插入图片描述

示例代码

liumiaocn:api liumiao$ cat token_create.sh 
#!/bin/sh

# definition
ENV_GITLAB_HOST=${ENV_GITLAB_HOST:-localhost}
ENV_GITLAB_PORT=${ENV_GITLAB_PORT:-32001}
ENV_GITLAB_USER=${ENV_GITLAB_USER:-root}
ENV_GITLAB_PASSWORD=${ENV_GITLAB_PASSWORD:-liumiaocn}
ENV_GITLAB_APITYPE=${ENV_GITLAB_APITYPE:-api}
ENV_GITLAB_TOKEN_NAME=${ENV_GITLAB_TOKEN_NAME:-apitoken}
ENV_DEBUG_LOG=${ENV_DEBUG_LOG:-OFF}

DEBUG_LOG_LINE_PREFIX="[debug] : "
DEBUG_LOG() {
	if [ _"ON" = _"$ENV_DEBUG_LOG" ]; then
	  echo "${DEBUG_LOG_LINE_PREFIX} " $@
	fi
}

# gitlab url
gitlab_url="http://${ENV_GITLAB_HOST}:${ENV_GITLAB_PORT}"
gitlab_url_signin="${gitlab_url}/users/sign_in"

# temp files
gitlab_cookie="cookie.txt"

# html result by using users/sign_in login
html_result=$(curl -c ${gitlab_cookie} -i "${gitlab_url_signin}" -s)

# extract authenticity token
authenticity_token=$(echo $html_result | sed 's/.*value="\(.*\)" \/><div.*/\1/')

DEBUG_LOG "[step 1]: $authenticity_token"

# using curl commond to send login info: token/cookie/user/password 
curl -b ${gitlab_cookie} -c ${gitlab_cookie} -i "${gitlab_url_signin}/" \
	--data "user[login]=${ENV_GITLAB_USER}&user[password]=${ENV_GITLAB_PASSWORD}" \
	--data-urlencode "authenticity_token=${authenticity_token}" >/dev/null 2>&1

# use curl command access profile/personal_access_tokens page to get token
html_result=$(curl -H 'user-agent: curl' -b ${gitlab_cookie} -i "${gitlab_url}/profile/personal_access_tokens" -s)

# get the token for user login
authenticity_token=$(echo $html_result | sed 's/.*authenticity_token"[[:blank:]]value="\(.*\)"[[:blank:]]\/>[[:blank:]]<div.*/\1/' |head -n1)
DEBUG_LOG "[step 2]: $authenticity_token"

# using curl commond by using token/cookie/user/password information
curl -b ${gitlab_cookie} -c ${gitlab_cookie} -i "${gitlab_url_signin}/" \
	--data "user[login]=${ENV_GITLAB_USER}&user[password]=${ENV_GITLAB_PASSWORD}" \
	--data-urlencode "authenticity_token=${authenticity_token}" >/dev/null 2>&1

# change to personal_access_tokens page to create token
html_result=$(curl -H 'user-agent: curl' -b ${gitlab_cookie} -i "${gitlab_url}/profile/personal_access_tokens" -s)

# get token for next operation
authenticity_token=$(echo $html_result | sed 's/.*authenticity_token"[[:blank:]]value="\(.*\)"[[:blank:]]\/>[[:blank:]]<div.*/\1/' |head -n1)
DEBUG_LOG "[step 3]: $authenticity_token"


# submit token-creating from to create the token
#      the response will be a redirect, so we have to follow using `-L`
html_result=$(curl -L -b ${gitlab_cookie} "${gitlab_url}/profile/personal_access_tokens" \
	--data-urlencode "authenticity_token=${authenticity_token}" \
	--data 'personal_access_token[name]='${ENV_GITLAB_TOKEN_NAME}'&personal_access_token[expires_at]=&personal_access_token[scopes][]='${ENV_GITLAB_APITYPE} 2>/dev/null)

# extract token information
access_token=$(echo $html_result | sed 's/.*created-personal-access-token"[[:blank:]]value="\(.*\)"[[:blank:]]readonly="readonly" class="qa-created-personal-access-token.*/\1/' |head -n1)
DEBUG_LOG "[step 4]: $access_token"

echo "${ENV_GITLAB_USER}:$access_token"

# check access token
curl -H "PRIVATE-TOKEN: $access_token" "${gitlab_url}/api/v4/version"
echo
rm ${gitlab_cookie}
liumiaocn:api liumiao$

执行示例

liumiaocn:api liumiao$ sh token_create.sh 
root:HzicGhxsDYK3xqRydSvt
{"version":"12.10.5","revision":"ed53d560372"}
liumiaocn:api liumiao$ 

结果确认

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/liumiaocn/article/details/107471522