Bitbucket의 OAuth로 리포지토리 복제

4501 단어 api도커GitBitbucket

배경



Infrastructure as Code에서 프라이빗 리포지토리에서 소스 코드를 끌어 와서 빌드 혹은 배포하고 싶다고 하는 경우가 자주 있다(라고 생각한다).
그러나 코드 안이나 환경 변수에 리포지토리의 사용자 이름, 비밀번호 등의 계정 정보를 쓰는 것은 그리 스마트하지 않습니다.

이 글에서는 Bitbucket의 OAuth를 사용하여 Docker 컨테이너 내에 코드를 배포하는 방법을 설명한다.

Bitbucket의 OAuth 설정



우선은 Bitbucket OAuth를 설정하고 Credential을 사용하여 Bitbucket에 API 액세스할 수 있도록 한다.
  • Bitbucket 사용자 설정 화면에서 설정 -> OAuth -> 소비자 키 추가를 클릭합니다.
  • "Name"과 "콜백 URL"을 입력하고 권한의 "리포지토리""읽기"를 체크하고 설정을 저장합니다. "콜백 URL"은 사용하지 않으므로 무엇이든 OK


  • 3. 지금 작성한 소비자 키의 열쇠·시크릿을 메모해 둔다. 이것으로 OAuth 준비 완료


    액세스 토큰 얻기



    공식 를 참고한다.
    액세스 토큰의 취득은 이하의 커멘드로 가능.
    h tps : // / t t c c t. rg / 해 / 오 th2 / 아세스 s_ 토켄 을 두드려 인증에 성공하면 JSON이 돌아오므로 jq 명령으로 구문 분석하여 access_token을 얻는다.
    jq 명령 설치가 필요합니다.
    
    # 上記の鍵とシークレットを設定する
    $ BB_OAUTH_KEY=****
    $ BB_OAUTH_SECRET=****
    
    # API叩いて帰ってきたJSONからjqコマンドで`access_token`を取得する。
    $ curl https://bitbucket.org/site/oauth2/access_token \
        -d grant_type=client_credentials \
        -u ${BB_OAUTH_KEY}:${BB_OAUTH_SECRET} \
      | jq -r '.access_token'
    

    Dockerfile에서 이미지 만들기



    이미지를 빌드할 때, 호스트 머신으로부터 변수를 건네주는 것으로, Dockerfile내에 크리덴셜 정보를 남기지 않게 할 수 있다. 또한 위의 명령을 사용하여 액세스 토큰을 얻고 저장소를 복제합니다.

    Dockerfile


    # ベースイメージは何でもOK
    FROM python:3.6.4-alpine3.7
    
    # build時の変数
    ARG BB_OAUTH_KEY
    ARG BB_OAUTH_SECRET
    
    RUN apk update
    RUN apk add curl
    RUN apk add jq
    RUN apk add git
    
    # USER_NAME, REPOSITORY_NAME は適宜書き換えてください
    RUN git clone https://x-token-auth:`curl https://bitbucket.org/site/oauth2/access_token -d grant_type=client_credentials -u ${BB_OAUTH_KEY}:${BB_OAUTH_SECRET} \
     | jq -r '.access_token'`@bitbucket.org/USER_NAME/REPOSITORY_NAME
    

    빌드 명령


    
    $ docker build -f ./Dockerfile --build-arg BB_OAUTH_KEY="****" BB_OAUTH_SECRET="****" .
    

    이것으로 빌드는 완료.
    환경 변수를 매번 쓰는 것이 번거로울 때는, --build-arg 를 지정하지 않고 호스트 머신의 환경 변수로부터에서도 취득해 준다.

    좋은 웹페이지 즐겨찾기